pyUSPTO 0.4.5__tar.gz → 0.5.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 (173) hide show
  1. pyuspto-0.5.1/.github/workflows/codeql.yml +99 -0
  2. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/workflows/python-tests.yml +1 -1
  3. {pyuspto-0.4.5 → pyuspto-0.5.1}/.readthedocs.yaml +1 -1
  4. {pyuspto-0.4.5 → pyuspto-0.5.1}/CHANGELOG.md +113 -1
  5. {pyuspto-0.4.5 → pyuspto-0.5.1}/PKG-INFO +83 -2
  6. {pyuspto-0.4.5 → pyuspto-0.5.1}/README.md +82 -1
  7. pyuspto-0.5.1/docs/source/api/clients/enriched_citations.rst +7 -0
  8. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/index.rst +4 -0
  9. pyuspto-0.5.1/docs/source/api/clients/oa_actions.rst +7 -0
  10. pyuspto-0.5.1/docs/source/api/clients/oa_citations.rst +7 -0
  11. pyuspto-0.5.1/docs/source/api/clients/oa_rejections.rst +7 -0
  12. pyuspto-0.5.1/docs/source/api/models/enriched_citations.rst +7 -0
  13. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/index.rst +4 -0
  14. pyuspto-0.5.1/docs/source/api/models/oa_actions.rst +7 -0
  15. pyuspto-0.5.1/docs/source/api/models/oa_citations.rst +7 -0
  16. pyuspto-0.5.1/docs/source/api/models/oa_rejections.rst +7 -0
  17. pyuspto-0.5.1/docs/source/examples/enriched_citations.rst +6 -0
  18. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/index.rst +4 -0
  19. pyuspto-0.5.1/docs/source/examples/oa_actions.rst +6 -0
  20. pyuspto-0.5.1/docs/source/examples/oa_citations.rst +6 -0
  21. pyuspto-0.5.1/docs/source/examples/oa_rejections.rst +6 -0
  22. pyuspto-0.5.1/examples/bulk_data_example.py +133 -0
  23. pyuspto-0.5.1/examples/enriched_citations_example.py +132 -0
  24. {pyuspto-0.4.5 → pyuspto-0.5.1}/examples/error_handling_example.py +31 -25
  25. pyuspto-0.5.1/examples/ifw_example.py +121 -0
  26. pyuspto-0.5.1/examples/oa_actions_example.py +117 -0
  27. pyuspto-0.5.1/examples/oa_citations_example.py +106 -0
  28. pyuspto-0.5.1/examples/oa_rejections_example.py +63 -0
  29. pyuspto-0.5.1/examples/patent_data_example.py +310 -0
  30. pyuspto-0.5.1/examples/petition_decisions_example.py +237 -0
  31. pyuspto-0.5.1/examples/ptab_appeals_example.py +179 -0
  32. pyuspto-0.5.1/examples/ptab_interferences_example.py +217 -0
  33. pyuspto-0.5.1/examples/ptab_trials_example.py +141 -0
  34. {pyuspto-0.4.5 → pyuspto-0.5.1}/requirements-dev.txt +10 -10
  35. {pyuspto-0.4.5 → pyuspto-0.5.1}/requirements.txt +2 -2
  36. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/__init__.py +62 -3
  37. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/__init__.py +8 -0
  38. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/base.py +171 -53
  39. pyuspto-0.5.1/src/pyUSPTO/clients/enriched_citations.py +254 -0
  40. pyuspto-0.5.1/src/pyUSPTO/clients/oa_actions.py +238 -0
  41. pyuspto-0.5.1/src/pyUSPTO/clients/oa_citations.py +247 -0
  42. pyuspto-0.5.1/src/pyUSPTO/clients/oa_rejections.py +233 -0
  43. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/patent_data.py +1 -3
  44. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/petition_decisions.py +1 -5
  45. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/ptab_appeals.py +1 -3
  46. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/ptab_interferences.py +1 -3
  47. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/ptab_trials.py +1 -3
  48. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/config.py +34 -9
  49. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/__init__.py +40 -0
  50. pyuspto-0.5.1/src/pyUSPTO/models/enriched_citations.py +354 -0
  51. pyuspto-0.5.1/src/pyUSPTO/models/oa_actions.py +570 -0
  52. pyuspto-0.5.1/src/pyUSPTO/models/oa_citations.py +277 -0
  53. pyuspto-0.5.1/src/pyUSPTO/models/oa_rejections.py +369 -0
  54. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/patent_data.py +4 -10
  55. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/petition_decisions.py +0 -6
  56. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/ptab.py +0 -15
  57. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO.egg-info/PKG-INFO +83 -2
  58. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO.egg-info/SOURCES.txt +37 -0
  59. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_base.py +303 -40
  60. pyuspto-0.5.1/tests/clients/test_enriched_citation_clients.py +456 -0
  61. pyuspto-0.5.1/tests/clients/test_oa_actions_clients.py +448 -0
  62. pyuspto-0.5.1/tests/clients/test_oa_citations_clients.py +493 -0
  63. pyuspto-0.5.1/tests/clients/test_oa_rejections_clients.py +444 -0
  64. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_patent_data_clients.py +20 -40
  65. pyuspto-0.5.1/tests/integration/test_enriched_citations_integration.py +242 -0
  66. pyuspto-0.5.1/tests/integration/test_oa_actions_integration.py +237 -0
  67. pyuspto-0.5.1/tests/integration/test_oa_citations_integration.py +234 -0
  68. pyuspto-0.5.1/tests/integration/test_oa_rejections_integration.py +190 -0
  69. pyuspto-0.5.1/tests/models/test_enriched_citation_models.py +420 -0
  70. pyuspto-0.5.1/tests/models/test_oa_actions_models.py +480 -0
  71. pyuspto-0.5.1/tests/models/test_oa_citations_models.py +349 -0
  72. pyuspto-0.5.1/tests/models/test_oa_rejections_models.py +431 -0
  73. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/models/test_petition_decision_models.py +8 -10
  74. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/test_config.py +26 -0
  75. pyuspto-0.4.5/examples/bulk_data_example.py +0 -190
  76. pyuspto-0.4.5/examples/ifw_example.py +0 -120
  77. pyuspto-0.4.5/examples/patent_data_example.py +0 -337
  78. pyuspto-0.4.5/examples/petition_decisions_example.py +0 -302
  79. pyuspto-0.4.5/examples/ptab_appeals_example.py +0 -261
  80. pyuspto-0.4.5/examples/ptab_interferences_example.py +0 -289
  81. pyuspto-0.4.5/examples/ptab_trials_example.py +0 -197
  82. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  83. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  84. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/ISSUE_TEMPLATE/documentation-updates.yml +0 -0
  85. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  86. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  87. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/dependabot.yml +0 -0
  88. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/workflows/publish-docs.yaml +0 -0
  89. {pyuspto-0.4.5 → pyuspto-0.5.1}/.github/workflows/publish-to-test-pypi.yml +0 -0
  90. {pyuspto-0.4.5 → pyuspto-0.5.1}/.gitignore +0 -0
  91. {pyuspto-0.4.5 → pyuspto-0.5.1}/ADVANCED.md +0 -0
  92. {pyuspto-0.4.5 → pyuspto-0.5.1}/CODE_OF_CONDUCT.md +0 -0
  93. {pyuspto-0.4.5 → pyuspto-0.5.1}/CONTRIBUTING.md +0 -0
  94. {pyuspto-0.4.5 → pyuspto-0.5.1}/LICENSE +0 -0
  95. {pyuspto-0.4.5 → pyuspto-0.5.1}/_version.pyi +0 -0
  96. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/Makefile +0 -0
  97. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/_static/.gitkeep +0 -0
  98. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/advanced.rst +0 -0
  99. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/bulk_data.rst +0 -0
  100. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/patent_data.rst +0 -0
  101. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/petition_decisions.rst +0 -0
  102. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/ptab_appeals.rst +0 -0
  103. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/ptab_interferences.rst +0 -0
  104. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/clients/ptab_trials.rst +0 -0
  105. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/config/config.rst +0 -0
  106. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/config/http_config.rst +0 -0
  107. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/config/index.rst +0 -0
  108. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/exceptions.rst +0 -0
  109. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/index.rst +0 -0
  110. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/base.rst +0 -0
  111. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/bulk_data.rst +0 -0
  112. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/patent_data.rst +0 -0
  113. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/petition_decisions.rst +0 -0
  114. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/ptab.rst +0 -0
  115. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/models/utils.rst +0 -0
  116. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/api/warnings.rst +0 -0
  117. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/conf.py +0 -0
  118. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/configuration.rst +0 -0
  119. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/development.rst +0 -0
  120. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/bulk_data.rst +0 -0
  121. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/ifw_example.rst +0 -0
  122. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/patent_data.rst +0 -0
  123. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/petition_decisions.rst +0 -0
  124. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/ptab_appeals.rst +0 -0
  125. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/ptab_interferences.rst +0 -0
  126. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/examples/ptab_trials.rst +0 -0
  127. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/index.rst +0 -0
  128. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/installation.rst +0 -0
  129. {pyuspto-0.4.5 → pyuspto-0.5.1}/docs/source/quickstart.rst +0 -0
  130. {pyuspto-0.4.5 → pyuspto-0.5.1}/pyUSPTO.code-workspace +0 -0
  131. {pyuspto-0.4.5 → pyuspto-0.5.1}/pyproject.toml +0 -0
  132. {pyuspto-0.4.5 → pyuspto-0.5.1}/setup.cfg +0 -0
  133. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/clients/bulk_data.py +0 -0
  134. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/exceptions.py +0 -0
  135. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/http_config.py +0 -0
  136. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/base.py +0 -0
  137. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/bulk_data.py +0 -0
  138. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/models/utils.py +0 -0
  139. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/py.typed +0 -0
  140. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/utils/__init__.py +0 -0
  141. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO/warnings.py +0 -0
  142. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO.egg-info/dependency_links.txt +0 -0
  143. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO.egg-info/requires.txt +0 -0
  144. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO.egg-info/top_level.txt +0 -0
  145. {pyuspto-0.4.5 → pyuspto-0.5.1}/src/pyUSPTO.egg-info/zip-safe +0 -0
  146. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/__init__.py +0 -0
  147. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/__init__.py +0 -0
  148. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_bulk_data_clients.py +0 -0
  149. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_petition_decision_clients.py +0 -0
  150. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_ptab_appeals_client.py +0 -0
  151. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_ptab_interferences_client.py +0 -0
  152. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/clients/test_ptab_trials_client.py +0 -0
  153. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/conftest.py +0 -0
  154. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/__init__.py +0 -0
  155. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/conftest.py +0 -0
  156. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/test_bulk_data_integration.py +0 -0
  157. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/test_patent_data_integration.py +0 -0
  158. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/test_petition_decisions_integration.py +0 -0
  159. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/test_ptab_appeals_integration.py +0 -0
  160. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/test_ptab_interferences_integration.py +0 -0
  161. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/integration/test_ptab_trials_integration.py +0 -0
  162. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/models/__init__.py +0 -0
  163. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/models/test_bulk_data_models.py +0 -0
  164. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/models/test_patent_data_models.py +0 -0
  165. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/models/test_ptab_models.py +0 -0
  166. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/models/test_utils.py +0 -0
  167. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/test_edge_cases.py +0 -0
  168. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/test_exceptions.py +0 -0
  169. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/test_http_config.py +0 -0
  170. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/test_init.py +0 -0
  171. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/test_version.py +0 -0
  172. {pyuspto-0.4.5 → pyuspto-0.5.1}/tests/utils/__init__.py +0 -0
  173. {pyuspto-0.4.5 → pyuspto-0.5.1}/tox.ini +0 -0
@@ -0,0 +1,99 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL Advanced"
13
+
14
+ on:
15
+ push:
16
+ branches: [ "main" ]
17
+ pull_request:
18
+ branches: [ "main" ]
19
+ schedule:
20
+ - cron: '41 13 * * 2'
21
+
22
+ jobs:
23
+ analyze:
24
+ name: Analyze (${{ matrix.language }})
25
+ # Runner size impacts CodeQL analysis time. To learn more, please see:
26
+ # - https://gh.io/recommended-hardware-resources-for-running-codeql
27
+ # - https://gh.io/supported-runners-and-hardware-resources
28
+ # - https://gh.io/using-larger-runners (GitHub.com only)
29
+ # Consider using larger runners or machines with greater resources for possible analysis time improvements.
30
+ runs-on: ${{ 'ubuntu-latest' }}
31
+ permissions:
32
+ # required for all workflows
33
+ security-events: write
34
+
35
+ # required to fetch internal or private CodeQL packs
36
+ packages: read
37
+
38
+ # only required for workflows in private repositories
39
+ actions: read
40
+ contents: read
41
+
42
+ strategy:
43
+ fail-fast: false
44
+ matrix:
45
+ include:
46
+ - language: python
47
+ build-mode: none
48
+ # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
49
+ # Use `c-cpp` to analyze code written in C, C++ or both
50
+ # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
51
+ # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
52
+ # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
53
+ # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
54
+ # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
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
+ steps:
57
+ - name: Checkout repository
58
+ uses: actions/checkout@v6
59
+
60
+ # Add any setup steps before running the `github/codeql-action/init` action.
61
+ # This includes steps like installing compilers or runtimes (`actions/setup-node`
62
+ # or others). This is typically only required for manual builds.
63
+ # - name: Setup runtime (example)
64
+ # uses: actions/setup-example@v1
65
+
66
+ # Initializes the CodeQL tools for scanning.
67
+ - name: Initialize CodeQL
68
+ uses: github/codeql-action/init@v4
69
+ with:
70
+ languages: ${{ matrix.language }}
71
+ build-mode: ${{ matrix.build-mode }}
72
+ # If you wish to specify custom queries, you can do so here or in a config file.
73
+ # By default, queries listed here will override any specified in a config file.
74
+ # Prefix the list here with "+" to use these queries and those in the config file.
75
+
76
+ # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
77
+ queries: security-and-quality
78
+
79
+ # If the analyze step fails for one of the languages you are analyzing with
80
+ # "We were unable to automatically build your code", modify the matrix above
81
+ # to set the build mode to "manual" for that language. Then modify this step
82
+ # to build your code.
83
+ # ℹ️ Command-line programs to run using the OS shell.
84
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
85
+ - name: Run manual build steps
86
+ if: matrix.build-mode == 'manual'
87
+ shell: bash
88
+ run: |
89
+ echo 'If you are using a "manual" build mode for one or more of the' \
90
+ 'languages you are analyzing, replace this with the commands to build' \
91
+ 'your code, for example:'
92
+ echo ' make bootstrap'
93
+ echo ' make release'
94
+ exit 1
95
+
96
+ - name: Perform CodeQL Analysis
97
+ uses: github/codeql-action/analyze@v4
98
+ with:
99
+ category: "/language:${{matrix.language}}"
@@ -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@v5
35
+ uses: codecov/codecov-action@v6
36
36
  with:
37
37
  fail_ci_if_error: false
38
38
 
@@ -7,7 +7,7 @@ version: 2
7
7
  build:
8
8
  os: ubuntu-24.04
9
9
  tools:
10
- python: "3.10"
10
+ python: "3.14"
11
11
 
12
12
  # Build documentation in the "docs/" directory with Sphinx
13
13
  sphinx:
@@ -5,7 +5,119 @@ 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.3.0] - TBD
8
+ ## [0.4.5] - 2026-03-11
9
+
10
+ ### Changed
11
+
12
+ - **Refactor**: Split `_make_request` into three typed request methods:
13
+ - `_get_model` — returns parsed model `T`
14
+ - `_get_json` — returns `dict[str, Any]`
15
+ - `_stream_request` — returns `requests.Response`
16
+ - Removed all `assert isinstance` runtime checks and `# type: ignore` annotations at 28 call sites
17
+ - `DocumentBag`, `StatusCodeSearchResponse`, and `PetitionDecisionDownloadResponse` now conform to `FromDictProtocol` (`include_raw_data` parameter added to `from_dict`)
18
+
19
+ ### Fixed
20
+
21
+ - PTAB appeals integration test query (`Appeal` → `REGULAR` for `applicationTypeCategory`)
22
+ - Read the Docs build: updated Python from 3.10 to 3.14 to satisfy `myst-parser>=3.11` requirement
23
+
24
+ ## [0.4.4] - 2026-03-08
25
+
26
+ ### Added
27
+
28
+ - `get_patent(patent_number)` — lookup `PatentFileWrapper` by granted patent number
29
+ - `get_publication(publication_number)` — lookup by publication number
30
+ - `get_pct(pct_number)` — lookup by PCT application or publication number (auto-detected)
31
+
32
+ ### Fixed
33
+
34
+ - `sanitize_application_number` now strips leading zeros from PCT serial numbers
35
+
36
+ ## [0.4.3] - 2026-03-05
37
+
38
+ ### Added
39
+
40
+ - `get_IFW` method for bulk downloading all documents in an application's IFW
41
+ - `IFWResult` model with document map and optional ZIP output
42
+ - `get_IFW_metadata` now populates `document_bag` on the returned `PatentFileWrapper`
43
+ - Example: searching CPC codes (#102)
44
+
45
+ ### Fixed
46
+
47
+ - Auto-quote `classification_q` values containing spaces or slashes (#101)
48
+ - Missing `typing_extensions` dependency
49
+ - CI refactor to exclude dev requirements from install
50
+
51
+ ## [0.4.2] - 2026-02-26
52
+
53
+ ### Fixed
54
+
55
+ - Quote multi-word values in query convenience parameters
56
+
57
+ ## [0.4.1] - 2026-02-25
58
+
59
+ ### Added
60
+
61
+ - Download path validation and zip-bomb protection
62
+ - Sanitize download filenames to prevent path traversal
63
+ - Skip symlinks during archive extraction
64
+ - Session lifecycle and extraction safety documentation
65
+
66
+ ### Changed
67
+
68
+ - Enable retries for POST requests
69
+ - Remove unused `utils.http` module and `ALLOWED_METHODS`
70
+ - Enforce keyword-only arguments in `get_IFW_metadata`
71
+ - Optimize tox deps and enable parallel
72
+
73
+ ## [0.4.0] - 2026-02-23
74
+
75
+ ### Changed
76
+
77
+ - **Refactor**: Centralize session management in `USPTOConfig`
78
+ - `FileData.file_date` changed to `datetime` type
79
+
80
+ ### Fixed
81
+
82
+ - Prevent path traversal in archive extraction
83
+ - Fix #79
84
+
85
+ ## [0.3.4] - 2026-01-11
86
+
87
+ ### Added
88
+
89
+ - JSON parsing error handling
90
+ - Pagination validation
91
+ - Documentation for HTTP method restrictions and `include_raw_data` flag
92
+
93
+ ### Changed
94
+
95
+ - Aligned backoff factor default
96
+
97
+ ## [0.3.3] - 2026-01-08
98
+
99
+ ### Changed
100
+
101
+ - Bulk data client refactor (#40)
102
+
103
+ ## [0.3.2] - 2025-12-31
104
+
105
+ ### Changed
106
+
107
+ - Refactor downloads (#35)
108
+ - Configurable download chunk size
109
+ - Session sharing across clients
110
+
111
+ ## [0.3.1] - 2025-12-15
112
+
113
+ ### Added
114
+
115
+ - `paginate_decisions` POST support
116
+ - Configurable download chunk size
117
+ - Session sharing across clients
118
+ - Bulk data endpoint updates
119
+
120
+ ## [0.3.0] - 2025-12-09
9
121
 
10
122
  ### Added
11
123
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyUSPTO
3
- Version: 0.4.5
3
+ Version: 0.5.1
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
@@ -75,7 +75,7 @@ Dynamic: license-file
75
75
 
76
76
  A Python client library for interacting with the United Stated Patent and Trademark Office (USPTO) [Open Data Portal](https://data.uspto.gov/home) APIs.
77
77
 
78
- This package provides clients for interacting with the USPTO Bulk Data API, Patent Data API, Final Petition Decisions API, and PTAB (Patent Trial and Appeal Board) APIs.
78
+ This package provides clients for interacting with the USPTO Bulk Data API, Patent Data API, Final Petition Decisions API, PTAB (Patent Trial and Appeal Board) APIs, Enriched Citations API, Office Action Text Retrieval API, Office Action Rejections API, and Office Action Citations API.
79
79
 
80
80
  > [!IMPORTANT]
81
81
  > The USPTO is in the process of moving their Developer API. This package is only concerned with the new API. The [old API](https://developer.uspto.gov/) was officially retired at the end of 2025; however, some products have not yet been fully transitioned to the Open Data Portal API. The USPTO expects the remaining products to be transitioned to the Open Data Portal in early 2026.
@@ -123,6 +123,10 @@ Then use it in your Python code:
123
123
  ```python
124
124
  from pyUSPTO import (
125
125
  BulkDataClient,
126
+ EnrichedCitationsClient,
127
+ OAActionsClient,
128
+ OACitationsClient,
129
+ OARejectionsClient,
126
130
  PatentDataClient,
127
131
  FinalPetitionDecisionsClient,
128
132
  PTABTrialsClient,
@@ -140,6 +144,10 @@ petition_client = FinalPetitionDecisionsClient(config=config)
140
144
  trials_client = PTABTrialsClient(config=config)
141
145
  appeals_client = PTABAppealsClient(config=config)
142
146
  interferences_client = PTABInterferencesClient(config=config)
147
+ citations_client = EnrichedCitationsClient(config=config)
148
+ oa_client = OAActionsClient(config=config)
149
+ oa_citations_client = OACitationsClient(config=config)
150
+ rejections_client = OARejectionsClient(config=config)
143
151
  ```
144
152
 
145
153
  ### Direct API Key
@@ -302,6 +310,79 @@ print(f"Found {response.count} interference decisions since 2023")
302
310
 
303
311
  See [`examples/ptab_interferences_example.py`](examples/ptab_interferences_example.py) for detailed examples including searching by party name and outcome.
304
312
 
313
+ ### Enriched Citations API
314
+
315
+ ```python
316
+ from pyUSPTO import EnrichedCitationsClient, USPTOConfig
317
+
318
+ config = USPTOConfig(api_key="your_api_key_here")
319
+ client = EnrichedCitationsClient(config=config)
320
+
321
+ # Search for enriched citations by technology center
322
+ response = client.search_citations(
323
+ tech_center_q="1700",
324
+ rows=5,
325
+ )
326
+ print(f"Found {response.count} citations from TC 1700")
327
+ ```
328
+
329
+ See [`examples/enriched_citations_example.py`](examples/enriched_citations_example.py) for detailed examples including searching by application number and citation category.
330
+
331
+ ### Office Action Text Retrieval API
332
+
333
+ ```python
334
+ from pyUSPTO import OAActionsClient, USPTOConfig
335
+
336
+ config = USPTOConfig(api_key="your_api_key_here")
337
+ client = OAActionsClient(config=config)
338
+
339
+ # Search for office actions by technology center
340
+ response = client.search(
341
+ tech_center_q="1700",
342
+ rows=5,
343
+ )
344
+ print(f"Found {response.count} office actions from TC 1700")
345
+ ```
346
+
347
+ See [`examples/oa_actions_example.py`](examples/oa_actions_example.py) for detailed examples including searching by document code and paginating results.
348
+
349
+ ### Office Action Rejections API
350
+
351
+ ```python
352
+ from pyUSPTO import OARejectionsClient, USPTOConfig
353
+
354
+ config = USPTOConfig(api_key="your_api_key_here")
355
+ client = OARejectionsClient(config=config)
356
+
357
+ # Search for rejections by application number
358
+ response = client.search(
359
+ patent_application_number_q="12190351",
360
+ rows=5,
361
+ )
362
+ print(f"Found {response.count} rejection records for application 12190351")
363
+ ```
364
+
365
+ See [`examples/oa_rejections_example.py`](examples/oa_rejections_example.py) for detailed examples including searching by document code and inspecting rejection flags.
366
+
367
+ ### Office Action Citations API
368
+
369
+ ```python
370
+ from pyUSPTO import OACitationsClient, USPTOConfig
371
+
372
+ config = USPTOConfig(api_key="your_api_key_here")
373
+ client = OACitationsClient(config=config)
374
+
375
+ # Search for citations by legal section code
376
+ response = client.search(
377
+ legal_section_code_q="103",
378
+ tech_center_q="2800",
379
+ rows=5,
380
+ )
381
+ print(f"Found {response.count} section 103 citations in tech center 2800")
382
+ ```
383
+
384
+ See [`examples/oa_citations_example.py`](examples/oa_citations_example.py) for detailed examples including searching by examiner-cited indicator and paginating results.
385
+
305
386
  ## Documentation
306
387
 
307
388
  Full documentation may be found on [Read the Docs](https://pyuspto.readthedocs.io/).
@@ -8,7 +8,7 @@
8
8
 
9
9
  A Python client library for interacting with the United Stated Patent and Trademark Office (USPTO) [Open Data Portal](https://data.uspto.gov/home) APIs.
10
10
 
11
- This package provides clients for interacting with the USPTO Bulk Data API, Patent Data API, Final Petition Decisions API, and PTAB (Patent Trial and Appeal Board) APIs.
11
+ This package provides clients for interacting with the USPTO Bulk Data API, Patent Data API, Final Petition Decisions API, PTAB (Patent Trial and Appeal Board) APIs, Enriched Citations API, Office Action Text Retrieval API, Office Action Rejections API, and Office Action Citations API.
12
12
 
13
13
  > [!IMPORTANT]
14
14
  > The USPTO is in the process of moving their Developer API. This package is only concerned with the new API. The [old API](https://developer.uspto.gov/) was officially retired at the end of 2025; however, some products have not yet been fully transitioned to the Open Data Portal API. The USPTO expects the remaining products to be transitioned to the Open Data Portal in early 2026.
@@ -56,6 +56,10 @@ Then use it in your Python code:
56
56
  ```python
57
57
  from pyUSPTO import (
58
58
  BulkDataClient,
59
+ EnrichedCitationsClient,
60
+ OAActionsClient,
61
+ OACitationsClient,
62
+ OARejectionsClient,
59
63
  PatentDataClient,
60
64
  FinalPetitionDecisionsClient,
61
65
  PTABTrialsClient,
@@ -73,6 +77,10 @@ petition_client = FinalPetitionDecisionsClient(config=config)
73
77
  trials_client = PTABTrialsClient(config=config)
74
78
  appeals_client = PTABAppealsClient(config=config)
75
79
  interferences_client = PTABInterferencesClient(config=config)
80
+ citations_client = EnrichedCitationsClient(config=config)
81
+ oa_client = OAActionsClient(config=config)
82
+ oa_citations_client = OACitationsClient(config=config)
83
+ rejections_client = OARejectionsClient(config=config)
76
84
  ```
77
85
 
78
86
  ### Direct API Key
@@ -235,6 +243,79 @@ print(f"Found {response.count} interference decisions since 2023")
235
243
 
236
244
  See [`examples/ptab_interferences_example.py`](examples/ptab_interferences_example.py) for detailed examples including searching by party name and outcome.
237
245
 
246
+ ### Enriched Citations API
247
+
248
+ ```python
249
+ from pyUSPTO import EnrichedCitationsClient, USPTOConfig
250
+
251
+ config = USPTOConfig(api_key="your_api_key_here")
252
+ client = EnrichedCitationsClient(config=config)
253
+
254
+ # Search for enriched citations by technology center
255
+ response = client.search_citations(
256
+ tech_center_q="1700",
257
+ rows=5,
258
+ )
259
+ print(f"Found {response.count} citations from TC 1700")
260
+ ```
261
+
262
+ See [`examples/enriched_citations_example.py`](examples/enriched_citations_example.py) for detailed examples including searching by application number and citation category.
263
+
264
+ ### Office Action Text Retrieval API
265
+
266
+ ```python
267
+ from pyUSPTO import OAActionsClient, USPTOConfig
268
+
269
+ config = USPTOConfig(api_key="your_api_key_here")
270
+ client = OAActionsClient(config=config)
271
+
272
+ # Search for office actions by technology center
273
+ response = client.search(
274
+ tech_center_q="1700",
275
+ rows=5,
276
+ )
277
+ print(f"Found {response.count} office actions from TC 1700")
278
+ ```
279
+
280
+ See [`examples/oa_actions_example.py`](examples/oa_actions_example.py) for detailed examples including searching by document code and paginating results.
281
+
282
+ ### Office Action Rejections API
283
+
284
+ ```python
285
+ from pyUSPTO import OARejectionsClient, USPTOConfig
286
+
287
+ config = USPTOConfig(api_key="your_api_key_here")
288
+ client = OARejectionsClient(config=config)
289
+
290
+ # Search for rejections by application number
291
+ response = client.search(
292
+ patent_application_number_q="12190351",
293
+ rows=5,
294
+ )
295
+ print(f"Found {response.count} rejection records for application 12190351")
296
+ ```
297
+
298
+ See [`examples/oa_rejections_example.py`](examples/oa_rejections_example.py) for detailed examples including searching by document code and inspecting rejection flags.
299
+
300
+ ### Office Action Citations API
301
+
302
+ ```python
303
+ from pyUSPTO import OACitationsClient, USPTOConfig
304
+
305
+ config = USPTOConfig(api_key="your_api_key_here")
306
+ client = OACitationsClient(config=config)
307
+
308
+ # Search for citations by legal section code
309
+ response = client.search(
310
+ legal_section_code_q="103",
311
+ tech_center_q="2800",
312
+ rows=5,
313
+ )
314
+ print(f"Found {response.count} section 103 citations in tech center 2800")
315
+ ```
316
+
317
+ See [`examples/oa_citations_example.py`](examples/oa_citations_example.py) for detailed examples including searching by examiner-cited indicator and paginating results.
318
+
238
319
  ## Documentation
239
320
 
240
321
  Full documentation may be found on [Read the Docs](https://pyuspto.readthedocs.io/).
@@ -0,0 +1,7 @@
1
+ Enriched Citations Client
2
+ =========================
3
+
4
+ .. automodule:: pyUSPTO.clients.enriched_citations
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -5,6 +5,10 @@ Clients
5
5
  :maxdepth: 2
6
6
 
7
7
  bulk_data
8
+ enriched_citations
9
+ oa_actions
10
+ oa_citations
11
+ oa_rejections
8
12
  patent_data
9
13
  petition_decisions
10
14
  ptab_appeals
@@ -0,0 +1,7 @@
1
+ OA Actions Client
2
+ =================
3
+
4
+ .. automodule:: pyUSPTO.clients.oa_actions
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ OA Citations Client
2
+ ===================
3
+
4
+ .. automodule:: pyUSPTO.clients.oa_citations
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Office Action Rejections Client
2
+ ===============================
3
+
4
+ .. automodule:: pyUSPTO.clients.oa_rejections
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Enriched Citations
2
+ ==================
3
+
4
+ .. automodule:: pyUSPTO.models.enriched_citations
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -6,6 +6,10 @@ Models
6
6
 
7
7
  base
8
8
  bulk_data
9
+ enriched_citations
10
+ oa_actions
11
+ oa_citations
12
+ oa_rejections
9
13
  patent_data
10
14
  petition_decisions
11
15
  ptab
@@ -0,0 +1,7 @@
1
+ OA Actions Models
2
+ =================
3
+
4
+ .. automodule:: pyUSPTO.models.oa_actions
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ OA Citations Models
2
+ ===================
3
+
4
+ .. automodule:: pyUSPTO.models.oa_citations
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Office Action Rejections Models
2
+ ================================
3
+
4
+ .. automodule:: pyUSPTO.models.oa_rejections
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,6 @@
1
+ Enriched Citations Example
2
+ ==========================
3
+
4
+ .. literalinclude:: ../../../examples/enriched_citations_example.py
5
+ :language: python
6
+ :linenos:
@@ -5,6 +5,10 @@ Examples
5
5
  :maxdepth: 2
6
6
 
7
7
  bulk_data
8
+ enriched_citations
9
+ oa_actions
10
+ oa_citations
11
+ oa_rejections
8
12
  patent_data
9
13
  ifw_example
10
14
  petition_decisions
@@ -0,0 +1,6 @@
1
+ OA Actions Example
2
+ ==================
3
+
4
+ .. literalinclude:: ../../../examples/oa_actions_example.py
5
+ :language: python
6
+ :linenos:
@@ -0,0 +1,6 @@
1
+ OA Citations Example
2
+ ====================
3
+
4
+ .. literalinclude:: ../../../examples/oa_citations_example.py
5
+ :language: python
6
+ :linenos:
@@ -0,0 +1,6 @@
1
+ Office Action Rejections Examples
2
+ ==================================
3
+
4
+ .. automodule:: examples.oa_rejections_example
5
+ :members:
6
+ :undoc-members: