cocoindex 0.1.60__tar.gz → 0.1.62__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 (260) hide show
  1. {cocoindex-0.1.60 → cocoindex-0.1.62}/.gitignore +2 -0
  2. {cocoindex-0.1.60 → cocoindex-0.1.62}/Cargo.lock +1 -1
  3. {cocoindex-0.1.60 → cocoindex-0.1.62}/Cargo.toml +1 -1
  4. {cocoindex-0.1.60 → cocoindex-0.1.62}/PKG-INFO +1 -1
  5. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/cli.mdx +0 -6
  6. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/__init__.py +1 -2
  7. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/cli.py +13 -3
  8. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/flow.py +10 -1
  9. cocoindex-0.1.62/python/cocoindex/lib.py +32 -0
  10. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/spec.rs +8 -0
  11. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/builder/analyzer.rs +3 -0
  12. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/builder/flow_builder.rs +5 -1
  13. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/builder/plan.rs +1 -0
  14. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/source_indexer.rs +1 -0
  15. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/functions/split_recursively.rs +5 -7
  16. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/postgres.rs +8 -9
  17. cocoindex-0.1.62/src/utils/concur_control.rs +30 -0
  18. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/utils/mod.rs +3 -0
  19. cocoindex-0.1.60/.vscode/settings.json +0 -9
  20. cocoindex-0.1.60/python/cocoindex/lib.py +0 -75
  21. {cocoindex-0.1.60 → cocoindex-0.1.62}/.cargo/config.toml +0 -0
  22. {cocoindex-0.1.60 → cocoindex-0.1.62}/.env.lib_debug +0 -0
  23. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  24. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  25. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/scripts/update_version.sh +0 -0
  26. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/workflows/CI.yml +0 -0
  27. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/workflows/_doc_release.yml +0 -0
  28. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/workflows/_test.yml +0 -0
  29. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/workflows/docs.yml +0 -0
  30. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/workflows/format.yml +0 -0
  31. {cocoindex-0.1.60 → cocoindex-0.1.62}/.github/workflows/release.yml +0 -0
  32. {cocoindex-0.1.60 → cocoindex-0.1.62}/.pre-commit-config.yaml +0 -0
  33. {cocoindex-0.1.60 → cocoindex-0.1.62}/CODE_OF_CONDUCT.md +0 -0
  34. {cocoindex-0.1.60 → cocoindex-0.1.62}/CONTRIBUTING.md +0 -0
  35. {cocoindex-0.1.60 → cocoindex-0.1.62}/LICENSE +0 -0
  36. {cocoindex-0.1.60 → cocoindex-0.1.62}/README.md +0 -0
  37. {cocoindex-0.1.60 → cocoindex-0.1.62}/dev/neo4j.yaml +0 -0
  38. {cocoindex-0.1.60 → cocoindex-0.1.62}/dev/postgres.yaml +0 -0
  39. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/.gitignore +0 -0
  40. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/README.md +0 -0
  41. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/about/community.md +0 -0
  42. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/about/contributing.md +0 -0
  43. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/ai/llm.mdx +0 -0
  44. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/basics.md +0 -0
  45. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/custom_function.mdx +0 -0
  46. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/data_example.svg +0 -0
  47. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/data_types.mdx +0 -0
  48. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/flow_def.mdx +0 -0
  49. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/flow_example.svg +0 -0
  50. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/flow_methods.mdx +0 -0
  51. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/core/settings.mdx +0 -0
  52. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/getting_started/installation.md +0 -0
  53. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/getting_started/markdown_files.zip +0 -0
  54. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/getting_started/overview.md +0 -0
  55. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/getting_started/quickstart.md +0 -0
  56. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/ops/functions.md +0 -0
  57. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/ops/sources.md +0 -0
  58. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/ops/targets.md +0 -0
  59. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docs/query.mdx +0 -0
  60. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/docusaurus.config.ts +0 -0
  61. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/package.json +0 -0
  62. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/sidebars.ts +0 -0
  63. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/src/components/HomepageFeatures/index.tsx +0 -0
  64. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  65. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/src/css/custom.css +0 -0
  66. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/src/theme/Root.js +0 -0
  67. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/static/.nojekyll +0 -0
  68. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/static/img/docusaurus.png +0 -0
  69. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/static/img/favicon.ico +0 -0
  70. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/static/img/icon.svg +0 -0
  71. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/static/img/incremental-etl.gif +0 -0
  72. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/static/robots.txt +0 -0
  73. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/tsconfig.json +0 -0
  74. {cocoindex-0.1.60 → cocoindex-0.1.62}/docs/yarn.lock +0 -0
  75. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/amazon_s3_embedding/.env.example +0 -0
  76. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/amazon_s3_embedding/.gitignore +0 -0
  77. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/amazon_s3_embedding/README.md +0 -0
  78. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/amazon_s3_embedding/main.py +0 -0
  79. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/amazon_s3_embedding/pyproject.toml +0 -0
  80. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/code_embedding/.env +0 -0
  81. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/code_embedding/README.md +0 -0
  82. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/code_embedding/main.py +0 -0
  83. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/code_embedding/pyproject.toml +0 -0
  84. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/docs_to_knowledge_graph/.env +0 -0
  85. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/docs_to_knowledge_graph/README.md +0 -0
  86. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/docs_to_knowledge_graph/main.py +0 -0
  87. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
  88. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/.dockerignore +0 -0
  89. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/.env +0 -0
  90. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/README.md +0 -0
  91. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/compose.yaml +0 -0
  92. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/dockerfile +0 -0
  93. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  94. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/main.py +0 -0
  95. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/fastapi_server_docker/requirements.txt +0 -0
  96. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/gdrive_text_embedding/.env.example +0 -0
  97. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/gdrive_text_embedding/.gitignore +0 -0
  98. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/gdrive_text_embedding/README.md +0 -0
  99. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/gdrive_text_embedding/main.py +0 -0
  100. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/gdrive_text_embedding/pyproject.toml +0 -0
  101. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/.env +0 -0
  102. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/README.md +0 -0
  103. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/.gitignore +0 -0
  104. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/index.html +0 -0
  105. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/package-lock.json +0 -0
  106. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/package.json +0 -0
  107. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/src/App.jsx +0 -0
  108. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/src/main.jsx +0 -0
  109. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/src/style.css +0 -0
  110. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/frontend/vite.config.js +0 -0
  111. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/img/cat1.jpeg +0 -0
  112. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/img/dog1.jpeg +0 -0
  113. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/img/elephant1.jpg +0 -0
  114. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/img/giraffe.jpg +0 -0
  115. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/main.py +0 -0
  116. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/pyproject.toml +0 -0
  117. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/image_search/requirements.txt +0 -0
  118. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/.env +0 -0
  119. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/README.md +0 -0
  120. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/main.py +0 -0
  121. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  122. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  123. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  124. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  125. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/manuals_llm_extraction/pyproject.toml +0 -0
  126. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/.env.example +0 -0
  127. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/README.md +0 -0
  128. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/data/README.md +0 -0
  129. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
  130. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
  131. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
  132. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
  133. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/main.py +0 -0
  134. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/patient_intake_extraction/pyproject.toml +0 -0
  135. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/.env +0 -0
  136. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/README.md +0 -0
  137. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/main.py +0 -0
  138. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  139. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  140. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  141. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/pdf_embedding/pyproject.toml +0 -0
  142. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/.env +0 -0
  143. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/README.md +0 -0
  144. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/img/cocoinsight.png +0 -0
  145. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/img/neo4j.png +0 -0
  146. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/main.py +0 -0
  147. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p1.json +0 -0
  148. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p2.json +0 -0
  149. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p3.json +0 -0
  150. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p4.json +0 -0
  151. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p5.json +0 -0
  152. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p6.json +0 -0
  153. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p7.json +0 -0
  154. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p8.json +0 -0
  155. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/products/p9.json +0 -0
  156. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/product_recommendation/pyproject.toml +0 -0
  157. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/.env +0 -0
  158. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/README.md +0 -0
  159. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  160. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/main.py +0 -0
  161. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  162. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  163. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  164. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding/pyproject.toml +0 -0
  165. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding_qdrant/.env +0 -0
  166. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding_qdrant/README.md +0 -0
  167. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding_qdrant/main.py +0 -0
  168. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  169. {cocoindex-0.1.60 → cocoindex-0.1.62}/examples/text_embedding_qdrant/pyproject.toml +0 -0
  170. {cocoindex-0.1.60 → cocoindex-0.1.62}/pyproject.toml +0 -0
  171. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/auth_registry.py +0 -0
  172. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/convert.py +0 -0
  173. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/functions.py +0 -0
  174. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/index.py +0 -0
  175. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/llm.py +0 -0
  176. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/op.py +0 -0
  177. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/py.typed +0 -0
  178. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/runtime.py +0 -0
  179. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/setting.py +0 -0
  180. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/setup.py +0 -0
  181. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/sources.py +0 -0
  182. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/targets.py +0 -0
  183. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/tests/__init__.py +0 -0
  184. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/tests/test_convert.py +0 -0
  185. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/tests/test_optional_database.py +0 -0
  186. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/tests/test_typing.py +0 -0
  187. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/typing.py +0 -0
  188. {cocoindex-0.1.60 → cocoindex-0.1.62}/python/cocoindex/utils.py +0 -0
  189. {cocoindex-0.1.60 → cocoindex-0.1.62}/ruff.toml +0 -0
  190. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/duration.rs +0 -0
  191. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/field_attrs.rs +0 -0
  192. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/json_schema.rs +0 -0
  193. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/mod.rs +0 -0
  194. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/schema.rs +0 -0
  195. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/base/value.rs +0 -0
  196. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/builder/analyzed_flow.rs +0 -0
  197. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/builder/exec_ctx.rs +0 -0
  198. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/builder/mod.rs +0 -0
  199. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/db_tracking.rs +0 -0
  200. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/db_tracking_setup.rs +0 -0
  201. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/dumper.rs +0 -0
  202. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/evaluator.rs +0 -0
  203. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/indexing_status.rs +0 -0
  204. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/live_updater.rs +0 -0
  205. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/memoization.rs +0 -0
  206. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/mod.rs +0 -0
  207. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/row_indexer.rs +0 -0
  208. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/execution/stats.rs +0 -0
  209. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/lib.rs +0 -0
  210. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/lib_context.rs +0 -0
  211. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/anthropic.rs +0 -0
  212. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/gemini.rs +0 -0
  213. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/litellm.rs +0 -0
  214. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/mod.rs +0 -0
  215. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/ollama.rs +0 -0
  216. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/openai.rs +0 -0
  217. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/openrouter.rs +0 -0
  218. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/vllm.rs +0 -0
  219. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/llm/voyage.rs +0 -0
  220. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/factory_bases.rs +0 -0
  221. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/functions/embed_text.rs +0 -0
  222. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/functions/extract_by_llm.rs +0 -0
  223. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/functions/mod.rs +0 -0
  224. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/functions/parse_json.rs +0 -0
  225. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/interface.rs +0 -0
  226. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/mod.rs +0 -0
  227. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/py_factory.rs +0 -0
  228. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/registration.rs +0 -0
  229. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/registry.rs +0 -0
  230. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/sdk.rs +0 -0
  231. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/sources/amazon_s3.rs +0 -0
  232. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/sources/google_drive.rs +0 -0
  233. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/sources/local_file.rs +0 -0
  234. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/sources/mod.rs +0 -0
  235. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/kuzu.rs +0 -0
  236. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/mod.rs +0 -0
  237. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/neo4j.rs +0 -0
  238. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/qdrant.rs +0 -0
  239. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/shared/mod.rs +0 -0
  240. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/shared/property_graph.rs +0 -0
  241. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/ops/targets/shared/table_columns.rs +0 -0
  242. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/prelude.rs +0 -0
  243. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/py/convert.rs +0 -0
  244. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/py/mod.rs +0 -0
  245. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/server.rs +0 -0
  246. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/service/error.rs +0 -0
  247. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/service/flows.rs +0 -0
  248. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/service/mod.rs +0 -0
  249. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/settings.rs +0 -0
  250. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/setup/auth_registry.rs +0 -0
  251. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/setup/components.rs +0 -0
  252. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/setup/db_metadata.rs +0 -0
  253. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/setup/driver.rs +0 -0
  254. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/setup/mod.rs +0 -0
  255. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/setup/states.rs +0 -0
  256. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/utils/db.rs +0 -0
  257. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/utils/fingerprint.rs +0 -0
  258. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/utils/immutable.rs +0 -0
  259. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/utils/retryable.rs +0 -0
  260. {cocoindex-0.1.60 → cocoindex-0.1.62}/src/utils/yaml_ser.rs +0 -0
@@ -18,3 +18,5 @@ dist/
18
18
 
19
19
  # Output of `cocoindex eval`
20
20
  examples/**/eval_*
21
+
22
+ /.vscode
@@ -1040,7 +1040,7 @@ dependencies = [
1040
1040
 
1041
1041
  [[package]]
1042
1042
  name = "cocoindex"
1043
- version = "0.1.60"
1043
+ version = "0.1.62"
1044
1044
  dependencies = [
1045
1045
  "anyhow",
1046
1046
  "async-openai",
@@ -2,7 +2,7 @@
2
2
  name = "cocoindex"
3
3
  # Version used for local development is always higher than others to take precedence.
4
4
  # Will be overridden for specific release versions.
5
- version = "0.1.60"
5
+ version = "0.1.62"
6
6
  edition = "2024"
7
7
  rust-version = "1.86"
8
8
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cocoindex
3
- Version: 0.1.60
3
+ Version: 0.1.62
4
4
  Requires-Dist: click>=8.1.8
5
5
  Requires-Dist: rich>=14.0.0
6
6
  Requires-Dist: python-dotenv>=1.1.0
@@ -47,12 +47,6 @@ CocoIndex CLI supports the following global options:
47
47
  * `--version`: Show the CocoIndex version and exit.
48
48
  * `--help`: Show the main help message and exit.
49
49
 
50
- :::caution Deprecated Usage
51
-
52
- The old method of invoking the CLI using `python main.py cocoindex ...` via the `@cocoindex.main_fn()` decorator is now deprecated. Please remove `@cocoindex.main_fn()` from your scripts and use the standalone cocoindex command as described.
53
-
54
- :::
55
-
56
50
  ## Subcommands
57
51
 
58
52
  The following subcommands are available:
@@ -12,7 +12,7 @@ from .flow import flow_def
12
12
  from .flow import EvaluateAndDumpOptions, GeneratedField
13
13
  from .flow import FlowLiveUpdater, FlowLiveUpdaterOptions
14
14
  from .flow import update_all_flows_async, setup_all_flows, drop_all_flows
15
- from .lib import init, start_server, stop, main_fn
15
+ from .lib import init, start_server, stop
16
16
  from .llm import LlmSpec, LlmApiType
17
17
  from .index import VectorSimilarityMetric, VectorIndexDef, IndexOptions
18
18
  from .setting import DatabaseConnectionSpec, Settings, ServerSettings
@@ -59,7 +59,6 @@ __all__ = [
59
59
  "init",
60
60
  "start_server",
61
61
  "stop",
62
- "main_fn",
63
62
  # LLM
64
63
  "LlmSpec",
65
64
  "LlmApiType",
@@ -408,6 +408,12 @@ def update(
408
408
  app_ref, flow_name = _parse_app_flow_specifier(app_flow_specifier)
409
409
  _load_user_app(app_ref)
410
410
 
411
+ if live:
412
+ click.secho(
413
+ "NOTE: Flow code changes will NOT be reflected in the server until you restart it.",
414
+ fg="red",
415
+ )
416
+
411
417
  options = flow.FlowLiveUpdaterOptions(live_mode=live, print_stats=not quiet)
412
418
  if flow_name is None:
413
419
  if setup:
@@ -597,6 +603,10 @@ def server(
597
603
  ),
598
604
  )
599
605
  else:
606
+ click.secho(
607
+ "NOTE: Flow code changes will NOT be reflected in the server until you restart it. Use --reload to enable auto-reload.",
608
+ fg="red",
609
+ )
600
610
  _run_server(*args)
601
611
 
602
612
 
@@ -633,9 +643,6 @@ def _run_server(
633
643
  if address is not None:
634
644
  server_settings.address = address
635
645
 
636
- if COCOINDEX_HOST in cors_origins:
637
- click.echo(f"Open CocoInsight at: {COCOINDEX_HOST}/cocoinsight")
638
-
639
646
  if run_setup:
640
647
  _setup_flows(
641
648
  flow.flows().values(),
@@ -649,6 +656,9 @@ def _run_server(
649
656
 
650
657
  lib.start_server(server_settings)
651
658
 
659
+ if COCOINDEX_HOST in cors_origins:
660
+ click.echo(f"Open CocoInsight at: {COCOINDEX_HOST}/cocoinsight")
661
+
652
662
  click.secho("Press Ctrl+C to stop the server.", fg="yellow")
653
663
 
654
664
  shutdown_event = threading.Event()
@@ -416,6 +416,11 @@ class _SourceRefreshOptions:
416
416
  refresh_interval: datetime.timedelta | None = None
417
417
 
418
418
 
419
+ @dataclass
420
+ class _ExecutionOptions:
421
+ max_inflight_count: int | None = None
422
+
423
+
419
424
  class FlowBuilder:
420
425
  """
421
426
  A flow builder is used to build a flow.
@@ -439,6 +444,7 @@ class FlowBuilder:
439
444
  *,
440
445
  name: str | None = None,
441
446
  refresh_interval: datetime.timedelta | None = None,
447
+ max_inflight_count: int | None = None,
442
448
  ) -> DataSlice[T]:
443
449
  """
444
450
  Import a source to the flow.
@@ -454,9 +460,12 @@ class FlowBuilder:
454
460
  self._state.field_name_builder.build_name(
455
461
  name, prefix=_to_snake_case(_spec_kind(spec)) + "_"
456
462
  ),
457
- dump_engine_object(
463
+ refresh_options=dump_engine_object(
458
464
  _SourceRefreshOptions(refresh_interval=refresh_interval)
459
465
  ),
466
+ execution_options=dump_engine_object(
467
+ _ExecutionOptions(max_inflight_count=max_inflight_count)
468
+ ),
460
469
  ),
461
470
  name,
462
471
  )
@@ -0,0 +1,32 @@
1
+ """
2
+ Library level functions and states.
3
+ """
4
+
5
+ import warnings
6
+ from typing import Callable, Any
7
+
8
+ from . import _engine # type: ignore
9
+ from . import flow, setting
10
+ from .convert import dump_engine_object
11
+
12
+
13
+ def init(settings: setting.Settings | None = None) -> None:
14
+ """
15
+ Initialize the cocoindex library.
16
+
17
+ If the settings are not provided, they are loaded from the environment variables.
18
+ """
19
+ settings = settings or setting.Settings.from_env()
20
+ _engine.init(dump_engine_object(settings))
21
+ setting.set_app_namespace(settings.app_namespace)
22
+
23
+
24
+ def start_server(settings: setting.ServerSettings) -> None:
25
+ """Start the cocoindex server."""
26
+ flow.ensure_all_flows_built()
27
+ _engine.start_server(settings.__dict__)
28
+
29
+
30
+ def stop() -> None:
31
+ """Stop the cocoindex library."""
32
+ _engine.stop()
@@ -253,6 +253,11 @@ impl SpecFormatter for OpSpec {
253
253
  }
254
254
  }
255
255
 
256
+ #[derive(Debug, Clone, Serialize, Deserialize, Default)]
257
+ pub struct ExecutionOptions {
258
+ pub max_inflight_count: Option<u32>,
259
+ }
260
+
256
261
  #[derive(Debug, Clone, Serialize, Deserialize, Default)]
257
262
  pub struct SourceRefreshOptions {
258
263
  pub refresh_interval: Option<std::time::Duration>,
@@ -274,6 +279,9 @@ pub struct ImportOpSpec {
274
279
 
275
280
  #[serde(default)]
276
281
  pub refresh_options: SourceRefreshOptions,
282
+
283
+ #[serde(default)]
284
+ pub execution_options: ExecutionOptions,
277
285
  }
278
286
 
279
287
  impl SpecFormatter for ImportOpSpec {
@@ -697,6 +697,9 @@ impl AnalyzerContext {
697
697
  primary_key_type,
698
698
  name: op_name,
699
699
  refresh_options: import_op.spec.refresh_options,
700
+ concurrency_controller: utils::ConcurrencyController::new(
701
+ import_op.spec.execution_options.max_inflight_count,
702
+ ),
700
703
  })
701
704
  };
702
705
  Ok(result_fut)
@@ -288,7 +288,7 @@ impl FlowBuilder {
288
288
  OpScopeRef(self.root_op_scope.clone())
289
289
  }
290
290
 
291
- #[pyo3(signature = (kind, op_spec, target_scope, name, refresh_options=None))]
291
+ #[pyo3(signature = (kind, op_spec, target_scope, name, refresh_options=None, execution_options=None))]
292
292
  pub fn add_source(
293
293
  &mut self,
294
294
  py: Python<'_>,
@@ -297,6 +297,7 @@ impl FlowBuilder {
297
297
  target_scope: Option<OpScopeRef>,
298
298
  name: String,
299
299
  refresh_options: Option<py::Pythonized<spec::SourceRefreshOptions>>,
300
+ execution_options: Option<py::Pythonized<spec::ExecutionOptions>>,
300
301
  ) -> PyResult<DataSlice> {
301
302
  if let Some(target_scope) = target_scope {
302
303
  if *target_scope != self.root_op_scope {
@@ -313,6 +314,9 @@ impl FlowBuilder {
313
314
  spec: op_spec.into_inner(),
314
315
  },
315
316
  refresh_options: refresh_options.map(|o| o.into_inner()).unwrap_or_default(),
317
+ execution_options: execution_options
318
+ .map(|o| o.into_inner())
319
+ .unwrap_or_default(),
316
320
  },
317
321
  };
318
322
  let analyzer_ctx = AnalyzerContext {
@@ -56,6 +56,7 @@ pub struct AnalyzedImportOp {
56
56
  pub output: AnalyzedOpOutput,
57
57
  pub primary_key_type: schema::ValueType,
58
58
  pub refresh_options: spec::SourceRefreshOptions,
59
+ pub concurrency_controller: utils::ConcurrencyController,
59
60
  }
60
61
 
61
62
  pub struct AnalyzedFunctionExecInfo {
@@ -282,6 +282,7 @@ impl SourceIndexingContext {
282
282
  state.scan_generation
283
283
  };
284
284
  while let Some(row) = rows_stream.next().await {
285
+ let _ = import_op.concurrency_controller.acquire().await?;
285
286
  for row in row? {
286
287
  self.process_source_key_if_newer(
287
288
  row.key,
@@ -918,16 +918,14 @@ impl SimpleFunctionExecutor for Executor {
918
918
  let table = output
919
919
  .into_iter()
920
920
  .map(|chunk_output| {
921
+ let output_start = chunk_output.start_pos.output.unwrap();
922
+ let output_end = chunk_output.end_pos.output.unwrap();
921
923
  (
922
- RangeValue::new(
923
- chunk_output.start_pos.byte_offset,
924
- chunk_output.end_pos.byte_offset,
925
- )
926
- .into(),
924
+ RangeValue::new(output_start.char_offset, output_end.char_offset).into(),
927
925
  fields_value!(
928
926
  Arc::<str>::from(chunk_output.text),
929
- chunk_output.start_pos.output.unwrap().into_output(),
930
- chunk_output.end_pos.output.unwrap().into_output()
927
+ output_start.into_output(),
928
+ output_end.into_output()
931
929
  )
932
930
  .into(),
933
931
  )
@@ -197,8 +197,7 @@ impl ExportContext {
197
197
  .map(|f| format!("\"{}\"", f.name))
198
198
  .collect::<Vec<_>>()
199
199
  .join(", ");
200
- let value_fields = value_fields_schema
201
- .iter()
200
+ let all_fields = (key_fields_schema.iter().chain(value_fields_schema.iter()))
202
201
  .map(|f| format!("\"{}\"", f.name))
203
202
  .collect::<Vec<_>>()
204
203
  .join(", ");
@@ -211,15 +210,15 @@ impl ExportContext {
211
210
  Ok(Self {
212
211
  db_ref,
213
212
  db_pool,
213
+ upsert_sql_prefix: format!("INSERT INTO {table_name} ({all_fields}) VALUES "),
214
+ upsert_sql_suffix: if value_fields_schema.is_empty() {
215
+ format!(" ON CONFLICT ({key_fields}) DO NOTHING;")
216
+ } else {
217
+ format!(" ON CONFLICT ({key_fields}) DO UPDATE SET {set_value_fields};")
218
+ },
219
+ delete_sql_prefix: format!("DELETE FROM {table_name} WHERE "),
214
220
  key_fields_schema,
215
221
  value_fields_schema,
216
- upsert_sql_prefix: format!(
217
- "INSERT INTO {table_name} ({key_fields}, {value_fields}) VALUES "
218
- ),
219
- upsert_sql_suffix: format!(
220
- " ON CONFLICT ({key_fields}) DO UPDATE SET {set_value_fields};"
221
- ),
222
- delete_sql_prefix: format!("DELETE FROM {table_name} WHERE "),
223
222
  })
224
223
  }
225
224
  }
@@ -0,0 +1,30 @@
1
+ use crate::prelude::*;
2
+
3
+ use tokio::sync::{Semaphore, SemaphorePermit};
4
+
5
+ pub struct ConcurrencyController {
6
+ inflight_count_sem: Option<Semaphore>,
7
+ }
8
+
9
+ pub struct ConcurrencyControllerPermit<'a> {
10
+ _inflight_count_permit: Option<SemaphorePermit<'a>>,
11
+ }
12
+
13
+ impl ConcurrencyController {
14
+ pub fn new(max_inflight_count: Option<u32>) -> Self {
15
+ Self {
16
+ inflight_count_sem: max_inflight_count.map(|max| Semaphore::new(max as usize)),
17
+ }
18
+ }
19
+
20
+ pub async fn acquire<'a>(&'a self) -> Result<ConcurrencyControllerPermit<'a>> {
21
+ let inflight_count_permit = if let Some(sem) = &self.inflight_count_sem {
22
+ Some(sem.acquire().await?)
23
+ } else {
24
+ None
25
+ };
26
+ Ok(ConcurrencyControllerPermit {
27
+ _inflight_count_permit: inflight_count_permit,
28
+ })
29
+ }
30
+ }
@@ -3,3 +3,6 @@ pub mod fingerprint;
3
3
  pub mod immutable;
4
4
  pub mod retryable;
5
5
  pub mod yaml_ser;
6
+
7
+ mod concur_control;
8
+ pub use concur_control::ConcurrencyController;
@@ -1,9 +0,0 @@
1
- {
2
- "cSpell.words": [
3
- "cocoindex",
4
- "reindexing",
5
- "timedelta"
6
- ],
7
- "editor.formatOnSave": true,
8
- "python.formatting.provider": "ruff"
9
- }
@@ -1,75 +0,0 @@
1
- """
2
- Library level functions and states.
3
- """
4
-
5
- import warnings
6
- from typing import Callable, Any
7
-
8
- from . import _engine # type: ignore
9
- from . import flow, setting
10
- from .convert import dump_engine_object
11
-
12
-
13
- def init(settings: setting.Settings | None = None) -> None:
14
- """
15
- Initialize the cocoindex library.
16
-
17
- If the settings are not provided, they are loaded from the environment variables.
18
- """
19
- settings = settings or setting.Settings.from_env()
20
- _engine.init(dump_engine_object(settings))
21
- setting.set_app_namespace(settings.app_namespace)
22
-
23
-
24
- def start_server(settings: setting.ServerSettings) -> None:
25
- """Start the cocoindex server."""
26
- flow.ensure_all_flows_built()
27
- _engine.start_server(settings.__dict__)
28
-
29
-
30
- def stop() -> None:
31
- """Stop the cocoindex library."""
32
- _engine.stop()
33
-
34
-
35
- def main_fn(
36
- settings: Any | None = None,
37
- cocoindex_cmd: str | None = None,
38
- ) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
39
- """
40
- DEPRECATED: The @cocoindex.main_fn() decorator is obsolete and has no effect.
41
- It will be removed in a future version, which will cause an AttributeError.
42
-
43
- Please remove this decorator from your code and use the standalone 'cocoindex' CLI.
44
- See the updated CLI usage examples in the warning message.
45
- """
46
- warnings.warn(
47
- "\n\n"
48
- "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
49
- "CRITICAL DEPRECATION NOTICE from CocoIndex:\n"
50
- "The @cocoindex.main_fn() decorator in your script is DEPRECATED and IGNORED.\n"
51
- "It provides NO functionality and will be REMOVED entirely in a future version.\n"
52
- "If not removed, your script will FAIL with an AttributeError in the future.\n\n"
53
- "ACTION REQUIRED: Please REMOVE @cocoindex.main_fn() from your Python script.\n\n"
54
- "To use CocoIndex, invoke the standalone 'cocoindex' CLI."
55
- " Examples of new CLI usage:\n\n"
56
- " To list flows from 'main.py' (previously 'python main.py cocoindex ls'):\n"
57
- " cocoindex ls main.py\n\n"
58
- " To list all persisted flows (previously 'python main.py cocoindex ls --all'):\n"
59
- " cocoindex ls\n\n"
60
- " To show 'MyFlow' defined in 'main.py' (previously 'python main.py cocoindex show MyFlow'):\n"
61
- " cocoindex show main.py:MyFlow\n\n"
62
- " To update all flows in 'my_package.flows_module':\n"
63
- " cocoindex update my_package.flows_module\n\n"
64
- " To update 'SpecificFlow' in 'my_package.flows_module':\n"
65
- " cocoindex update my_package.flows_module:SpecificFlow\n\n"
66
- "See cocoindex <command> --help for more details.\n"
67
- "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n",
68
- DeprecationWarning,
69
- stacklevel=2,
70
- )
71
-
72
- def _main_wrapper(fn: Callable[..., Any]) -> Callable[..., Any]:
73
- return fn
74
-
75
- return _main_wrapper
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes