manen 0.3.0.dev1__tar.gz → 0.3.0.dev3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/PKG-INFO +8 -6
  2. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/README.md +7 -5
  3. manen-0.3.0.dev3/docs/source/changelog.rst +145 -0
  4. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/__init__.py +1 -1
  5. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/browser.py +2 -3
  6. manen-0.3.0.dev1/CHANGELOG.md +0 -69
  7. manen-0.3.0.dev1/docs/source/changelog.rst +0 -108
  8. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/.github/workflows/build-documentation.yml +0 -0
  9. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/.github/workflows/deploy-package.yml +0 -0
  10. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/.github/workflows/test-package.yml +0 -0
  11. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/.gitignore +0 -0
  12. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/.rstcheck.cfg +0 -0
  13. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/LICENSE +0 -0
  14. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/Makefile +0 -0
  15. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/assets/screenshot_pypi_home.png +0 -0
  16. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/assets/screenshot_pypi_search_results.png +0 -0
  17. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/make.bat +0 -0
  18. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/_static/favicon.png +0 -0
  19. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/_static/manen_logo.png +0 -0
  20. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/_static/manen_logo_xs.png +0 -0
  21. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/_static/theme_override.css +0 -0
  22. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/about.rst +0 -0
  23. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/conf.py +0 -0
  24. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/contributing.rst +0 -0
  25. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/index.rst +0 -0
  26. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/installation.rst +0 -0
  27. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.browser.rst +0 -0
  28. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.exceptions.rst +0 -0
  29. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.finder.rst +0 -0
  30. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.helpers.rst +0 -0
  31. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.page_object_model.dom.rst +0 -0
  32. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.page_object_model.element.rst +0 -0
  33. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.page_object_model.rst +0 -0
  34. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.page_object_model.webarea.rst +0 -0
  35. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/manen/manen.rst +0 -0
  36. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/user_guide/browser.ipynb +0 -0
  37. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/user_guide/dom_exploration.ipynb +0 -0
  38. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/user_guide/page_object_model.ipynb +0 -0
  39. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/docs/source/user_guide.rst +0 -0
  40. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/exceptions.py +0 -0
  41. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/finder.py +0 -0
  42. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/helpers.py +0 -0
  43. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/page_object_model/__init__.py +0 -0
  44. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/page_object_model/dom.py +0 -0
  45. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/page_object_model/element.py +0 -0
  46. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/page_object_model/webarea.py +0 -0
  47. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/manen/typing.py +0 -0
  48. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/pyproject.toml +0 -0
  49. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/requirements-dev.lock +0 -0
  50. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/requirements.lock +0 -0
  51. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/tests/__init__.py +0 -0
  52. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/tests/assets/page.yaml +0 -0
  53. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/tests/assets/page_test_basic.jinja.html +0 -0
  54. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/tests/test_finder.py +0 -0
  55. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/tests/test_helpers.py +0 -0
  56. {manen-0.3.0.dev1 → manen-0.3.0.dev3}/tests/test_imports.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: manen
3
- Version: 0.3.0.dev1
3
+ Version: 0.3.0.dev3
4
4
  Summary: An implementation of the Page Object Model design pattern, and other utilities for web scraping and automation.
5
5
  Project-URL: Changes, https://kodaho.github.io/manen/changelog.html
6
6
  Project-URL: Documentation, https://kodaho.github.io/manen/
@@ -45,11 +45,13 @@ Description-Content-Type: text/markdown
45
45
  ---
46
46
 
47
47
  <p align="center">
48
- <a href="https://pypi.org/project/manen">PyPI package</a>
48
+ <a href="https://pypi.org/project/manen">PyPI</a>
49
49
 
50
50
  <a href="https://kodaho.github.io/manen/">Documentation</a>
51
51
 
52
- <a href="https://github.com/kodaho/manen/issues">Issue tracking</a>
52
+ <a href="https://kodaho.github.io/manen/changelog.html">Changelog</a>
53
+
54
+ <a href="https://github.com/kodaho/manen/issues">Issue tracker</a>
53
55
  </p>
54
56
 
55
57
  Manen is a package built to enhance developer experience when using Selenium. Among the core
@@ -57,7 +59,7 @@ features, you can find:
57
59
 
58
60
  - an implementation of the [Page Object Model](https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/)
59
61
  design pattern
60
- - a class which improves the operability of a Selenium's Webdriver
62
+ - a class which improves the operability of a Selenium's WebDriver
61
63
  - a function to easily find and isolate DOM elements inside a Selenium page
62
64
 
63
65
  This package aims to provide you the tools to write more concise, flexible and powerful code
@@ -190,8 +192,8 @@ print(page.results[0].model_dump())
190
192
  > [!TIP]
191
193
  > Other DOM elements are also implemented, such as `ImageSrc`, `Input`, `Checkbox`... Each one of
192
194
  > them is used to target a specific attribute from a DOM element and enable interaction with it,
193
- > in a flawless Pythonic way. Check the [documentation](https://kodaho.github.io/manen/) for the
194
- > full list of available elements.
195
+ > in a flawless Pythonic way. Check the [documentation](https://kodaho.github.io/manen/user_guide/page_object_model.html#List-of-available-elements)
196
+ > for the list of available elements.
195
197
 
196
198
  Let's finally close the Selenium WebDriver to avoid any remaining running applications once we
197
199
  exit the Python program.
@@ -20,11 +20,13 @@
20
20
  ---
21
21
 
22
22
  <p align="center">
23
- <a href="https://pypi.org/project/manen">PyPI package</a>
23
+ <a href="https://pypi.org/project/manen">PyPI</a>
24
24
 
25
25
  <a href="https://kodaho.github.io/manen/">Documentation</a>
26
26
 
27
- <a href="https://github.com/kodaho/manen/issues">Issue tracking</a>
27
+ <a href="https://kodaho.github.io/manen/changelog.html">Changelog</a>
28
+
29
+ <a href="https://github.com/kodaho/manen/issues">Issue tracker</a>
28
30
  </p>
29
31
 
30
32
  Manen is a package built to enhance developer experience when using Selenium. Among the core
@@ -32,7 +34,7 @@ features, you can find:
32
34
 
33
35
  - an implementation of the [Page Object Model](https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/)
34
36
  design pattern
35
- - a class which improves the operability of a Selenium's Webdriver
37
+ - a class which improves the operability of a Selenium's WebDriver
36
38
  - a function to easily find and isolate DOM elements inside a Selenium page
37
39
 
38
40
  This package aims to provide you the tools to write more concise, flexible and powerful code
@@ -165,8 +167,8 @@ print(page.results[0].model_dump())
165
167
  > [!TIP]
166
168
  > Other DOM elements are also implemented, such as `ImageSrc`, `Input`, `Checkbox`... Each one of
167
169
  > them is used to target a specific attribute from a DOM element and enable interaction with it,
168
- > in a flawless Pythonic way. Check the [documentation](https://kodaho.github.io/manen/) for the
169
- > full list of available elements.
170
+ > in a flawless Pythonic way. Check the [documentation](https://kodaho.github.io/manen/user_guide/page_object_model.html#List-of-available-elements)
171
+ > for the list of available elements.
170
172
 
171
173
  Let's finally close the Selenium WebDriver to avoid any remaining running applications once we
172
174
  exit the Python program.
@@ -0,0 +1,145 @@
1
+ Changelog
2
+ =========
3
+
4
+ .. |topic| raw:: html
5
+
6
+ <span style="display: inline-block; width: 110px; font-size:85%; font-weight: 600;">Topic</span> <span style="font-size:85%">
7
+
8
+ .. |released_on| raw:: html
9
+
10
+ <span style="display: inline-block; width: 110px; font-size:85%; font-weight: 600;">Release date</span> <span style="font-size:85%">
11
+
12
+ .. |end| raw:: html
13
+
14
+ </span>
15
+
16
+
17
+ 0.3.0
18
+ -----
19
+
20
+ |topic| Page object model implementation revamp & other major changes |end|
21
+
22
+ |released_on| (unreleased) |end|
23
+
24
+ .. warning::
25
+
26
+ Even if it's a minor release, this version represents a major change for the project; the
27
+ package has been mostly rewritten in order to implement the page object model design pattern in
28
+ a more efficient way (using type annotation).
29
+
30
+ Besides, some functionalities have been removed with the aim of limiting the number of features
31
+ during the beta phase.
32
+
33
+ All previous versions should be considered as deprecated.
34
+
35
+
36
+ Changed
37
+ ^^^^^^^
38
+ - The module :py:mod:`~manen.page_object_model` has been rewritten to use type annotation instead
39
+ of ``Element``. Note that some elements like select or radio button haven't been implemented in
40
+ this new version yet (but will be in the future).
41
+ - Most of the documentation pages have been rewritten and improved.
42
+ - Most modules have better typing annotations and documentation. Besides, the code has been
43
+ improved to be more "Pythonic".
44
+ - Manen no longer has optional dependencies (which were in fact development dependencies).
45
+ - The minimal version of Python required is now 3.10.
46
+ - Internally, Manen is now using `rye <https://rye.astral.sh/guide/>`_ as project manager, and
47
+ `ruff <https://docs.astral.sh/ruff/>`_ for the linting and formatting.
48
+
49
+ Removed
50
+ ^^^^^^^
51
+ - The module ``manen.resource`` and everything related (like the CLI) have been removed. Indeed,
52
+ the `official Selenium manager <https://www.selenium.dev/documentation/selenium_manager/>`_
53
+ (available as a CLI tool and in recent versions of Python bindings for Selenium) provides the
54
+ same functionalities.
55
+ - ``manen.browser.BraveBrowser`` has been removed because it had a dependency on the module
56
+ ``manen.resource``. Besides, it was considered as not enough tested internally to make it
57
+ available publicly.
58
+
59
+ |
60
+
61
+ 0.2.0
62
+ -----
63
+
64
+ |topic| Rename some classes in :py:mod:`~manen.page_object_model` and improve CLI |end|
65
+
66
+ |released_on| 2022-02-19 |end|
67
+
68
+ Added
69
+ ^^^^^
70
+ - Specify link to changelog in documentation in package metadata.
71
+ - Introduce new options in ``manen driver download`` to set the specifications of the drivers
72
+ to be downloaded directly from the command line.
73
+ - Add exhaustibility in documentation of :py:mod:`~manen.page_object_model` to describe
74
+ private/special methods and classes other than the ones in ``__all__``.
75
+
76
+ Changed
77
+ ^^^^^^^
78
+
79
+ - Improve CLI command to download drivers executable (now launched with ``manen driver download``).
80
+ - Rename :py:class:`~manen.page_object_model.DateTimeElement` (previously ``DatetimeElement``).
81
+ - Rename :py:class:`~manen.page_object_model.DOMAccessor` (previously ``DomAccessor``).
82
+
83
+ Fixed
84
+ ^^^^^
85
+ - Fix link to notebooks in the info section of :ref:`User Guide`
86
+
87
+ |
88
+
89
+ 0.1.2
90
+ -----
91
+
92
+ |topic| Fix bug in the download workflow of the CLI |end|
93
+
94
+ |released_on| 2022-02-19 |end|
95
+
96
+ Fixed
97
+ ^^^^^
98
+
99
+ - Fix a ``TypeError`` in the download workflow (variable wrongly named).
100
+
101
+ |
102
+
103
+ 0.1.1
104
+ -----
105
+
106
+ |topic| Mainly documentation improvements |end|
107
+
108
+ |released_on| 2022-02-12 |end|
109
+
110
+ Changed
111
+ ^^^^^^^
112
+
113
+ - Make documentation publicly available under
114
+ `kodaho.github.io/manen <https://kodaho.github.io/manen/>`_.
115
+ - Complete README page.
116
+ - Add the section `About the project` in the documentation (moved from home page).
117
+ - Complete user guides.
118
+ - Rewording and reformatting of several sections.
119
+
120
+ |
121
+
122
+ 0.1.0
123
+ -----
124
+
125
+ |topic| First release of the package |end|
126
+
127
+ |released_on| 2022-01-31 |end|
128
+
129
+ Added
130
+ ^^^^^
131
+
132
+ - :py:func:`~manen.finder.find` allows to easily get element(s) in a WebDriver
133
+ page. This function support several very different use cases, thanks to several
134
+ arguments that can be passed to the function.
135
+ - :py:mod:`~manen.resource` is a module to easily interact with all the assets
136
+ needed by Selenium. It allows for example to download the drivers, executable
137
+ required to launch a WebDriver.
138
+ - :py:mod:`~manen.browser` defined :py:class:`~manen.browser.ChromeBrowser`
139
+ and :py:class:`~manen.browser.BraveBrowser`, an enhanced Selenium WebDriver.
140
+ - :py:mod:`~manen.page_object_model` is the implementation of `page object
141
+ model <https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/>`_
142
+ described in Selenium documentation. Thanks to that, you can describe and
143
+ interact with the DOM structure through Python classes.
144
+ - A :py:mod:`~manen.cli` is shipped with the initial release in order to download
145
+ drivers files.
@@ -17,4 +17,4 @@ use the module :py:mod:`~manen.finder` without :py:mod:`~manen.browser` or
17
17
  :py:mod:`~manen.page_object_model` without :py:mod:`~manen.browser`.
18
18
  """
19
19
 
20
- __version__ = "0.3.0.dev1"
20
+ __version__ = "0.3.0.dev3"
@@ -185,9 +185,8 @@ class BrowserMixin(WebDriverProtocol):
185
185
  class ChromeBrowser(BrowserMixin, Chrome):
186
186
  """Wrapper around Selenium ChromeWebDriver providing methods to improve its operability."""
187
187
 
188
- @classmethod
188
+ @staticmethod
189
189
  def initialize(
190
- cls,
191
190
  options: ChromeOptions | None = None,
192
191
  service: ChromeService | None = None,
193
192
  driver_path: str | None = None,
@@ -226,4 +225,4 @@ class ChromeBrowser(BrowserMixin, Chrome):
226
225
  if window_size:
227
226
  options.add_argument(f"--window-size={window_size[0]},{window_size[1]}")
228
227
 
229
- return cls(options=options, service=service)
228
+ return Chrome(options=options, service=service)
@@ -1,69 +0,0 @@
1
- # Changelog
2
-
3
- ## [0.3.0] - (unreleased)
4
-
5
- ### Changed
6
-
7
- - `manen.page_object_model` has been entirely rewritten to use type annotations
8
-
9
- ## [0.2.0] - 2022-02-19
10
-
11
- ### Changed
12
-
13
- - Improve CLI command to download drivers executable (now launched with `manen driver download`).
14
- - Rename `manen.page_object_model.DateTimeElement` (previously `DatetimeElement`).
15
- - Rename `manen.page_object_model.DOMAccessor` (previously `DomAccessor`).
16
-
17
- ### Fixed
18
-
19
- - Fix link to notebooks in the info section of User Guide
20
-
21
- ### Added
22
-
23
- - Specify link to changelog in documentation in package metadata.
24
- - Introduce new options in `manen driver download` to set the specifications of the drivers
25
- to be downloaded directly from the command line.
26
- - Add exhaustivity in documentation of `manen.page_object_model` to describe
27
- private/special methods and classes other than the ones in `__all__`.
28
-
29
- ## [0.1.2] - 2022-02-19
30
-
31
- **Fix bug in the download workflow of the CLI**
32
-
33
- ### Fixed
34
-
35
- - Fix a `TypeError` in the download workflow (variable wrongly named)
36
-
37
- ## [0.1.1] - 2022-02-12
38
-
39
- **Mainly documentation improvements**
40
-
41
- ### Changed
42
-
43
- - Make documentation publicly available under
44
- [kodaho.github.io/manen](https://kodaho.github.io/manen/).
45
- - Complete `README.md` page.
46
- - Add the section `About the project` in the documentation (moved from home page).
47
- - Complete user guides.
48
- - Rewording and reformatting of several sections.
49
-
50
- ## [0.1.0] - 2022-01-31
51
-
52
- **First release of Manen**
53
-
54
- ### Added
55
-
56
- - `manen.finder.find` allows to easily get element(s) in a WebDriver
57
- page. This function support several very different use cases, thanks to several
58
- arguments that can be passed to the function.
59
- - `manen.resource` is a module to easily interact with all the assets
60
- needed by Selenium. It allows for example to download the drivers, executable
61
- required to launch a WebDriver.
62
- - `manen.browser` defined `manen.browser.ChromeBrowser`
63
- and `manen.browser.BraveBrowser`, an enhanced Selenium WebDriver.
64
- - `manen.page_object_model` is the implementation of [page object
65
- modelling described in Selenium documentation](https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/).
66
- Thanks to that, you can describe and interact with the DOM structure through
67
- Python classes.
68
- - a CLI is shipped with the initial release in order to download
69
- drivers files.
@@ -1,108 +0,0 @@
1
- Changelog
2
- =========
3
-
4
- .. |s| raw:: html
5
-
6
- ⇲ <span style="border-bottom: 1px dashed grey;padding-bottom: 2px; font-size:85%; margin-right:8px">Release date</span> <span style="font-size:90%">
7
-
8
- .. |e| raw:: html
9
-
10
- </span>
11
-
12
-
13
- 0.3.0
14
- -----
15
-
16
- |s| (unreleased) |e|
17
-
18
- Changed
19
- ^^^^^^^
20
- - :py:mod:`~manen.page_object_model` has been entirely rewritten to use type annotation instead of `..Element` objects.
21
-
22
- |
23
-
24
- 0.2.0
25
- -----
26
-
27
- |s| 2022-02-19 |e|
28
-
29
- **Rename some classes in** :py:mod:`~manen.page_object_model` **and improve CLI**
30
-
31
- Added
32
- ^^^^^
33
- - Specify link to changelog in documentation in package metadata.
34
- - Introduce new options in ``manen driver download`` to set the specifications of the drivers
35
- to be downloaded directly from the command line.
36
- - Add exhaustibility in documentation of :py:mod:`~manen.page_object_model` to describe
37
- private/special methods and classes other than the ones in ``__all__``.
38
-
39
- Changed
40
- ^^^^^^^
41
-
42
- - Improve CLI command to download drivers executable (now launched with ``manen driver download``).
43
- - Rename :py:class:`~manen.page_object_model.DateTimeElement` (previously ``DatetimeElement``).
44
- - Rename :py:class:`~manen.page_object_model.DOMAccessor` (previously ``DomAccessor``).
45
-
46
- Fixed
47
- ^^^^^
48
- - Fix link to notebooks in the info section of :ref:`User Guide`
49
-
50
- |
51
-
52
- 0.1.2
53
- -----
54
-
55
- |s| 2022-02-19 |e|
56
-
57
- **Fix bug in the download workflow of the CLI**
58
-
59
- Fixed
60
- ^^^^^
61
-
62
- - Fix a ``TypeError`` in the download workflow (variable wrongly named).
63
-
64
- |
65
-
66
- 0.1.1
67
- -----
68
-
69
- |s| 2022-02-12 |e|
70
-
71
- **Mainly documentation improvements**
72
-
73
- Changed
74
- ^^^^^^^
75
-
76
- - Make documentation publicly available under
77
- `kodaho.github.io/manen <https://kodaho.github.io/manen/>`_.
78
- - Complete README page.
79
- - Add the section `About the project` in the documentation (moved from home page).
80
- - Complete user guides.
81
- - Rewording and reformatting of several sections.
82
-
83
- |
84
-
85
- 0.1.0
86
- -----
87
-
88
- |s| 2022-01-31 |e|
89
-
90
- **First release of the package**
91
-
92
- Added
93
- ^^^^^
94
-
95
- - :py:func:`~manen.finder.find` allows to easily get element(s) in a WebDriver
96
- page. This function support several very different use cases, thanks to several
97
- arguments that can be passed to the function.
98
- - :py:mod:`~manen.resource` is a module to easily interact with all the assets
99
- needed by Selenium. It allows for example to download the drivers, executable
100
- required to launch a WebDriver.
101
- - :py:mod:`~manen.browser` defined :py:class:`~manen.browser.ChromeBrowser`
102
- and :py:class:`~manen.browser.BraveBrowser`, an enhanced Selenium WebDriver.
103
- - :py:mod:`~manen.page_object_model` is the implementation of `page object
104
- model <https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/>`_
105
- described in Selenium documentation. Thanks to that, you can describe and
106
- interact with the DOM structure through Python classes.
107
- - a :py:mod:`~manen.cli` is shipped with the initial release in order to download
108
- drivers files.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes