python-epo-ops-client 4.1.0__tar.gz → 4.2.1__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 (44) hide show
  1. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/CHANGELOG.md +10 -0
  2. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/Makefile +12 -14
  3. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/PKG-INFO +60 -21
  4. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/README.md +35 -10
  5. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/authors.md +5 -0
  6. python_epo_ops_client-4.2.1/docs/release.md +19 -0
  7. python_epo_ops_client-4.2.1/epo_ops/api.py +471 -0
  8. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/dogpile/dogpile.py +3 -1
  9. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/storages/sqlite.py +19 -5
  10. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/models.py +11 -13
  11. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/utils.py +3 -1
  12. python_epo_ops_client-4.2.1/pyproject.toml +111 -0
  13. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/PKG-INFO +60 -21
  14. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/SOURCES.txt +1 -1
  15. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/requires.txt +8 -9
  16. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/setup.cfg +0 -3
  17. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/setup.py +26 -44
  18. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_api.py +3 -0
  19. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_ops_quota.py +3 -1
  20. python-epo-ops-client-4.1.0/epo_ops/api.py +0 -245
  21. python-epo-ops-client-4.1.0/pyproject.toml +0 -95
  22. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/LICENSE +0 -0
  23. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/MANIFEST.in +0 -0
  24. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/backlog.md +0 -0
  25. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/contributing.md +0 -0
  26. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/sandbox.md +0 -0
  27. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/__init__.py +0 -0
  28. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/__version__.py +0 -0
  29. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/exceptions.py +0 -0
  30. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/__init__.py +0 -0
  31. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/__init__.py +0 -0
  32. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/dogpile/__init__.py +0 -0
  33. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/dogpile/helpers.py +0 -0
  34. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/middleware.py +0 -0
  35. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/__init__.py +0 -0
  36. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/storages/__init__.py +0 -0
  37. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/storages/storage.py +0 -0
  38. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/throttler.py +0 -0
  39. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/utils.py +0 -0
  40. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/dependency_links.txt +0 -0
  41. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/not-zip-safe +0 -0
  42. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/top_level.txt +0 -0
  43. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_models.py +0 -0
  44. {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_utils.py +0 -0
@@ -1,5 +1,15 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.2.1 (2025-09-09)
4
+
5
+ - Made network timeout configurable. Thanks, @ofipify.
6
+
7
+ ## 4.2.0 (2025-07-26)
8
+
9
+ - Added support for the "legal" service endpoint, providing legal status
10
+ information for patents as documented in chapter 3.5 of the OPS v3.2
11
+ documentation. Thanks, @MartiONE.
12
+
3
13
  ## 4.1.0 (2024-01-25)
4
14
 
5
15
  - Configure HTTP client to use a network timeout of 10 seconds
@@ -33,38 +33,36 @@ check: lint test ## Run linter and software tests
33
33
  check-ci: lint test-ci ## Run linter and software tests on CI
34
34
 
35
35
  lint: ## lint the project
36
- ruff .
37
- black --check .
36
+ ruff check .
37
+ ruff format --check .
38
38
 
39
39
  format: ## Run code formatting
40
+ ruff format .
40
41
  # Configure Ruff not to auto-fix (remove!):
41
42
  # Ignore unused imports (F401), unused variables (F841), `print` statements (T201), and commented-out code (ERA001).
42
- ruff --fix --ignore=ERA --ignore=F401 --ignore=F841 --ignore=T20 --ignore=ERA001 .
43
- black .
43
+ ruff check --fix --ignore=ERA --ignore=F401 --ignore=F841 --ignore=T20 --ignore=ERA001 .
44
44
 
45
45
  test: clean ## Run tests with virtualenv Python
46
- py.test -s -v --lf --cov epo_ops tests --cov-report term-missing --cov-report xml
46
+ pytest --lf
47
47
 
48
48
  test-ci: clean ## Run tests in CI environment with virtualenv Python
49
- py.test -v --cov epo_ops tests --cov-report term-missing --cov-report xml
49
+ pytest
50
50
 
51
- coverage: clean ## Check code coverage locally
52
- py.test -s -v --cov epo_ops tests --cov-report term-missing --cov-report xml --cov-report html
51
+ coverage: clean test-ci ## Check code coverage locally
52
+ coverage html
53
53
  open htmlcov/index.html
54
54
 
55
55
  release: clean # Package and upload a release to PyPI
56
- python setup.py sdist
57
- python setup.py bdist_wheel
56
+ python -m build
58
57
  twine check dist/*
59
58
  twine upload --repository pypi dist/*
60
- open https://pypi.python.org/pypi/python-epo-ops-client
59
+ open https://pypi.org/project/python-epo-ops-client/
61
60
 
62
61
  release-test: clean # Package and upload a release to testpypi
63
- python setup.py sdist
64
- python setup.py bdist_wheel
62
+ python -m build
65
63
  twine check dist/*
66
64
  twine upload --repository testpypi dist/*
67
- open https://testpypi.python.org/pypi/python-epo-ops-client
65
+ open https://test.pypi.org/project/python-epo-ops-client/
68
66
 
69
67
  sdist: clean
70
68
  python setup.py sdist
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: python-epo-ops-client
3
- Version: 4.1.0
3
+ Version: 4.2.1
4
4
  Summary: Python client for EPO OPS, the European Patent Office's Open Patent Services API.
5
5
  Home-page: https://github.com/ip-tools/python-epo-ops-client
6
6
  Download-URL: https://pypi.org/project/python-epo-ops-client/#files
@@ -21,26 +21,40 @@ Classifier: Programming Language :: Python :: 3.9
21
21
  Classifier: Programming Language :: Python :: 3.10
22
22
  Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
24
25
  Classifier: Topic :: Software Development :: Libraries
25
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
27
  Description-Content-Type: text/markdown
27
28
  License-File: LICENSE
28
- Requires-Dist: dogpile.cache<1.2
29
+ Requires-Dist: dogpile.cache<1.5
29
30
  Requires-Dist: importlib-metadata; python_version < "3.8"
30
- Requires-Dist: python-dateutil<2.9
31
+ Requires-Dist: python-dateutil<2.10
31
32
  Requires-Dist: requests<3,>=2.27
32
33
  Requires-Dist: six<2
33
34
  Provides-Extra: develop
34
- Requires-Dist: black<24; extra == "develop"
35
- Requires-Dist: ruff==0.0.285; python_version >= "3.7" and extra == "develop"
36
- Requires-Dist: twine<5; extra == "develop"
35
+ Requires-Dist: ruff<0.13; python_version >= "3.7" and extra == "develop"
36
+ Requires-Dist: twine<7; extra == "develop"
37
37
  Requires-Dist: wheel<1; extra == "develop"
38
38
  Provides-Extra: test
39
- Requires-Dist: pytest<8; extra == "test"
39
+ Requires-Dist: pytest<9; extra == "test"
40
40
  Requires-Dist: pytest-cache<2; extra == "test"
41
- Requires-Dist: pytest-cov<4.2; extra == "test"
42
- Requires-Dist: python-dotenv<0.20; extra == "test"
43
- Requires-Dist: responses<0.24; extra == "test"
41
+ Requires-Dist: pytest-cov<7.1; extra == "test"
42
+ Requires-Dist: python-dotenv<1.2; extra == "test"
43
+ Requires-Dist: responses<0.26; extra == "test"
44
+ Dynamic: author
45
+ Dynamic: author-email
46
+ Dynamic: classifier
47
+ Dynamic: description
48
+ Dynamic: description-content-type
49
+ Dynamic: download-url
50
+ Dynamic: home-page
51
+ Dynamic: keywords
52
+ Dynamic: license-file
53
+ Dynamic: maintainer
54
+ Dynamic: maintainer-email
55
+ Dynamic: provides-extra
56
+ Dynamic: requires-dist
57
+ Dynamic: summary
44
58
 
45
59
  # python-epo-ops-client
46
60
 
@@ -51,17 +65,42 @@ Requires-Dist: responses<0.24; extra == "test"
51
65
 
52
66
  python-epo-ops-client is an [Apache2 licensed][apache license] client library
53
67
  for accessing the [European Patent Office][epo]'s ("EPO") [Open Patent
54
- Services][ops] ("OPS") v.3.2 (based on [v 1.3.16 of the reference guide][ops guide]).
68
+ Services][ops] ("OPS") v3.2 (based on [v1.3.16 of the reference guide][ops guide]).
55
69
 
56
70
  ```python
57
71
  import epo_ops
58
72
 
59
- client = epo_ops.Client(key='abc', secret='xyz') # Instantiate client
60
- response = client.published_data( # Retrieve bibliography data
61
- reference_type = 'publication', # publication, application, priority
62
- input = epo_ops.models.Docdb('1000000', 'EP', 'A1'), # original, docdb, epodoc
63
- endpoint = 'biblio', # optional, defaults to biblio in case of published_data
64
- constituents = [] # optional, list of constituents
73
+ # Instantiate client.
74
+ client = epo_ops.Client(key="abc", secret="xyz")
75
+
76
+ # Retrieve bibliography data.
77
+ response = client.published_data(
78
+
79
+ # publication, application, priority
80
+ reference_type="publication",
81
+
82
+ # docdb, epodoc
83
+ input=epo_ops.models.Docdb("1000000", "EP", "A1"),
84
+
85
+ # optional, defaults to biblio in case of published_data
86
+ endpoint="biblio",
87
+
88
+ # optional, list of constituents
89
+ constituents=[],
90
+ )
91
+
92
+ # Retrieve description.
93
+ response = client.published_data(
94
+ reference_type="publication",
95
+ input=epo_ops.models.Docdb("1000000", "EP", "A1"),
96
+ endpoint="description",
97
+ )
98
+
99
+ # Retrieve claims.
100
+ response = client.published_data(
101
+ reference_type="publication",
102
+ input=epo_ops.models.Docdb("1000000", "EP", "A1"),
103
+ endpoint="claims",
65
104
  )
66
105
  ```
67
106
 
@@ -108,12 +147,12 @@ Currently the Client knows how to issue request for the following services:
108
147
  | ----------------------------------------------------------------------------- | --------------------- | --------- |
109
148
  | `family(reference_type, input, endpoint=None, constituents=None)` | family | inpadoc |
110
149
  | `image(path, range=1, extension='tiff')` | published-data/images | images |
150
+ | `legal(reference_type, input)` | legal | other |
111
151
  | `number(reference_type, input, output_format)` | number-service | other |
112
152
  | `published_data(reference_type, input, endpoint='biblio', constituents=None)` | published-data | retrieval |
113
153
  | `published_data_search(cql, range_begin=1, range_end=25, constituents=None)` | published-data/search | search |
114
154
  | `register(reference_type, input, constituents=['biblio'])` | register | other |
115
155
  | `register_search(cql, range_begin=1, range_end=25)` | register/search | other |
116
- | `register_search(cql, range_begin=1, range_end=25)` | register/search | other |
117
156
 
118
157
  Bulk operations can be achieved by passing a list of valid models to the
119
158
  published_data input field.
@@ -206,8 +245,8 @@ details.
206
245
 
207
246
  [apache license]: http://www.apache.org/licenses/LICENSE-2.0
208
247
  [developer's area]: https://developers.epo.org/ops-v3-2/apis
209
- [dogpile.cache region]: http://dogpilecache.readthedocs.org/en/latest/api.html#module-dogpile.cache.region
210
- [dogpile.cache]: https://bitbucket.org/zzzeek/dogpile.cache
248
+ [dogpile.cache region]: https://dogpilecache.sqlalchemy.org/en/latest/api.html#module-dogpile.cache.region
249
+ [dogpile.cache]: https://github.com/sqlalchemy/dogpile.cache
211
250
  [epo]: http://epo.org
212
251
  [ops guide]: https://link.epo.org/web/ops_v3.2_documentation_-_version_1.3.19_en.pdf
213
252
  [ops]: https://www.epo.org/searching-for-patents/data/web-services/ops.html
@@ -7,17 +7,42 @@
7
7
 
8
8
  python-epo-ops-client is an [Apache2 licensed][apache license] client library
9
9
  for accessing the [European Patent Office][epo]'s ("EPO") [Open Patent
10
- Services][ops] ("OPS") v.3.2 (based on [v 1.3.16 of the reference guide][ops guide]).
10
+ Services][ops] ("OPS") v3.2 (based on [v1.3.16 of the reference guide][ops guide]).
11
11
 
12
12
  ```python
13
13
  import epo_ops
14
14
 
15
- client = epo_ops.Client(key='abc', secret='xyz') # Instantiate client
16
- response = client.published_data( # Retrieve bibliography data
17
- reference_type = 'publication', # publication, application, priority
18
- input = epo_ops.models.Docdb('1000000', 'EP', 'A1'), # original, docdb, epodoc
19
- endpoint = 'biblio', # optional, defaults to biblio in case of published_data
20
- constituents = [] # optional, list of constituents
15
+ # Instantiate client.
16
+ client = epo_ops.Client(key="abc", secret="xyz")
17
+
18
+ # Retrieve bibliography data.
19
+ response = client.published_data(
20
+
21
+ # publication, application, priority
22
+ reference_type="publication",
23
+
24
+ # docdb, epodoc
25
+ input=epo_ops.models.Docdb("1000000", "EP", "A1"),
26
+
27
+ # optional, defaults to biblio in case of published_data
28
+ endpoint="biblio",
29
+
30
+ # optional, list of constituents
31
+ constituents=[],
32
+ )
33
+
34
+ # Retrieve description.
35
+ response = client.published_data(
36
+ reference_type="publication",
37
+ input=epo_ops.models.Docdb("1000000", "EP", "A1"),
38
+ endpoint="description",
39
+ )
40
+
41
+ # Retrieve claims.
42
+ response = client.published_data(
43
+ reference_type="publication",
44
+ input=epo_ops.models.Docdb("1000000", "EP", "A1"),
45
+ endpoint="claims",
21
46
  )
22
47
  ```
23
48
 
@@ -64,12 +89,12 @@ Currently the Client knows how to issue request for the following services:
64
89
  | ----------------------------------------------------------------------------- | --------------------- | --------- |
65
90
  | `family(reference_type, input, endpoint=None, constituents=None)` | family | inpadoc |
66
91
  | `image(path, range=1, extension='tiff')` | published-data/images | images |
92
+ | `legal(reference_type, input)` | legal | other |
67
93
  | `number(reference_type, input, output_format)` | number-service | other |
68
94
  | `published_data(reference_type, input, endpoint='biblio', constituents=None)` | published-data | retrieval |
69
95
  | `published_data_search(cql, range_begin=1, range_end=25, constituents=None)` | published-data/search | search |
70
96
  | `register(reference_type, input, constituents=['biblio'])` | register | other |
71
97
  | `register_search(cql, range_begin=1, range_end=25)` | register/search | other |
72
- | `register_search(cql, range_begin=1, range_end=25)` | register/search | other |
73
98
 
74
99
  Bulk operations can be achieved by passing a list of valid models to the
75
100
  published_data input field.
@@ -162,8 +187,8 @@ details.
162
187
 
163
188
  [apache license]: http://www.apache.org/licenses/LICENSE-2.0
164
189
  [developer's area]: https://developers.epo.org/ops-v3-2/apis
165
- [dogpile.cache region]: http://dogpilecache.readthedocs.org/en/latest/api.html#module-dogpile.cache.region
166
- [dogpile.cache]: https://bitbucket.org/zzzeek/dogpile.cache
190
+ [dogpile.cache region]: https://dogpilecache.sqlalchemy.org/en/latest/api.html#module-dogpile.cache.region
191
+ [dogpile.cache]: https://github.com/sqlalchemy/dogpile.cache
167
192
  [epo]: http://epo.org
168
193
  [ops guide]: https://link.epo.org/web/ops_v3.2_documentation_-_version_1.3.19_en.pdf
169
194
  [ops]: https://www.epo.org/searching-for-patents/data/web-services/ops.html
@@ -13,12 +13,17 @@ thank you so much. The list is alphabetically sorted.
13
13
 
14
14
  ## Contributors
15
15
 
16
+ - [Alejandro Marti](https://github.com/MartiONE)
16
17
  - [Alexander Meinhardt Scheurer](https://github.com/BeneCollyridam)
17
18
  - [Daniel Blasco](https://github.com/dablak)
19
+ - [Dan Bolser](https://github.com/CholoTook)
18
20
  - [fe60](https://github.com/fe60)
19
21
  - [Felipe Eltermann](https://github.com/eltermann)
20
22
  - [Geoffrey Cline](https://github.com/geoffcline)
21
23
  - [Hiro Kobashi](https://github.com/kobaski)
24
+ - [Matt Keanny](https://github.com/mattkeanny)
22
25
  - [Mike Matheson](https://github.com/mmath)
26
+ - [Oliver Fuerst](https://github.com/ofipify)
23
27
  - [Roberto Faga](https://github.com/rfaga)
28
+ - [Sebastian Vilstrup](https://github.com/ipr-sv)
24
29
  - [Sotiris Fragkiskos](https://github.com/sfranky)
@@ -0,0 +1,19 @@
1
+ # Release
2
+
3
+ Building Python packages and publishing to PyPI is automated
4
+ using the GHA workflow `release-pypi.yml`.
5
+
6
+ To release the package, exercise those steps:
7
+
8
+ - Edit `CHANGELOG.md`, designating a new version. Commit the file
9
+ using a commit message like `Release 4.1.1`.
10
+
11
+ - Create a tag using the new version, including a `v` prefix, e.g.
12
+ ```shell
13
+ git tag v4.1.1
14
+ ```
15
+
16
+ - Push to remote.
17
+ ```shell
18
+ git push && git push --tags
19
+ ```