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.
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/CHANGELOG.md +10 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/Makefile +12 -14
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/PKG-INFO +60 -21
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/README.md +35 -10
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/authors.md +5 -0
- python_epo_ops_client-4.2.1/docs/release.md +19 -0
- python_epo_ops_client-4.2.1/epo_ops/api.py +471 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/dogpile/dogpile.py +3 -1
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/storages/sqlite.py +19 -5
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/models.py +11 -13
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/utils.py +3 -1
- python_epo_ops_client-4.2.1/pyproject.toml +111 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/PKG-INFO +60 -21
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/SOURCES.txt +1 -1
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/python_epo_ops_client.egg-info/requires.txt +8 -9
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/setup.cfg +0 -3
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/setup.py +26 -44
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_api.py +3 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_ops_quota.py +3 -1
- python-epo-ops-client-4.1.0/epo_ops/api.py +0 -245
- python-epo-ops-client-4.1.0/pyproject.toml +0 -95
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/LICENSE +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/MANIFEST.in +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/backlog.md +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/contributing.md +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/docs/sandbox.md +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/__init__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/__version__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/exceptions.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/__init__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/__init__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/dogpile/__init__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/cache/dogpile/helpers.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/middleware.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/__init__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/storages/__init__.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/storages/storage.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/throttler.py +0 -0
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/epo_ops/middlewares/throttle/utils.py +0 -0
- {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
- {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
- {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
- {python-epo-ops-client-4.1.0 → python_epo_ops_client-4.2.1}/tests/test_models.py +0 -0
- {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
|
-
|
|
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
|
-
|
|
46
|
+
pytest --lf
|
|
47
47
|
|
|
48
48
|
test-ci: clean ## Run tests in CI environment with virtualenv Python
|
|
49
|
-
|
|
49
|
+
pytest
|
|
50
50
|
|
|
51
|
-
coverage: clean ## Check code coverage locally
|
|
52
|
-
|
|
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
|
|
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.
|
|
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
|
|
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://
|
|
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
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: python-epo-ops-client
|
|
3
|
-
Version: 4.1
|
|
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.
|
|
29
|
+
Requires-Dist: dogpile.cache<1.5
|
|
29
30
|
Requires-Dist: importlib-metadata; python_version < "3.8"
|
|
30
|
-
Requires-Dist: python-dateutil<2.
|
|
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:
|
|
35
|
-
Requires-Dist:
|
|
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<
|
|
39
|
+
Requires-Dist: pytest<9; extra == "test"
|
|
40
40
|
Requires-Dist: pytest-cache<2; extra == "test"
|
|
41
|
-
Requires-Dist: pytest-cov<
|
|
42
|
-
Requires-Dist: python-dotenv<
|
|
43
|
-
Requires-Dist: responses<0.
|
|
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")
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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]:
|
|
210
|
-
[dogpile.cache]: https://
|
|
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")
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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]:
|
|
166
|
-
[dogpile.cache]: https://
|
|
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
|
+
```
|