pyUSPTO 0.5.3__tar.gz → 0.5.5__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.5.5/.devcontainer/devcontainer-lock.json +19 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.devcontainer/devcontainer.json +4 -1
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/workflows/codeql.yml +1 -1
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/workflows/publish-docs.yaml +2 -2
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/workflows/publish-to-test-pypi.yml +2 -2
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/workflows/python-tests.yml +5 -5
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.gitignore +1 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/CHANGELOG.md +59 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/PKG-INFO +2 -2
- {pyuspto-0.5.3 → pyuspto-0.5.5}/README.md +1 -1
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/patent_data_example.py +28 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/requirements-dev.txt +14 -14
- {pyuspto-0.5.3 → pyuspto-0.5.5}/requirements.txt +5 -5
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/__init__.py +2 -1
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/patent_data.py +231 -13
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/config.py +79 -50
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/patent_data.py +5 -1
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO.egg-info/PKG-INFO +2 -2
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO.egg-info/SOURCES.txt +2 -0
- pyuspto-0.5.5/src/pyUSPTO.egg-info/scm_file_list.json +165 -0
- pyuspto-0.5.5/src/pyUSPTO.egg-info/scm_version.json +8 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_base.py +9 -27
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_oa_citations_clients.py +5 -14
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_oa_rejections_clients.py +4 -4
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_patent_data_clients.py +254 -8
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_petition_decision_clients.py +1 -3
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_oa_actions_integration.py +4 -12
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_oa_citations_integration.py +4 -12
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_oa_rejections_integration.py +3 -9
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_patent_data_integration.py +66 -6
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_petition_decisions_integration.py +9 -9
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_ptab_appeals_integration.py +6 -6
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_ptab_interferences_integration.py +13 -13
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_ptab_trials_integration.py +12 -12
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_bulk_data_models.py +12 -4
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_enriched_citation_models.py +3 -9
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_oa_actions_models.py +15 -3
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_oa_citations_models.py +8 -20
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_oa_rejections_models.py +2 -6
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/test_edge_cases.py +1 -1
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/test_init.py +3 -3
- pyuspto-0.5.3/.devcontainer/devcontainer-lock.json +0 -14
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/ISSUE_TEMPLATE/documentation-updates.yml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.github/dependabot.yml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/.readthedocs.yaml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/ADVANCED.md +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/CODE_OF_CONDUCT.md +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/CONTRIBUTING.md +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/LICENSE +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/_version.pyi +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/Makefile +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/_static/.gitkeep +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/about.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/advanced.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/bulk_data.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/enriched_citations.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/index.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/oa_actions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/oa_citations.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/oa_rejections.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/patent_data.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/petition_decisions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/ptab_appeals.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/ptab_interferences.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/clients/ptab_trials.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/config/config.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/config/http_config.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/config/index.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/exceptions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/index.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/base.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/bulk_data.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/enriched_citations.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/index.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/oa_actions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/oa_citations.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/oa_rejections.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/patent_data.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/petition_decisions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/ptab.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/models/utils.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/api/warnings.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/conf.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/configuration.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/development.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/bulk_data.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/enriched_citations.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/ifw_example.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/index.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/oa_actions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/oa_citations.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/oa_rejections.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/patent_data.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/petition_decisions.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/ptab_appeals.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/ptab_interferences.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/examples/ptab_trials.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/index.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/installation.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/docs/source/quickstart.rst +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/bulk_data_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/enriched_citations_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/error_handling_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/ifw_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/oa_actions_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/oa_citations_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/oa_rejections_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/petition_decisions_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/ptab_appeals_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/ptab_interferences_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/examples/ptab_trials_example.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/pyUSPTO.code-workspace +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/pyproject.toml +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/setup.cfg +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/base.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/bulk_data.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/enriched_citations.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/oa_actions.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/oa_citations.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/oa_rejections.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/petition_decisions.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/ptab_appeals.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/ptab_interferences.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/clients/ptab_trials.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/exceptions.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/http_config.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/base.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/bulk_data.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/enriched_citations.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/oa_actions.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/oa_citations.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/oa_rejections.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/petition_decisions.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/ptab.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/models/utils.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/py.typed +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/utils/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO/warnings.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO.egg-info/dependency_links.txt +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO.egg-info/requires.txt +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO.egg-info/top_level.txt +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/src/pyUSPTO.egg-info/zip-safe +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_bulk_data_clients.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_enriched_citation_clients.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_oa_actions_clients.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_ptab_appeals_client.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_ptab_interferences_client.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/clients/test_ptab_trials_client.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/conftest.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/conftest.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_bulk_data_integration.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/integration/test_enriched_citations_integration.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_patent_data_models.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_petition_decision_models.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_ptab_models.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/models/test_utils.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/test_config.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/test_exceptions.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/test_http_config.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/test_version.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tests/utils/__init__.py +0 -0
- {pyuspto-0.5.3 → pyuspto-0.5.5}/tox.ini +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"features": {
|
|
3
|
+
"ghcr.io/devcontainers/features/git:1": {
|
|
4
|
+
"version": "1.3.5",
|
|
5
|
+
"resolved": "ghcr.io/devcontainers/features/git@sha256:27905dc196c01f77d6ba8709cb82eeaf330b3b108772e2f02d1cd0d826de1251",
|
|
6
|
+
"integrity": "sha256:27905dc196c01f77d6ba8709cb82eeaf330b3b108772e2f02d1cd0d826de1251"
|
|
7
|
+
},
|
|
8
|
+
"ghcr.io/devcontainers/features/node:2": {
|
|
9
|
+
"version": "2.1.0",
|
|
10
|
+
"resolved": "ghcr.io/devcontainers/features/node@sha256:586c9a6f7dd40bd3ba2cd41e7f2f88dcc31fbe5d1442afcbf07ffbc66b686857",
|
|
11
|
+
"integrity": "sha256:586c9a6f7dd40bd3ba2cd41e7f2f88dcc31fbe5d1442afcbf07ffbc66b686857"
|
|
12
|
+
},
|
|
13
|
+
"ghcr.io/devcontainers/features/powershell:2.0.2": {
|
|
14
|
+
"version": "2.0.2",
|
|
15
|
+
"resolved": "ghcr.io/devcontainers/features/powershell@sha256:82ea3880c5706ac3963f1b5e940a7f5871835393a5472f80008148b995d58d61",
|
|
16
|
+
"integrity": "sha256:82ea3880c5706ac3963f1b5e940a7f5871835393a5472f80008148b995d58d61"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
"build": { "dockerfile": "Dockerfile" },
|
|
4
4
|
"features": {
|
|
5
5
|
"ghcr.io/devcontainers/features/git:1": {},
|
|
6
|
-
"ghcr.io/devcontainers/features/node:2": {}
|
|
6
|
+
"ghcr.io/devcontainers/features/node:2": {},
|
|
7
|
+
"ghcr.io/devcontainers/features/powershell:2.0.2": {
|
|
8
|
+
"version": "latest"
|
|
9
|
+
}
|
|
7
10
|
},
|
|
8
11
|
"mounts": [
|
|
9
12
|
"source=pyuspto-claude-home,target=/home/vscode/.claude,type=volume"
|
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
|
56
56
|
steps:
|
|
57
57
|
- name: Checkout repository
|
|
58
|
-
uses: actions/checkout@
|
|
58
|
+
uses: actions/checkout@v7
|
|
59
59
|
|
|
60
60
|
# Add any setup steps before running the `github/codeql-action/init` action.
|
|
61
61
|
# This includes steps like installing compilers or runtimes (`actions/setup-node`
|
|
@@ -15,9 +15,9 @@ jobs:
|
|
|
15
15
|
name: Build documentation
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
18
|
+
- uses: actions/checkout@v7
|
|
19
19
|
- name: Set up Python
|
|
20
|
-
uses: actions/setup-python@
|
|
20
|
+
uses: actions/setup-python@v7
|
|
21
21
|
with:
|
|
22
22
|
python-version: "3.14"
|
|
23
23
|
- name: Install dependencies
|
|
@@ -16,11 +16,11 @@ jobs:
|
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
|
|
18
18
|
steps:
|
|
19
|
-
- uses: actions/checkout@
|
|
19
|
+
- uses: actions/checkout@v7
|
|
20
20
|
with:
|
|
21
21
|
persist-credentials: false
|
|
22
22
|
- name: Set up Python
|
|
23
|
-
uses: actions/setup-python@
|
|
23
|
+
uses: actions/setup-python@v7
|
|
24
24
|
with:
|
|
25
25
|
python-version: "3.x"
|
|
26
26
|
- name: Install pypa/build
|
|
@@ -14,10 +14,10 @@ jobs:
|
|
|
14
14
|
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v7
|
|
18
18
|
|
|
19
19
|
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
-
uses: actions/setup-python@
|
|
20
|
+
uses: actions/setup-python@v7
|
|
21
21
|
with:
|
|
22
22
|
python-version: ${{ matrix.python-version }}
|
|
23
23
|
|
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
pytest tests/ --cov=src/pyUSPTO
|
|
33
33
|
|
|
34
34
|
- name: Upload coverage report
|
|
35
|
-
uses: codecov/codecov-action@
|
|
35
|
+
uses: codecov/codecov-action@v7
|
|
36
36
|
with:
|
|
37
37
|
fail_ci_if_error: false
|
|
38
38
|
|
|
@@ -40,10 +40,10 @@ jobs:
|
|
|
40
40
|
runs-on: ubuntu-latest
|
|
41
41
|
|
|
42
42
|
steps:
|
|
43
|
-
- uses: actions/checkout@
|
|
43
|
+
- uses: actions/checkout@v7
|
|
44
44
|
|
|
45
45
|
- name: Set up Python
|
|
46
|
-
uses: actions/setup-python@
|
|
46
|
+
uses: actions/setup-python@v7
|
|
47
47
|
with:
|
|
48
48
|
python-version: "3.14"
|
|
49
49
|
|
|
@@ -5,6 +5,65 @@ All notable changes to the pyUSPTO package will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.5] - 2026-07-22
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `PatentDataClient.get_firm_portfolio(customer_numbers, ...)` — helper that searches a law firm's portfolio across one or more USPTO Customer Numbers. Builds a single Lucene `OR` query, applies a named field preset by default, and returns a `PatentDataResponse`. Pairs with `get_application_metadata` / `get_application_by_number` for per-application drill-down.
|
|
13
|
+
- `FIELD_PRESETS` constant (exported from `pyUSPTO`) — three named field sets for `get_firm_portfolio`'s `fields` argument: `"minimal"` (8 firm-internal identifiers), `"portfolio"` (16 fields for status + deadline derivation, default), and `"full_meta"` (uses the API's `applicationMetaData` shorthand for the entire 27-key metadata object, ~7.5× payload reduction vs. the un-fielded default).
|
|
14
|
+
- Multi-value `customer_number_q` and `status_code_q` on `search_applications` and `get_search_results` — accept a single value or a list; lists are OR-joined as `field:(a OR b)`.
|
|
15
|
+
- New `status_date_from_q` / `status_date_to_q` on `search_applications` and `get_search_results` — date-range filters against `applicationMetaData.applicationStatusDate`, mirroring the existing `filing_date` and `grant_date` range params. Useful for bounding the deadline-coming-due horizon.
|
|
16
|
+
|
|
17
|
+
## [0.5.4] - 2026-05-27
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- **Breaking**: `sanitize_application_number` now emits the standardized 15-character PCT format (`PCT` + 2-char country + 4-digit year + 6-digit zero-padded serial, e.g. `PCTUS2024012345`) per USPTO ODP Release 3.6 (2026-04-10). Previously emitted a non-standard 12-character form (e.g. `PCTUS2412345`). Affects every endpoint that takes a PCT application number, including `get_pct`, `get_application_by_number`, and `get_IFW_metadata(PCT_app_number=...)`. 2-digit year inputs are expanded via a sliding window (YY≥78 → 19YY, else 20YY). Legacy 12-character PCT strings are no longer accepted as input.
|
|
22
|
+
- `USPTOConfig` now applies user > env > default precedence uniformly across all fields. Previously only `api_key` fell back to its environment variable; base URLs and `HTTPConfig` ignored env in the constructor. Env reading is consolidated in an internal `_env_values()` helper shared by `__init__` and `from_env`.
|
|
23
|
+
|
|
24
|
+
### Deprecated
|
|
25
|
+
|
|
26
|
+
- `Address.country_or_state_code` — USPTO ODP Release 3.6 removed `countryOrStateCode` from the Patent Assignment API response; the location data now lives in `geographicRegionCode` (already exposed as `Address.geographic_region_code`). The attribute remains for backward compatibility and will be `None` for responses from updated endpoints.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- `USPTO_API_KEY=""` was stored as `""` instead of `None`, breaking `is None` checks. Empty-string constructor arguments are now treated as no-value and fall back to env.
|
|
31
|
+
|
|
32
|
+
## [0.5.3] - 2026-05-13
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- Maintenance release: dependency updates only (including urllib3 v2.7.0 security update); no library code changes.
|
|
37
|
+
|
|
38
|
+
## [0.5.2] - 2026-04-16
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `PatentDataClient.stream_document(document, format)` — returns a streaming `requests.Response` the caller consumes via `iter_content()` or `iter_lines()`. Accepts the same `format` argument (`DocumentMimeType` enum or MIME string) as `download_document` and raises the same `FormatNotAvailableError` on an unavailable format. The returned response is the caller's responsibility — use as a context manager or call `.close()` when finished.
|
|
43
|
+
- Streaming download example in `examples/patent_data_example.py`
|
|
44
|
+
- Bulk Data product identifier reference table in the documentation
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- `stream_document` and `download_document` now share format resolution through an internal `_resolve_document_format` helper, so both methods raise identical errors for missing formats or missing download URLs. No changes to existing `download_document` behavior.
|
|
49
|
+
|
|
50
|
+
## [0.5.1] - 2026-03-30
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- `OAActionsClient` — Office Action Text Retrieval API (v1): full-text office action documents including body text and structured section data (§101/102/103/112 rejections, citations, etc.)
|
|
55
|
+
- `OARejectionsClient` — Office Action Rejections API (v2): rejection-level records with rejection type indicators (`hasRej101/102/103/112/DP`), claim arrays, and examiner classification metadata
|
|
56
|
+
- `OACitationsClient` — Office Action Citations API: enriched citation records from office actions including cited document identifiers, legal section codes, and examiner-cited indicators
|
|
57
|
+
- Config and environment variable support for the three new base URLs (`USPTO_OA_ACTIONS_BASE_URL`, `USPTO_OA_REJECTIONS_BASE_URL`, `USPTO_OA_CITATIONS_BASE_URL`)
|
|
58
|
+
|
|
59
|
+
## [0.5.0] - 2026-03-27
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- `EnrichedCitationsClient` for the USPTO Enriched Cited Reference Metadata API (v3) — citation data extracted from patent office actions using AI/NLP, including citation category codes (X/Y/A/etc.), passage locations in the prior art, rejected claims, and examiner vs. applicant citation indicators
|
|
64
|
+
- Client methods: `search_citations()` (POST-based search with convenience parameters), `paginate_citations()` (auto-paginating iterator), and `get_fields()`
|
|
65
|
+
- Models: `EnrichedCitation` (21 fields), `EnrichedCitationResponse`, `EnrichedCitationFieldsResponse`
|
|
66
|
+
|
|
8
67
|
## [0.4.5] - 2026-03-11
|
|
9
68
|
|
|
10
69
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyUSPTO
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.5
|
|
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
|
|
@@ -201,7 +201,7 @@ if app.application_meta_data:
|
|
|
201
201
|
wrapper = client.get_IFW_metadata(application_number="18/045,436")
|
|
202
202
|
wrapper = client.get_IFW_metadata(patent_number="11,234,567")
|
|
203
203
|
wrapper = client.get_IFW_metadata(publication_number="2023/0012345")
|
|
204
|
-
wrapper = client.get_IFW_metadata(PCT_app_number="PCT/
|
|
204
|
+
wrapper = client.get_IFW_metadata(PCT_app_number="PCT/US2024/012345")
|
|
205
205
|
|
|
206
206
|
# Look up USPTO status codes
|
|
207
207
|
status_codes = client.get_status_codes()
|
|
@@ -134,7 +134,7 @@ if app.application_meta_data:
|
|
|
134
134
|
wrapper = client.get_IFW_metadata(application_number="18/045,436")
|
|
135
135
|
wrapper = client.get_IFW_metadata(patent_number="11,234,567")
|
|
136
136
|
wrapper = client.get_IFW_metadata(publication_number="2023/0012345")
|
|
137
|
-
wrapper = client.get_IFW_metadata(PCT_app_number="PCT/
|
|
137
|
+
wrapper = client.get_IFW_metadata(PCT_app_number="PCT/US2024/012345")
|
|
138
138
|
|
|
139
139
|
# Look up USPTO status codes
|
|
140
140
|
status_codes = client.get_status_codes()
|
|
@@ -315,3 +315,31 @@ print(
|
|
|
315
315
|
)
|
|
316
316
|
for code_obj in status_code_response.status_code_bag:
|
|
317
317
|
print(f" - Code: {code_obj.code}, Description: {code_obj.description}")
|
|
318
|
+
|
|
319
|
+
print("-" * 40)
|
|
320
|
+
print("Example 9: Firm portfolio across multiple Customer Numbers")
|
|
321
|
+
print("-" * 40)
|
|
322
|
+
|
|
323
|
+
# get_firm_portfolio builds one Lucene OR query across all provided Customer
|
|
324
|
+
# Numbers, applies the "portfolio" field preset by default, and returns a
|
|
325
|
+
# PatentDataResponse. Combine with status_date_from to bound the deadline
|
|
326
|
+
# horizon ("show me cases whose status changed since X").
|
|
327
|
+
from collections import Counter
|
|
328
|
+
|
|
329
|
+
portfolio_response = client.get_firm_portfolio(
|
|
330
|
+
customer_numbers=[30589, 174793],
|
|
331
|
+
status_date_from="2025-01-01",
|
|
332
|
+
sort="applicationMetaData.applicationStatusDate desc",
|
|
333
|
+
limit=25,
|
|
334
|
+
)
|
|
335
|
+
print(f"Total matching applications across both Customer Numbers: {portfolio_response.count}")
|
|
336
|
+
|
|
337
|
+
status_counter: Counter[str] = Counter()
|
|
338
|
+
for wrapper in portfolio_response.patent_file_wrapper_data_bag:
|
|
339
|
+
meta = wrapper.application_meta_data
|
|
340
|
+
if meta and meta.application_status_code is not None:
|
|
341
|
+
status_counter[str(meta.application_status_code)] += 1
|
|
342
|
+
|
|
343
|
+
print("Status-code tally for the page:")
|
|
344
|
+
for code, n in status_counter.most_common():
|
|
345
|
+
print(f" {code}: {n}")
|
|
@@ -8,22 +8,22 @@ alabaster==1.0.0
|
|
|
8
8
|
# via sphinx
|
|
9
9
|
babel==2.18.0
|
|
10
10
|
# via sphinx
|
|
11
|
-
certifi==2026.
|
|
11
|
+
certifi==2026.6.17
|
|
12
12
|
# via requests
|
|
13
|
-
charset-normalizer==3.4.
|
|
13
|
+
charset-normalizer==3.4.9
|
|
14
14
|
# via requests
|
|
15
15
|
colorama==0.4.6
|
|
16
16
|
# via
|
|
17
17
|
# pytest
|
|
18
18
|
# sphinx
|
|
19
|
-
coverage==7.
|
|
19
|
+
coverage==7.15.2
|
|
20
20
|
# via pytest-cov
|
|
21
21
|
docutils==0.22.4
|
|
22
22
|
# via
|
|
23
23
|
# myst-parser
|
|
24
24
|
# sphinx
|
|
25
25
|
# sphinx-rtd-theme
|
|
26
|
-
idna==3.
|
|
26
|
+
idna==3.18
|
|
27
27
|
# via requests
|
|
28
28
|
imagesize==2.0.0
|
|
29
29
|
# via sphinx
|
|
@@ -33,7 +33,7 @@ jinja2==3.1.6
|
|
|
33
33
|
# via
|
|
34
34
|
# myst-parser
|
|
35
35
|
# sphinx
|
|
36
|
-
librt==0.
|
|
36
|
+
librt==0.13.0
|
|
37
37
|
# via mypy
|
|
38
38
|
markdown-it-py==4.2.0
|
|
39
39
|
# via
|
|
@@ -45,7 +45,7 @@ mdit-py-plugins==0.6.1
|
|
|
45
45
|
# via myst-parser
|
|
46
46
|
mdurl==0.1.2
|
|
47
47
|
# via markdown-it-py
|
|
48
|
-
mypy==2.
|
|
48
|
+
mypy==2.3.0
|
|
49
49
|
# via pyuspto
|
|
50
50
|
mypy-extensions==1.1.0
|
|
51
51
|
# via mypy
|
|
@@ -65,7 +65,7 @@ pygments==2.20.0
|
|
|
65
65
|
# via
|
|
66
66
|
# pytest
|
|
67
67
|
# sphinx
|
|
68
|
-
pytest==9.
|
|
68
|
+
pytest==9.1.1
|
|
69
69
|
# via
|
|
70
70
|
# pytest-cov
|
|
71
71
|
# pytest-mock
|
|
@@ -76,16 +76,16 @@ pytest-mock==3.15.1
|
|
|
76
76
|
# via pyuspto
|
|
77
77
|
pyyaml==6.0.3
|
|
78
78
|
# via myst-parser
|
|
79
|
-
requests==2.34.
|
|
79
|
+
requests==2.34.2
|
|
80
80
|
# via
|
|
81
81
|
# pyUSPTO (pyproject.toml)
|
|
82
82
|
# pyuspto
|
|
83
83
|
# sphinx
|
|
84
84
|
roman-numerals==4.1.0
|
|
85
85
|
# via sphinx
|
|
86
|
-
ruff==0.15.
|
|
86
|
+
ruff==0.15.22
|
|
87
87
|
# via pyuspto
|
|
88
|
-
snowballstemmer==3.
|
|
88
|
+
snowballstemmer==3.1.1
|
|
89
89
|
# via sphinx
|
|
90
90
|
sphinx==9.1.0
|
|
91
91
|
# via
|
|
@@ -95,7 +95,7 @@ sphinx==9.1.0
|
|
|
95
95
|
# sphinx-copybutton
|
|
96
96
|
# sphinx-rtd-theme
|
|
97
97
|
# sphinxcontrib-jquery
|
|
98
|
-
sphinx-autodoc-typehints==3.
|
|
98
|
+
sphinx-autodoc-typehints==3.13.0
|
|
99
99
|
# via pyuspto
|
|
100
100
|
sphinx-copybutton==0.5.2
|
|
101
101
|
# via pyuspto
|
|
@@ -115,13 +115,13 @@ sphinxcontrib-qthelp==2.0.0
|
|
|
115
115
|
# via sphinx
|
|
116
116
|
sphinxcontrib-serializinghtml==2.0.0
|
|
117
117
|
# via sphinx
|
|
118
|
-
types-requests==2.33.0.
|
|
118
|
+
types-requests==2.33.0.20260712
|
|
119
119
|
# via pyuspto
|
|
120
|
-
typing-extensions==4.
|
|
120
|
+
typing-extensions==4.16.0
|
|
121
121
|
# via
|
|
122
122
|
# mypy
|
|
123
123
|
# pyuspto
|
|
124
|
-
tzdata==2026.
|
|
124
|
+
tzdata==2026.3
|
|
125
125
|
# via
|
|
126
126
|
# pyUSPTO (pyproject.toml)
|
|
127
127
|
# pyuspto
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
#
|
|
5
5
|
# pip-compile --output-file=requirements.txt --strip-extras pyproject.toml
|
|
6
6
|
#
|
|
7
|
-
certifi==2026.
|
|
7
|
+
certifi==2026.6.17
|
|
8
8
|
# via requests
|
|
9
|
-
charset-normalizer==3.4.
|
|
9
|
+
charset-normalizer==3.4.9
|
|
10
10
|
# via requests
|
|
11
|
-
idna==3.
|
|
11
|
+
idna==3.18
|
|
12
12
|
# via requests
|
|
13
|
-
requests==2.34.
|
|
13
|
+
requests==2.34.2
|
|
14
14
|
# via pyUSPTO (pyproject.toml)
|
|
15
|
-
tzdata==2026.
|
|
15
|
+
tzdata==2026.3
|
|
16
16
|
# via pyUSPTO (pyproject.toml)
|
|
17
17
|
urllib3==2.7.0
|
|
18
18
|
# via
|
|
@@ -16,7 +16,7 @@ from pyUSPTO.clients.enriched_citations import EnrichedCitationsClient
|
|
|
16
16
|
from pyUSPTO.clients.oa_actions import OAActionsClient
|
|
17
17
|
from pyUSPTO.clients.oa_citations import OACitationsClient
|
|
18
18
|
from pyUSPTO.clients.oa_rejections import OARejectionsClient
|
|
19
|
-
from pyUSPTO.clients.patent_data import PatentDataClient
|
|
19
|
+
from pyUSPTO.clients.patent_data import FIELD_PRESETS, PatentDataClient
|
|
20
20
|
from pyUSPTO.clients.petition_decisions import FinalPetitionDecisionsClient
|
|
21
21
|
from pyUSPTO.clients.ptab_appeals import PTABAppealsClient
|
|
22
22
|
from pyUSPTO.clients.ptab_interferences import PTABInterferencesClient
|
|
@@ -138,6 +138,7 @@ __all__ = [
|
|
|
138
138
|
"FileData",
|
|
139
139
|
# Patent Data API
|
|
140
140
|
"PatentDataClient",
|
|
141
|
+
"FIELD_PRESETS",
|
|
141
142
|
"ApplicationContinuityData",
|
|
142
143
|
"PatentDataResponse",
|
|
143
144
|
"PatentFileWrapper",
|