nti.externalization 3.1.0__tar.gz → 3.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/.github/workflows/tests.yml +25 -7
  2. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/.readthedocs.yml +2 -1
  3. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/CHANGES.rst +22 -0
  4. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/PKG-INFO +27 -4
  5. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/basics.rst +20 -3
  6. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/conf.py +1 -1
  7. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/externalization.rst +2 -2
  8. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/make-manylinux +3 -3
  9. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/setup.py +8 -4
  10. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_base_interfaces.c +32 -42
  11. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_datastructures.pxd +1 -1
  12. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_interface_cache.c +11 -15
  13. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/datastructures.c +752 -761
  14. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/datastructures.py +9 -6
  15. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/decorate.c +11 -15
  16. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/dictionary.c +73 -77
  17. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/externalizer.c +78 -82
  18. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/fields.c +65 -69
  19. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/standard_fields.c +71 -75
  20. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/events.c +47 -51
  21. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/externals.c +13 -17
  22. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/factories.c +67 -71
  23. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/fields.c +38 -48
  24. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/legacy_factories.c +10 -14
  25. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/updater.c +97 -101
  26. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/representation.py +66 -5
  27. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/singleton.c +10 -14
  28. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_datastructures.py +2 -2
  29. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_docs.py +7 -1
  30. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_externalization.py +4 -0
  31. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_representation.py +9 -0
  32. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/zcml.py +0 -1
  33. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/PKG-INFO +27 -4
  34. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/requires.txt +3 -1
  35. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/tox.ini +20 -2
  36. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/.coveragerc +0 -0
  37. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/.github/dependabot.yml +0 -0
  38. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/.isort.cfg +0 -0
  39. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/.pylintrc +0 -0
  40. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/AUTHORS +0 -0
  41. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/COPYRIGHT.txt +0 -0
  42. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/INSTALL +0 -0
  43. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/LICENSE +0 -0
  44. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/MANIFEST.in +0 -0
  45. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/README.rst +0 -0
  46. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/doc-requirements.txt +0 -0
  47. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/Makefile +0 -0
  48. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/ADVANCED.rst +0 -0
  49. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/BASICS.rst +0 -0
  50. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/HELPERS.rst +0 -0
  51. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/STRINGS.rst +0 -0
  52. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/ZODB.rst +0 -0
  53. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/autopackage.rst +0 -0
  54. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/datastructures.rst +0 -0
  55. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/datetime.rst +0 -0
  56. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/dublincore.rst +0 -0
  57. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/extension_points.rst +0 -0
  58. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/externalization.rst +0 -0
  59. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/factory.rst +0 -0
  60. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/index.rst +0 -0
  61. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/integer_strings.rst +0 -0
  62. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/interfaces.rst +0 -0
  63. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/internalization.rst +0 -0
  64. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/oids.rst +0 -0
  65. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/persistence.rst +0 -0
  66. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/proxy.rst +0 -0
  67. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/representation.rst +0 -0
  68. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/singleton.rst +0 -0
  69. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/api/zcml.rst +0 -0
  70. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/changelog.rst +0 -0
  71. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/glossary.rst +0 -0
  72. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/index.rst +0 -0
  73. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/internalization.rst +0 -0
  74. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/schemas.rst +0 -0
  75. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/docs/special_attributes.rst +0 -0
  76. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/pyproject.toml +0 -0
  77. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/requirements.txt +0 -0
  78. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/setup.cfg +0 -0
  79. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/__init__.py +0 -0
  80. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/__base_interfaces.pxd +0 -0
  81. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/__init__.py +0 -0
  82. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/__interface_cache.pxd +0 -0
  83. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_base_interfaces.py +0 -0
  84. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_compat.py +0 -0
  85. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_interface_cache.py +0 -0
  86. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_singleton.pxd +0 -0
  87. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/_threadlocal.py +0 -0
  88. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/autopackage.py +0 -0
  89. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/configure.zcml +0 -0
  90. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/datetime_ext.py +0 -0
  91. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/dublincore.py +0 -0
  92. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/extension_points.py +0 -0
  93. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/__init__.py +0 -0
  94. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/_decorate.pxd +0 -0
  95. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/_dictionary.pxd +0 -0
  96. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/_externalizer.pxd +0 -0
  97. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/_fields.pxd +0 -0
  98. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/_standard_fields.pxd +0 -0
  99. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/decorate.py +0 -0
  100. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/dictionary.py +0 -0
  101. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/externalizer.py +0 -0
  102. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/fields.py +0 -0
  103. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/replacers.py +0 -0
  104. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/standard_fields.py +0 -0
  105. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/tests/__init__.py +0 -0
  106. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/externalization/tests/test_externalizer.py +0 -0
  107. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/factory.py +0 -0
  108. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/integer_strings.py +0 -0
  109. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/interfaces.py +0 -0
  110. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/__init__.py +0 -0
  111. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/_events.pxd +0 -0
  112. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/_externals.pxd +0 -0
  113. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/_factories.pxd +0 -0
  114. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/_fields.pxd +0 -0
  115. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/_legacy_factories.pxd +0 -0
  116. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/_updater.pxd +0 -0
  117. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/events.py +0 -0
  118. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/externals.py +0 -0
  119. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/factories.py +0 -0
  120. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/fields.py +0 -0
  121. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/legacy_factories.py +0 -0
  122. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/tests/__init__.py +0 -0
  123. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/tests/test_externals_wo_class_mimetype.py +0 -0
  124. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/tests/test_fields.py +0 -0
  125. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/tests/test_updater.py +0 -0
  126. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/internalization/updater.py +0 -0
  127. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/meta.zcml +0 -0
  128. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/numbers.py +0 -0
  129. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/oids.py +0 -0
  130. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/persistence.py +0 -0
  131. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/proxy.py +0 -0
  132. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/py.typed +0 -0
  133. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/singleton.py +0 -0
  134. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/testing.py +0 -0
  135. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/__init__.py +0 -0
  136. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/__init__.py +0 -0
  137. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/__main__.py +0 -0
  138. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/bm_simple_iface.py +0 -0
  139. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/bm_simple_iface_list.py +0 -0
  140. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/bm_simple_registered_class.py +0 -0
  141. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/bm_singleton.py +0 -0
  142. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/bm_user_profile.py +0 -0
  143. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/bootstrapinterfaces.py +0 -0
  144. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/configure.zcml +0 -0
  145. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/interfaces.py +0 -0
  146. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/objects.py +0 -0
  147. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/profileconfigure.zcml +0 -0
  148. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/benchmarks/profileinterfaces.py +0 -0
  149. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test__compat.py +0 -0
  150. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_autopackage.py +0 -0
  151. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_benchmarks.py +0 -0
  152. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_datetime.py +0 -0
  153. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_dublincore.py +0 -0
  154. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_factory.py +0 -0
  155. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_integer_strings.py +0 -0
  156. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_interfaces.py +0 -0
  157. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_internalization.py +0 -0
  158. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_oids.py +0 -0
  159. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_persistence.py +0 -0
  160. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_proxy.py +0 -0
  161. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_singleton.py +0 -0
  162. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_testing.py +0 -0
  163. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti/externalization/tests/test_zcml.py +0 -0
  164. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/SOURCES.txt +0 -0
  165. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/dependency_links.txt +0 -0
  166. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/entry_points.txt +0 -0
  167. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/top_level.txt +0 -0
  168. {nti_externalization-3.1.0 → nti_externalization-3.2.1}/src/nti.externalization.egg-info/zip-safe +0 -0
@@ -18,11 +18,18 @@ jobs:
18
18
  - "3.12"
19
19
  - "3.13"
20
20
  - "3.14"
21
+ - "3.15-dev"
21
22
  extras:
22
- - "[test,docs,zodb]"
23
- # include:
24
- # - python-version: "3.13"
25
- # extras: "[test,docs,gevent,pyramid]"
23
+ - "[test,docs,zodb,orjson]"
24
+ include:
25
+ # orjson 3.11.9 doesn't currently support
26
+ # being built for free-threaded python, so if we wanted
27
+ # to test there, we'd need to substitute it, most likely by
28
+ # moving it to an extra.
29
+ - python-version: "3.14t"
30
+ extras: "[test,docs,zodb]"
31
+ - python-version: "3.15t-dev"
32
+ extras: "[test,docs,zodb]"
26
33
 
27
34
  runs-on: ubuntu-latest
28
35
  steps:
@@ -38,13 +45,20 @@ jobs:
38
45
  python -m pip install -U pip setuptools wheel
39
46
  python -m pip install -U coverage
40
47
  python -m pip install -v -U -e ".${{ matrix.extras }}"
48
+ - name: Disable GIL
49
+ if: ${{endsWith(matrix.python-version, 't') || endsWith(matrix.python-version, 't-dev')}}
50
+ # zope.hookable 8.2/zope.proxy 7.2 currently enables the gil
51
+ run: |
52
+ echo PYTHON_GIL=0 >> $GITHUB_ENV
41
53
  - name: Test
42
54
  run: |
43
55
  python -m coverage run -m zope.testrunner --test-path=src --auto-color --auto-progress
44
56
  PURE_PYTHON=1 coverage run -a -m zope.testrunner --test-path=src --auto-color --auto-progress
57
+ - name: Docs
58
+ if: matrix.python-version == '3.14'
59
+ # Requires orjson
60
+ run: |
45
61
  coverage run -a -m sphinx -b doctest -d docs/_build/doctrees docs docs/_build/doctests
46
- coverage combine || true
47
- coverage report -i || true
48
62
  - name: Lint
49
63
  if: matrix.python-version == '3.14'
50
64
  run: |
@@ -54,6 +68,10 @@ jobs:
54
68
  run: |
55
69
  python -m pip uninstall -y ZODB zope.dublincore persistent zope.container BTrees
56
70
  PURE_PYTHON=1 coverage run -a -m zope.testrunner --test-path=src --auto-color --auto-progress
71
+ - name: Combine Coverage
72
+ run: |
73
+ coverage combine || true
74
+ coverage report -i || true
57
75
  - name: Submit to Coveralls
58
76
  uses: coverallsapp/github-action@v2
59
77
  with:
@@ -75,7 +93,7 @@ jobs:
75
93
  # We use a regular Python matrix entry to share as much code as possible.
76
94
  strategy:
77
95
  matrix:
78
- python-version: [3.12]
96
+ python-version: [3.14]
79
97
  image:
80
98
  - manylinux_2_28_x86_64
81
99
  - manylinux_2_28_aarch64
@@ -24,7 +24,7 @@ build:
24
24
  # os is required for some reason
25
25
  os: ubuntu-22.04
26
26
  tools:
27
- python: "3.11"
27
+ python: "3.14"
28
28
 
29
29
  python:
30
30
  install:
@@ -32,3 +32,4 @@ python:
32
32
  path: .
33
33
  extra_requirements:
34
34
  - docs
35
+ - orjson
@@ -3,6 +3,28 @@
3
3
  =========
4
4
 
5
5
 
6
+ 3.2.1 (2026-06-02)
7
+ ==================
8
+
9
+ - Make internalizing anonymous dictionary objects
10
+ support ``IMapping`` fields, rather than only its subclass
11
+ ``IDict``.
12
+
13
+
14
+ 3.2.0 (2026-05-19)
15
+ ==================
16
+
17
+ - Drop support for Python 3.10.
18
+ - Add support for Python 3.15.
19
+ - Move the ``orjson`` dependency to the ``orjson`` extra
20
+ for compatibility with free-threaded Python. If you're using regular
21
+ Python, it is highly recommended to install this extra.
22
+ - Add support for free-threaded CPython. However, note that some
23
+ dependencies, most notably orjson, cannot
24
+ currently be installed on free-threaded CPython, and other
25
+ dependencies may currently require enabling the GIL.
26
+
27
+
6
28
  3.1.0 (2026-05-08)
7
29
  ==================
8
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nti.externalization
3
- Version: 3.1.0
3
+ Version: 3.2.1
4
4
  Summary: NTI Externalization
5
5
  Home-page: https://github.com/OpenNTI/nti.externalization
6
6
  Author: Jason Madden
@@ -12,20 +12,19 @@ Classifier: Natural Language :: English
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3 :: Only
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
19
18
  Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Programming Language :: Python :: 3.15
20
20
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
- Requires-Python: >=3.10
21
+ Requires-Python: >=3.11
22
22
  License-File: LICENSE
23
23
  License-File: AUTHORS
24
24
  Requires-Dist: nti.schema>=1.17.0
25
25
  Requires-Dist: PyYAML>=5.1
26
26
  Requires-Dist: isodate
27
27
  Requires-Dist: pytz
28
- Requires-Dist: orjson>=3.11.9
29
28
  Requires-Dist: transaction
30
29
  Requires-Dist: zope.component>=4.6.1
31
30
  Requires-Dist: zope.configuration>=4.4.0
@@ -58,6 +57,8 @@ Requires-Dist: repoze.sphinx.autointerface; extra == "docs"
58
57
  Requires-Dist: sphinx_rtd_theme; extra == "docs"
59
58
  Provides-Extra: benchmarks
60
59
  Requires-Dist: pyperf; extra == "benchmarks"
60
+ Provides-Extra: orjson
61
+ Requires-Dist: orjson>=3.11.9; extra == "orjson"
61
62
  Dynamic: author
62
63
  Dynamic: author-email
63
64
  Dynamic: classifier
@@ -105,6 +106,28 @@ Documentation is hosted at https://ntiexternalization.readthedocs.io/
105
106
  =========
106
107
 
107
108
 
109
+ 3.2.1 (2026-06-02)
110
+ ==================
111
+
112
+ - Make internalizing anonymous dictionary objects
113
+ support ``IMapping`` fields, rather than only its subclass
114
+ ``IDict``.
115
+
116
+
117
+ 3.2.0 (2026-05-19)
118
+ ==================
119
+
120
+ - Drop support for Python 3.10.
121
+ - Add support for Python 3.15.
122
+ - Move the ``orjson`` dependency to the ``orjson`` extra
123
+ for compatibility with free-threaded Python. If you're using regular
124
+ Python, it is highly recommended to install this extra.
125
+ - Add support for free-threaded CPython. However, note that some
126
+ dependencies, most notably orjson, cannot
127
+ currently be installed on free-threaded CPython, and other
128
+ dependencies may currently require enabling the GIL.
129
+
130
+
108
131
  3.1.0 (2026-05-08)
109
132
  ==================
110
133
 
@@ -60,6 +60,23 @@ concerns should be kept as separated as possible from our model
60
60
  objects. Ideally, we should be able to use third-party objects that we
61
61
  have no control over seamlessly in external and internal data.
62
62
 
63
+ Installation
64
+ ============
65
+
66
+ This package is installed from PyPI::
67
+
68
+ pip install nti.externalization[orjson,zodb]
69
+
70
+ It has some extras:
71
+
72
+ orjson
73
+ Highly recommended for a faster dumping and loading experience. As
74
+ of at least orjson 3.11.9, however, this is incompatible with
75
+ free-threaded Python.
76
+ zodb
77
+ Optional; provides support for BTrees, persistent objects, intids, and
78
+ container proxies.
79
+
63
80
  Getting Started
64
81
  ===============
65
82
 
@@ -248,7 +265,7 @@ others:
248
265
 
249
266
  >>> internal.creator = u'sjohnson'
250
267
  >>> internal.createdTime = 123456
251
- >>> pprint(to_external_object(internal))
268
+ >>> pprint(to_external_object(internal), compact=True, indent=1)
252
269
  {'Class': 'ExternalObject',
253
270
  'CreatedTime': 123456,
254
271
  'Creator': 'sjohnson',
@@ -337,7 +354,7 @@ Now we can register and use it as before:
337
354
  ... postal_code=u'95014',
338
355
  ... country=u'USA')
339
356
  >>> external = to_external_object(address)
340
- >>> pprint(external)
357
+ >>> pprint(external, compact=True, indent=1)
341
358
  {'Class': 'Address',
342
359
  'city': 'Cupertino',
343
360
  'country': 'USA',
@@ -473,7 +490,7 @@ demonstrating that nested schemas and objects are possible.
473
490
  ... realname=u'Steve Jobs',
474
491
  ... )
475
492
  >>> external = to_external_object(user_profile)
476
- >>> pprint(external)
493
+ >>> pprint(external, compact=True, indent=1)
477
494
  {'Class': 'UserProfile',
478
495
  'MimeType': 'application/vnd.nextthought.benchmarks.userprofile',
479
496
  'addresses': {'home': {'Class': 'Address',
@@ -78,7 +78,7 @@ release = rqmt
78
78
  #
79
79
  # This is also used if you do content translation via gettext catalogs.
80
80
  # Usually you set "language" from the command line for these cases.
81
- language = None
81
+ language = 'en'
82
82
 
83
83
  # List of patterns, relative to source directory, that match files and
84
84
  # directories to ignore when looking for source files.
@@ -85,7 +85,7 @@ We'll register our adapter and externalize:
85
85
  >>> from zope import component
86
86
  >>> component.provideSubscriptionAdapter(PrivateAddressDecorator)
87
87
  >>> from pprint import pprint
88
- >>> pprint(to_external_object(home_address))
88
+ >>> pprint(to_external_object(home_address), compact=True, indent=1)
89
89
  {'Class': 'Address',
90
90
  'MimeType': 'application/vnd.nextthought.benchmarks.address',
91
91
  'country': 'USA',
@@ -118,7 +118,7 @@ look for a request):
118
118
  :pyversion: > 3.3
119
119
 
120
120
  >>> component.provideSubscriptionAdapter(LinkAddressDecorator)
121
- >>> pprint(to_external_object(home_address, request=Request()))
121
+ >>> pprint(to_external_object(home_address, request=Request()), compact=True, indent=1)
122
122
  {'Class': 'Address',
123
123
  'MimeType': 'application/vnd.nextthought.benchmarks.address',
124
124
  'country': 'USA',
@@ -13,7 +13,7 @@ export TRAVIS=true
13
13
  # know. The env var works for pip 20.
14
14
  export PIP_NO_PYTHON_VERSION_WARNING=1
15
15
  export PIP_NO_WARN_SCRIPT_LOCATION=1
16
-
16
+ export PIP_ROOT_USER_ACTION=ignore
17
17
 
18
18
  if [ -d /project ] && [ -d /opt/python ]; then
19
19
  # Running inside docker
@@ -44,9 +44,9 @@ if [ -d /project ] && [ -d /opt/python ]; then
44
44
  OPATH="$PATH"
45
45
  which auditwheel
46
46
  echo @@@@@@@@@@@@@@@@@@@@@@
47
- echo Will build /opt/python/cp{310,311,312,313,314}*
47
+ echo Will build /opt/python/cp{311,312,313,314,315}*
48
48
 
49
- for variant in `ls -d /opt/python/cp{314,313,310,311,312}*`; do
49
+ for variant in `ls -d /opt/python/cp{315,314,313,311,312}*`; do
50
50
 
51
51
  export PATH="$variant/bin:$OPATH"
52
52
  echo "Building $variant $(python --version)"
@@ -133,6 +133,7 @@ if not PYPY:
133
133
  'language_level': '3',
134
134
  'always_allow_keywords': False,
135
135
  'nonecheck': False,
136
+ 'freethreading_compatible': True,
136
137
  },
137
138
  )
138
139
  except ValueError:
@@ -147,7 +148,7 @@ if not PYPY:
147
148
 
148
149
  setup(
149
150
  name='nti.externalization',
150
- version='3.1.0',
151
+ version='3.2.1',
151
152
  author='Jason Madden',
152
153
  author_email='jason@seecoresoftware.com',
153
154
  description="NTI Externalization",
@@ -160,11 +161,11 @@ setup(
160
161
  'Operating System :: OS Independent',
161
162
  'Programming Language :: Python :: 3',
162
163
  'Programming Language :: Python :: 3 :: Only',
163
- 'Programming Language :: Python :: 3.10',
164
164
  'Programming Language :: Python :: 3.11',
165
165
  'Programming Language :: Python :: 3.12',
166
166
  'Programming Language :: Python :: 3.13',
167
167
  'Programming Language :: Python :: 3.14',
168
+ 'Programming Language :: Python :: 3.15',
168
169
  'Programming Language :: Python :: Implementation :: CPython',
169
170
  ],
170
171
  url="https://github.com/OpenNTI/nti.externalization",
@@ -179,7 +180,7 @@ setup(
179
180
  'PyYAML >= 5.1',
180
181
  'isodate',
181
182
  'pytz',
182
- 'orjson >= 3.11.9',
183
+
183
184
  'transaction',
184
185
  'zope.component >= 4.6.1',
185
186
  'zope.configuration >= 4.4.0',
@@ -212,7 +213,10 @@ setup(
212
213
  'benchmarks': [
213
214
  'pyperf',
214
215
  ],
216
+ 'orjson': [
217
+ 'orjson >= 3.11.9',
218
+ ]
215
219
  },
216
220
  entry_points=entry_points,
217
- python_requires=">=3.10",
221
+ python_requires=">=3.11",
218
222
  )
@@ -1,4 +1,4 @@
1
- /* Generated by Cython 3.2.4 */
1
+ /* Generated by Cython 3.2.5 */
2
2
 
3
3
  /* BEGIN: Cython Metadata
4
4
  {
@@ -34,8 +34,8 @@ END: Cython Metadata */
34
34
  #elif PY_VERSION_HEX < 0x03080000
35
35
  #error Cython requires Python 3.8+.
36
36
  #else
37
- #define __PYX_ABI_VERSION "3_2_4"
38
- #define CYTHON_HEX_VERSION 0x030204F0
37
+ #define __PYX_ABI_VERSION "3_2_5"
38
+ #define CYTHON_HEX_VERSION 0x030205F0
39
39
  #define CYTHON_FUTURE_DIVISION 1
40
40
  /* CModulePreamble */
41
41
  #include <stddef.h>
@@ -1144,7 +1144,7 @@ static int __Pyx_init_co_variables(void) {
1144
1144
  #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
1145
1145
  #endif
1146
1146
  #else
1147
- #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
1147
+ #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_NOT_USED
1148
1148
  #endif
1149
1149
  #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
1150
1150
  #define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
@@ -6019,7 +6019,7 @@ static int __pyx_pw_3nti_15externalization_17__base_interfaces_21Externalization
6019
6019
  {
6020
6020
  PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_use_iso8601_for_unix_timestamp,0};
6021
6021
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
6022
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 292, __pyx_L3_error)
6022
+ if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 292, __pyx_L3_error)
6023
6023
  if (__pyx_kwds_len > 0) {
6024
6024
  switch (__pyx_nargs) {
6025
6025
  case 1:
@@ -8346,7 +8346,7 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec___base_interfaces(PyObject *__pyx_
8346
8346
  __pyx_m = __pyx_t_1;
8347
8347
  #endif
8348
8348
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
8349
- PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_USED);
8349
+ PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_NOT_USED);
8350
8350
  #endif
8351
8351
  __pyx_mstate = __pyx_mstate_global;
8352
8352
  CYTHON_UNUSED_VAR(__pyx_t_1);
@@ -9129,11 +9129,11 @@ __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
9129
9129
  res = PyTuple_New(n);
9130
9130
  if (unlikely(res == NULL)) return NULL;
9131
9131
  for (i = 0; i < n; i++) {
9132
+ Py_INCREF(src[i]);
9132
9133
  if (unlikely(__Pyx_PyTuple_SET_ITEM(res, i, src[i]) < (0))) {
9133
9134
  Py_DECREF(res);
9134
9135
  return NULL;
9135
9136
  }
9136
- Py_INCREF(src[i]);
9137
9137
  }
9138
9138
  return res;
9139
9139
  }
@@ -9924,6 +9924,7 @@ static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) {
9924
9924
  }
9925
9925
  PyException_SetCause(new_exc, val); // steals ref to val
9926
9926
  PyErr_SetObject(PyExc_RuntimeError, new_exc);
9927
+ Py_DECREF(new_exc);
9927
9928
  }
9928
9929
 
9929
9930
  /* PyErrFetchRestore (used by IterFinish) */
@@ -12256,7 +12257,6 @@ __Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
12256
12257
  PyList_SET_ITEM(fromlist, 0, marker);
12257
12258
  #else
12258
12259
  if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
12259
- Py_DECREF(marker);
12260
12260
  Py_DECREF(fromlist);
12261
12261
  return NULL;
12262
12262
  }
@@ -12497,8 +12497,7 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
12497
12497
  Py_CLEAR(m->func_doc);
12498
12498
  Py_CLEAR(m->func_globals);
12499
12499
  Py_CLEAR(m->func_code);
12500
- #if !CYTHON_COMPILING_IN_LIMITED_API
12501
- #if PY_VERSION_HEX < 0x030900B1
12500
+ #if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
12502
12501
  Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
12503
12502
  #else
12504
12503
  {
@@ -12506,7 +12505,6 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
12506
12505
  ((PyCMethodObject *) (m))->mm_class = NULL;
12507
12506
  Py_XDECREF(cls);
12508
12507
  }
12509
- #endif
12510
12508
  #endif
12511
12509
  Py_CLEAR(m->defaults_tuple);
12512
12510
  Py_CLEAR(m->defaults_kwdict);
@@ -12558,11 +12556,10 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
12558
12556
  Py_VISIT(m->func_doc);
12559
12557
  Py_VISIT(m->func_globals);
12560
12558
  __Pyx_VISIT_CONST(m->func_code);
12561
- #if !CYTHON_COMPILING_IN_LIMITED_API
12562
12559
  Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
12563
- #endif
12564
12560
  Py_VISIT(m->defaults_tuple);
12565
12561
  Py_VISIT(m->defaults_kwdict);
12562
+ Py_VISIT(m->func_annotations);
12566
12563
  Py_VISIT(m->func_is_coroutine);
12567
12564
  Py_VISIT(m->defaults);
12568
12565
  return 0;
@@ -13351,8 +13348,8 @@ bad:
13351
13348
  #if CYTHON_VECTORCALL
13352
13349
  static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
13353
13350
  (void)__Pyx_PyObject_FastCallDict;
13354
- if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
13355
13351
  Py_INCREF(key);
13352
+ if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
13356
13353
  args[n] = value;
13357
13354
  return 0;
13358
13355
  }
@@ -15055,7 +15052,8 @@ static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject
15055
15052
  ret = __Pyx_PyObject_Call(meth, args, NULL);
15056
15053
  } else {
15057
15054
  PyObject *cargs[4] = {NULL, typ, val, tb};
15058
- ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
15055
+ size_t nargs = 1U + (val != NULL) + (tb != NULL);
15056
+ ret = __Pyx_PyObject_FastCall(meth, cargs+1, nargs | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
15059
15057
  }
15060
15058
  Py_DECREF(meth);
15061
15059
  }
@@ -15252,14 +15250,10 @@ __Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void
15252
15250
  __Pyx_Py_XDECREF_SET(self->gi_qualname, value);
15253
15251
  return 0;
15254
15252
  }
15255
- static PyObject *
15256
- __Pyx__Coroutine_get_frame(__pyx_CoroutineObject *self)
15257
- {
15258
15253
  #if !CYTHON_COMPILING_IN_LIMITED_API
15254
+ static PyObject *
15255
+ __Pyx__Coroutine_get_frame_locked(__pyx_CoroutineObject *self) {
15259
15256
  PyObject *frame;
15260
- #if PY_VERSION_HEX >= 0x030d0000
15261
- Py_BEGIN_CRITICAL_SECTION(self);
15262
- #endif
15263
15257
  frame = self->gi_frame;
15264
15258
  if (!frame) {
15265
15259
  if (unlikely(!self->gi_code)) {
@@ -15284,9 +15278,17 @@ __Pyx__Coroutine_get_frame(__pyx_CoroutineObject *self)
15284
15278
  }
15285
15279
  }
15286
15280
  Py_INCREF(frame);
15287
- #if PY_VERSION_HEX >= 0x030d0000
15288
- Py_END_CRITICAL_SECTION();
15289
- #endif
15281
+ return frame;
15282
+ }
15283
+ #endif
15284
+ static PyObject *
15285
+ __Pyx__Coroutine_get_frame(__pyx_CoroutineObject *self)
15286
+ {
15287
+ #if !CYTHON_COMPILING_IN_LIMITED_API
15288
+ PyObject *frame;
15289
+ __Pyx_BEGIN_CRITICAL_SECTION((PyObject*)self);
15290
+ frame = __Pyx__Coroutine_get_frame_locked(self);
15291
+ __Pyx_END_CRITICAL_SECTION();
15290
15292
  return frame;
15291
15293
  #else
15292
15294
  CYTHON_UNUSED_VAR(self);
@@ -15347,35 +15349,23 @@ static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
15347
15349
  }
15348
15350
  static char __Pyx_Coroutine_test_and_set_is_running(__pyx_CoroutineObject *gen) {
15349
15351
  char result;
15350
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
15351
- Py_BEGIN_CRITICAL_SECTION(gen);
15352
- #endif
15352
+ __Pyx_BEGIN_CRITICAL_SECTION((PyObject*)gen);
15353
15353
  result = gen->is_running;
15354
15354
  gen->is_running = 1;
15355
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
15356
- Py_END_CRITICAL_SECTION();
15357
- #endif
15355
+ __Pyx_END_CRITICAL_SECTION();
15358
15356
  return result;
15359
15357
  }
15360
15358
  static void __Pyx_Coroutine_unset_is_running(__pyx_CoroutineObject *gen) {
15361
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
15362
- Py_BEGIN_CRITICAL_SECTION(gen);
15363
- #endif
15359
+ __Pyx_BEGIN_CRITICAL_SECTION((PyObject*)gen);
15364
15360
  assert(gen->is_running);
15365
15361
  gen->is_running = 0;
15366
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
15367
- Py_END_CRITICAL_SECTION();
15368
- #endif
15362
+ __Pyx_END_CRITICAL_SECTION();
15369
15363
  }
15370
15364
  static char __Pyx_Coroutine_get_is_running(__pyx_CoroutineObject *gen) {
15371
15365
  char result;
15372
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
15373
- Py_BEGIN_CRITICAL_SECTION(gen);
15374
- #endif
15366
+ __Pyx_BEGIN_CRITICAL_SECTION((PyObject*)gen);
15375
15367
  result = gen->is_running;
15376
- #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
15377
- Py_END_CRITICAL_SECTION();
15378
- #endif
15368
+ __Pyx_END_CRITICAL_SECTION();
15379
15369
  return result;
15380
15370
  }
15381
15371
  static PyObject *__Pyx_Coroutine_get_is_running_getter(PyObject *gen, void *closure) {
@@ -32,7 +32,7 @@ cdef make_repr
32
32
  cdef isSyntheticKey
33
33
  cdef find_most_derived_interface
34
34
  cdef NotGiven
35
- cdef IDict_providedBy
35
+ cdef IMapping_providedBy
36
36
  cdef IObject_providedBy
37
37
  cdef _anonymous_dict_factory
38
38
 
@@ -1,4 +1,4 @@
1
- /* Generated by Cython 3.2.4 */
1
+ /* Generated by Cython 3.2.5 */
2
2
 
3
3
  /* BEGIN: Cython Metadata
4
4
  {
@@ -34,8 +34,8 @@ END: Cython Metadata */
34
34
  #elif PY_VERSION_HEX < 0x03080000
35
35
  #error Cython requires Python 3.8+.
36
36
  #else
37
- #define __PYX_ABI_VERSION "3_2_4"
38
- #define CYTHON_HEX_VERSION 0x030204F0
37
+ #define __PYX_ABI_VERSION "3_2_5"
38
+ #define CYTHON_HEX_VERSION 0x030205F0
39
39
  #define CYTHON_FUTURE_DIVISION 1
40
40
  /* CModulePreamble */
41
41
  #include <stddef.h>
@@ -1144,7 +1144,7 @@ static int __Pyx_init_co_variables(void) {
1144
1144
  #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
1145
1145
  #endif
1146
1146
  #else
1147
- #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
1147
+ #define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_NOT_USED
1148
1148
  #endif
1149
1149
  #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
1150
1150
  #define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
@@ -3195,7 +3195,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
3195
3195
  {
3196
3196
  PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_key,&__pyx_mstate_global->__pyx_n_u_provided_by,0};
3197
3197
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
3198
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 39, __pyx_L3_error)
3198
+ if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 39, __pyx_L3_error)
3199
3199
  if (__pyx_kwds_len > 0) {
3200
3200
  switch (__pyx_nargs) {
3201
3201
  case 2:
@@ -3401,7 +3401,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
3401
3401
  {
3402
3402
  PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_externalizer,&__pyx_mstate_global->__pyx_n_u_ext_self,0};
3403
3403
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
3404
- if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 58, __pyx_L3_error)
3404
+ if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 58, __pyx_L3_error)
3405
3405
  if (__pyx_kwds_len > 0) {
3406
3406
  switch (__pyx_nargs) {
3407
3407
  case 2:
@@ -4326,7 +4326,7 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec___interface_cache(PyObject *__pyx_
4326
4326
  __pyx_m = __pyx_t_1;
4327
4327
  #endif
4328
4328
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
4329
- PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_USED);
4329
+ PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_NOT_USED);
4330
4330
  #endif
4331
4331
  __pyx_mstate = __pyx_mstate_global;
4332
4332
  CYTHON_UNUSED_VAR(__pyx_t_1);
@@ -4977,11 +4977,11 @@ __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
4977
4977
  res = PyTuple_New(n);
4978
4978
  if (unlikely(res == NULL)) return NULL;
4979
4979
  for (i = 0; i < n; i++) {
4980
+ Py_INCREF(src[i]);
4980
4981
  if (unlikely(__Pyx_PyTuple_SET_ITEM(res, i, src[i]) < (0))) {
4981
4982
  Py_DECREF(res);
4982
4983
  return NULL;
4983
4984
  }
4984
- Py_INCREF(src[i]);
4985
4985
  }
4986
4986
  return res;
4987
4987
  }
@@ -6385,7 +6385,6 @@ __Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
6385
6385
  PyList_SET_ITEM(fromlist, 0, marker);
6386
6386
  #else
6387
6387
  if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
6388
- Py_DECREF(marker);
6389
6388
  Py_DECREF(fromlist);
6390
6389
  return NULL;
6391
6390
  }
@@ -6626,8 +6625,7 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
6626
6625
  Py_CLEAR(m->func_doc);
6627
6626
  Py_CLEAR(m->func_globals);
6628
6627
  Py_CLEAR(m->func_code);
6629
- #if !CYTHON_COMPILING_IN_LIMITED_API
6630
- #if PY_VERSION_HEX < 0x030900B1
6628
+ #if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
6631
6629
  Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
6632
6630
  #else
6633
6631
  {
@@ -6635,7 +6633,6 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
6635
6633
  ((PyCMethodObject *) (m))->mm_class = NULL;
6636
6634
  Py_XDECREF(cls);
6637
6635
  }
6638
- #endif
6639
6636
  #endif
6640
6637
  Py_CLEAR(m->defaults_tuple);
6641
6638
  Py_CLEAR(m->defaults_kwdict);
@@ -6687,11 +6684,10 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
6687
6684
  Py_VISIT(m->func_doc);
6688
6685
  Py_VISIT(m->func_globals);
6689
6686
  __Pyx_VISIT_CONST(m->func_code);
6690
- #if !CYTHON_COMPILING_IN_LIMITED_API
6691
6687
  Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
6692
- #endif
6693
6688
  Py_VISIT(m->defaults_tuple);
6694
6689
  Py_VISIT(m->defaults_kwdict);
6690
+ Py_VISIT(m->func_annotations);
6695
6691
  Py_VISIT(m->func_is_coroutine);
6696
6692
  Py_VISIT(m->defaults);
6697
6693
  return 0;
@@ -8698,8 +8694,8 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
8698
8694
  #if CYTHON_VECTORCALL
8699
8695
  static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
8700
8696
  (void)__Pyx_PyObject_FastCallDict;
8701
- if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
8702
8697
  Py_INCREF(key);
8698
+ if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
8703
8699
  args[n] = value;
8704
8700
  return 0;
8705
8701
  }