pyUSPTO 0.4.1__tar.gz → 0.4.2__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.
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/workflows/publish-docs.yaml +1 -1
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/workflows/publish-to-test-pypi.yml +3 -3
- {pyuspto-0.4.1 → pyuspto-0.4.2}/PKG-INFO +1 -1
- {pyuspto-0.4.1 → pyuspto-0.4.2}/requirements-dev.txt +2 -2
- {pyuspto-0.4.1 → pyuspto-0.4.2}/requirements.txt +1 -1
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/patent_data.py +32 -10
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/petition_decisions.py +35 -7
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO.egg-info/PKG-INFO +1 -1
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_patent_data_clients.py +7 -7
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_petition_decision_clients.py +6 -6
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/ISSUE_TEMPLATE/documentation-updates.yml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/dependabot.yml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.github/workflows/python-tests.yml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.gitignore +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/.readthedocs.yaml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/ADVANCED.md +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/CHANGELOG.md +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/CODE_OF_CONDUCT.md +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/CONTRIBUTING.md +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/LICENSE +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/README.md +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/_version.pyi +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/Makefile +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/_static/.gitkeep +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/advanced.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/bulk_data.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/index.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/patent_data.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/petition_decisions.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/ptab_appeals.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/ptab_interferences.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/clients/ptab_trials.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/config/config.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/config/http_config.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/config/index.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/exceptions.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/index.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/base.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/bulk_data.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/index.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/patent_data.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/petition_decisions.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/ptab.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/models/utils.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/api/warnings.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/conf.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/configuration.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/development.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/bulk_data.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/ifw_example.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/index.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/patent_data.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/petition_decisions.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/ptab_appeals.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/ptab_interferences.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/examples/ptab_trials.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/index.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/installation.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/docs/source/quickstart.rst +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/bulk_data_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/error_handling_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/ifw_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/patent_data_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/petition_decisions_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/ptab_appeals_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/ptab_interferences_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/examples/ptab_trials_example.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/pyUSPTO.code-workspace +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/pyproject.toml +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/setup.cfg +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/base.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/bulk_data.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/ptab_appeals.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/ptab_interferences.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/clients/ptab_trials.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/config.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/exceptions.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/http_config.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/base.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/bulk_data.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/patent_data.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/petition_decisions.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/ptab.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/models/utils.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/py.typed +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/utils/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO/warnings.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO.egg-info/SOURCES.txt +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO.egg-info/dependency_links.txt +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO.egg-info/requires.txt +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO.egg-info/top_level.txt +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/src/pyUSPTO.egg-info/zip-safe +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_base.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_bulk_data_clients.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_ptab_appeals_client.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_ptab_interferences_client.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/clients/test_ptab_trials_client.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/conftest.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/conftest.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/test_bulk_data_integration.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/test_patent_data_integration.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/test_petition_decisions_integration.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/test_ptab_appeals_integration.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/test_ptab_interferences_integration.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/integration/test_ptab_trials_integration.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/models/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/models/test_bulk_data_models.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/models/test_patent_data_models.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/models/test_petition_decision_models.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/models/test_ptab_models.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/models/test_utils.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/test_config.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/test_edge_cases.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/test_exceptions.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/test_http_config.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/test_init.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/test_version.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tests/utils/__init__.py +0 -0
- {pyuspto-0.4.1 → pyuspto-0.4.2}/tox.ini +0 -0
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
- name: Build a binary wheel and a source tarball
|
|
33
33
|
run: python3 -m build
|
|
34
34
|
- name: Store the distribution packages
|
|
35
|
-
uses: actions/upload-artifact@
|
|
35
|
+
uses: actions/upload-artifact@v7
|
|
36
36
|
with:
|
|
37
37
|
name: python-package-distributions
|
|
38
38
|
path: dist/
|
|
@@ -53,7 +53,7 @@ jobs:
|
|
|
53
53
|
|
|
54
54
|
steps:
|
|
55
55
|
- name: Download all the dists
|
|
56
|
-
uses: actions/download-artifact@
|
|
56
|
+
uses: actions/download-artifact@v8
|
|
57
57
|
with:
|
|
58
58
|
name: python-package-distributions
|
|
59
59
|
path: dist/
|
|
@@ -76,7 +76,7 @@ jobs:
|
|
|
76
76
|
|
|
77
77
|
steps:
|
|
78
78
|
- name: Download all the dists
|
|
79
|
-
uses: actions/download-artifact@
|
|
79
|
+
uses: actions/download-artifact@v8
|
|
80
80
|
with:
|
|
81
81
|
name: python-package-distributions
|
|
82
82
|
path: dist/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyUSPTO
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: A Modern Python client for accessing the United States Patent and Trademark Office (USPTO) Open Data Portal (ODP) APIs.
|
|
5
5
|
Author-email: Andrew Piechocki <apiechocki@dunlapcodding.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -12,7 +12,7 @@ appdirs==1.4.4
|
|
|
12
12
|
# via sphinx-immaterial
|
|
13
13
|
babel==2.18.0
|
|
14
14
|
# via sphinx
|
|
15
|
-
certifi==2026.
|
|
15
|
+
certifi==2026.2.25
|
|
16
16
|
# via requests
|
|
17
17
|
charset-normalizer==3.4.4
|
|
18
18
|
# via requests
|
|
@@ -95,7 +95,7 @@ requests==2.32.5
|
|
|
95
95
|
# pyUSPTO (pyproject.toml)
|
|
96
96
|
# sphinx
|
|
97
97
|
# sphinx-immaterial
|
|
98
|
-
ruff==0.15.
|
|
98
|
+
ruff==0.15.4
|
|
99
99
|
# via pyUSPTO (pyproject.toml)
|
|
100
100
|
snowballstemmer==3.0.1
|
|
101
101
|
# via sphinx
|
|
@@ -275,17 +275,28 @@ class PatentDataClient(BaseUSPTOClient[PatentDataResponse]):
|
|
|
275
275
|
f"applicationMetaData.patentNumber:{patent_number_q}"
|
|
276
276
|
)
|
|
277
277
|
if inventor_name_q:
|
|
278
|
+
v = (
|
|
279
|
+
f'"{inventor_name_q}"'
|
|
280
|
+
if " " in inventor_name_q
|
|
281
|
+
else inventor_name_q
|
|
282
|
+
)
|
|
278
283
|
q_parts.append(
|
|
279
|
-
f"applicationMetaData.inventorBag.inventorNameText:{
|
|
284
|
+
f"applicationMetaData.inventorBag.inventorNameText:{v}"
|
|
280
285
|
)
|
|
281
286
|
if applicant_name_q:
|
|
282
|
-
|
|
283
|
-
f"
|
|
287
|
+
v = (
|
|
288
|
+
f'"{applicant_name_q}"'
|
|
289
|
+
if " " in applicant_name_q
|
|
290
|
+
else applicant_name_q
|
|
284
291
|
)
|
|
292
|
+
q_parts.append(f"applicationMetaData.firstApplicantName:{v}")
|
|
285
293
|
if assignee_name_q:
|
|
286
|
-
|
|
287
|
-
f"
|
|
294
|
+
v = (
|
|
295
|
+
f'"{assignee_name_q}"'
|
|
296
|
+
if " " in assignee_name_q
|
|
297
|
+
else assignee_name_q
|
|
288
298
|
)
|
|
299
|
+
q_parts.append(f"assignmentBag.assigneeBag.assigneeNameText:{v}")
|
|
289
300
|
if classification_q:
|
|
290
301
|
q_parts.append(
|
|
291
302
|
f"applicationMetaData.cpcClassificationBag:{classification_q}"
|
|
@@ -405,17 +416,28 @@ class PatentDataClient(BaseUSPTOClient[PatentDataResponse]):
|
|
|
405
416
|
f"applicationMetaData.patentNumber:{patent_number_q}"
|
|
406
417
|
)
|
|
407
418
|
if inventor_name_q:
|
|
419
|
+
v = (
|
|
420
|
+
f'"{inventor_name_q}"'
|
|
421
|
+
if " " in inventor_name_q
|
|
422
|
+
else inventor_name_q
|
|
423
|
+
)
|
|
408
424
|
q_parts.append(
|
|
409
|
-
f"applicationMetaData.inventorBag.inventorNameText:{
|
|
425
|
+
f"applicationMetaData.inventorBag.inventorNameText:{v}"
|
|
410
426
|
)
|
|
411
427
|
if applicant_name_q:
|
|
412
|
-
|
|
413
|
-
f"
|
|
428
|
+
v = (
|
|
429
|
+
f'"{applicant_name_q}"'
|
|
430
|
+
if " " in applicant_name_q
|
|
431
|
+
else applicant_name_q
|
|
414
432
|
)
|
|
433
|
+
q_parts.append(f"applicationMetaData.firstApplicantName:{v}")
|
|
415
434
|
if assignee_name_q:
|
|
416
|
-
|
|
417
|
-
f"
|
|
435
|
+
v = (
|
|
436
|
+
f'"{assignee_name_q}"'
|
|
437
|
+
if " " in assignee_name_q
|
|
438
|
+
else assignee_name_q
|
|
418
439
|
)
|
|
440
|
+
q_parts.append(f"assignmentBag.assigneeBag.assigneeNameText:{v}")
|
|
419
441
|
if classification_q:
|
|
420
442
|
q_parts.append(
|
|
421
443
|
f"applicationMetaData.cpcClassificationBag:{classification_q}"
|
|
@@ -204,19 +204,37 @@ class FinalPetitionDecisionsClient(BaseUSPTOClient[PetitionDecisionResponse]):
|
|
|
204
204
|
if patent_number_q:
|
|
205
205
|
q_parts.append(f"patentNumber:{patent_number_q}")
|
|
206
206
|
if inventor_name_q:
|
|
207
|
-
|
|
207
|
+
v = (
|
|
208
|
+
f'"{inventor_name_q}"'
|
|
209
|
+
if " " in inventor_name_q
|
|
210
|
+
else inventor_name_q
|
|
211
|
+
)
|
|
212
|
+
q_parts.append(f"inventorBag:{v}")
|
|
208
213
|
if applicant_name_q:
|
|
209
|
-
|
|
214
|
+
v = (
|
|
215
|
+
f'"{applicant_name_q}"'
|
|
216
|
+
if " " in applicant_name_q
|
|
217
|
+
else applicant_name_q
|
|
218
|
+
)
|
|
219
|
+
q_parts.append(f"firstApplicantName:{v}")
|
|
210
220
|
if invention_title_q:
|
|
211
|
-
|
|
221
|
+
v = (
|
|
222
|
+
f'"{invention_title_q}"'
|
|
223
|
+
if " " in invention_title_q
|
|
224
|
+
else invention_title_q
|
|
225
|
+
)
|
|
226
|
+
q_parts.append(f"inventionTitle:{v}")
|
|
212
227
|
if decision_type_code_q:
|
|
213
228
|
q_parts.append(f"decisionTypeCode:{decision_type_code_q}")
|
|
214
229
|
if technology_center_q:
|
|
215
230
|
q_parts.append(f"technologyCenter:{technology_center_q}")
|
|
216
231
|
if final_deciding_office_name_q:
|
|
217
|
-
|
|
218
|
-
f"
|
|
232
|
+
v = (
|
|
233
|
+
f'"{final_deciding_office_name_q}"'
|
|
234
|
+
if " " in final_deciding_office_name_q
|
|
235
|
+
else final_deciding_office_name_q
|
|
219
236
|
)
|
|
237
|
+
q_parts.append(f"finalDecidingOfficeName:{v}")
|
|
220
238
|
|
|
221
239
|
# Handle decision date range
|
|
222
240
|
if decision_date_from_q and decision_date_to_q:
|
|
@@ -414,9 +432,19 @@ class FinalPetitionDecisionsClient(BaseUSPTOClient[PetitionDecisionResponse]):
|
|
|
414
432
|
if patent_number_q:
|
|
415
433
|
q_parts.append(f"patentNumber:{patent_number_q}")
|
|
416
434
|
if inventor_name_q:
|
|
417
|
-
|
|
435
|
+
v = (
|
|
436
|
+
f'"{inventor_name_q}"'
|
|
437
|
+
if " " in inventor_name_q
|
|
438
|
+
else inventor_name_q
|
|
439
|
+
)
|
|
440
|
+
q_parts.append(f"inventorBag:{v}")
|
|
418
441
|
if applicant_name_q:
|
|
419
|
-
|
|
442
|
+
v = (
|
|
443
|
+
f'"{applicant_name_q}"'
|
|
444
|
+
if " " in applicant_name_q
|
|
445
|
+
else applicant_name_q
|
|
446
|
+
)
|
|
447
|
+
q_parts.append(f"firstApplicantName:{v}")
|
|
420
448
|
|
|
421
449
|
# Handle decision date range
|
|
422
450
|
if decision_date_from_q and decision_date_to_q:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyUSPTO
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: A Modern Python client for accessing the United States Patent and Trademark Office (USPTO) Open Data Portal (ODP) APIs.
|
|
5
5
|
Author-email: Andrew Piechocki <apiechocki@dunlapcodding.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -370,15 +370,15 @@ class TestPatentApplicationSearch:
|
|
|
370
370
|
({"patent_number_q": "PN123"}, "applicationMetaData.patentNumber:PN123"),
|
|
371
371
|
(
|
|
372
372
|
{"inventor_name_q": "Doe J"},
|
|
373
|
-
|
|
373
|
+
'applicationMetaData.inventorBag.inventorNameText:"Doe J"',
|
|
374
374
|
),
|
|
375
375
|
(
|
|
376
376
|
{"applicant_name_q": "Corp Inc"},
|
|
377
|
-
|
|
377
|
+
'applicationMetaData.firstApplicantName:"Corp Inc"',
|
|
378
378
|
),
|
|
379
379
|
(
|
|
380
380
|
{"assignee_name_q": "Assignee Ltd"},
|
|
381
|
-
|
|
381
|
+
'assignmentBag.assigneeBag.assigneeNameText:"Assignee Ltd"',
|
|
382
382
|
),
|
|
383
383
|
(
|
|
384
384
|
{"classification_q": "H04L"},
|
|
@@ -471,7 +471,7 @@ class TestPatentApplicationSearch:
|
|
|
471
471
|
)
|
|
472
472
|
|
|
473
473
|
expected_q = (
|
|
474
|
-
|
|
474
|
+
'applicationMetaData.inventorBag.inventorNameText:"John Smith" AND '
|
|
475
475
|
"applicationMetaData.cpcClassificationBag:G06F AND "
|
|
476
476
|
"applicationMetaData.filingDate:[2020-01-01 TO 2022-01-01]"
|
|
477
477
|
)
|
|
@@ -1957,15 +1957,15 @@ class TestPatentApplicationDataRetrieval:
|
|
|
1957
1957
|
({"patent_number_q": "PN123"}, "applicationMetaData.patentNumber:PN123"),
|
|
1958
1958
|
(
|
|
1959
1959
|
{"inventor_name_q": "Doe J"},
|
|
1960
|
-
|
|
1960
|
+
'applicationMetaData.inventorBag.inventorNameText:"Doe J"',
|
|
1961
1961
|
),
|
|
1962
1962
|
(
|
|
1963
1963
|
{"applicant_name_q": "Corp Inc"},
|
|
1964
|
-
|
|
1964
|
+
'applicationMetaData.firstApplicantName:"Corp Inc"',
|
|
1965
1965
|
),
|
|
1966
1966
|
(
|
|
1967
1967
|
{"assignee_name_q": "Assignee Ltd"},
|
|
1968
|
-
|
|
1968
|
+
'assignmentBag.assigneeBag.assigneeNameText:"Assignee Ltd"',
|
|
1969
1969
|
),
|
|
1970
1970
|
(
|
|
1971
1971
|
{"classification_q": "H04L"},
|
|
@@ -230,7 +230,7 @@ class TestFinalPetitionDecisionsClientSearch:
|
|
|
230
230
|
params = call_args[1]["params"]
|
|
231
231
|
assert "q" in params
|
|
232
232
|
query = params["q"]
|
|
233
|
-
assert
|
|
233
|
+
assert 'firstApplicantName:"Test Corp"' in query
|
|
234
234
|
assert "technologyCenter:1700" in query
|
|
235
235
|
assert "decisionTypeCode:C" in query
|
|
236
236
|
assert " AND " in query
|
|
@@ -284,7 +284,7 @@ class TestFinalPetitionDecisionsClientSearch:
|
|
|
284
284
|
|
|
285
285
|
call_args = mock_make_request.call_args
|
|
286
286
|
params = call_args[1]["params"]
|
|
287
|
-
assert
|
|
287
|
+
assert 'inventorBag:"John Doe"' in params["q"]
|
|
288
288
|
|
|
289
289
|
def test_search_with_invention_title(
|
|
290
290
|
self,
|
|
@@ -299,7 +299,7 @@ class TestFinalPetitionDecisionsClientSearch:
|
|
|
299
299
|
|
|
300
300
|
call_args = mock_make_request.call_args
|
|
301
301
|
params = call_args[1]["params"]
|
|
302
|
-
assert
|
|
302
|
+
assert 'inventionTitle:"Test Invention"' in params["q"]
|
|
303
303
|
|
|
304
304
|
def test_search_with_final_deciding_office_name(
|
|
305
305
|
self,
|
|
@@ -314,7 +314,7 @@ class TestFinalPetitionDecisionsClientSearch:
|
|
|
314
314
|
|
|
315
315
|
call_args = mock_make_request.call_args
|
|
316
316
|
params = call_args[1]["params"]
|
|
317
|
-
assert
|
|
317
|
+
assert 'finalDecidingOfficeName:"TC Director"' in params["q"]
|
|
318
318
|
|
|
319
319
|
def test_search_with_decision_date_from_only(
|
|
320
320
|
self,
|
|
@@ -516,7 +516,7 @@ class TestFinalPetitionDecisionsClientDownload:
|
|
|
516
516
|
call_args = mock_make_request.call_args
|
|
517
517
|
params = call_args[1]["params"]
|
|
518
518
|
assert params["format"] == "json"
|
|
519
|
-
assert
|
|
519
|
+
assert 'firstApplicantName:"Test Corp"' in params.get("q", "")
|
|
520
520
|
|
|
521
521
|
def test_download_csv(
|
|
522
522
|
self,
|
|
@@ -613,7 +613,7 @@ class TestFinalPetitionDecisionsClientDownload:
|
|
|
613
613
|
|
|
614
614
|
call_args = mock_make_request.call_args
|
|
615
615
|
params = call_args[1]["params"]
|
|
616
|
-
assert
|
|
616
|
+
assert 'inventorBag:"Jane Doe"' in params["q"]
|
|
617
617
|
|
|
618
618
|
def test_download_with_decision_date_from_only(
|
|
619
619
|
self,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|