OperonDBS 0.7.2__tar.gz → 0.8.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. {operondbs-0.7.2 → operondbs-0.8.2}/.github/workflows/publish.yml +3 -2
  2. operondbs-0.8.2/.github/workflows/test.yml +52 -0
  3. {operondbs-0.7.2 → operondbs-0.8.2}/.gitignore +7 -1
  4. {operondbs-0.7.2 → operondbs-0.8.2}/AGENTS.md +93 -19
  5. {operondbs-0.7.2 → operondbs-0.8.2}/MANIFEST.in +2 -1
  6. {operondbs-0.7.2 → operondbs-0.8.2}/OperonDBS.egg-info/PKG-INFO +16 -13
  7. {operondbs-0.7.2 → operondbs-0.8.2}/OperonDBS.egg-info/SOURCES.txt +50 -3
  8. {operondbs-0.7.2 → operondbs-0.8.2}/OperonDBS.egg-info/requires.txt +7 -4
  9. {operondbs-0.7.2 → operondbs-0.8.2}/PKG-INFO +16 -13
  10. {operondbs-0.7.2 → operondbs-0.8.2}/README.md +8 -3
  11. {operondbs-0.7.2 → operondbs-0.8.2}/README_ZH.md +8 -3
  12. {operondbs-0.7.2 → operondbs-0.8.2}/docs/conf.py +1 -1
  13. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/extensibility.md +2 -2
  14. operondbs-0.8.2/docs/en/architecture/external-analysis.md +63 -0
  15. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/files-and-storage.md +4 -4
  16. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/metadata-and-data-model.md +1 -12
  17. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/overview.md +23 -4
  18. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/qc-and-rules.md +2 -0
  19. operondbs-0.8.2/docs/en/contributor/defect-tracking.md +71 -0
  20. operondbs-0.8.2/docs/en/contributor/development-testing.md +110 -0
  21. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/contributor/index.md +2 -0
  22. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/contributor/repository-guide.md +2 -6
  23. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/getting-started/first-project.md +29 -27
  24. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/getting-started/quickstart.md +1 -9
  25. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/backup-migration.md +4 -16
  26. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/curation-lifecycle.md +1 -1
  27. operondbs-0.8.2/docs/en/guides/external-analysis.md +328 -0
  28. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/file-archiving.md +2 -13
  29. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/index.md +4 -0
  30. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/metadata-import.md +3 -1
  31. operondbs-0.8.2/docs/en/guides/phylogenetics-workflow.md +202 -0
  32. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/qc-profiles.md +72 -1
  33. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/remote-execution.md +4 -3
  34. operondbs-0.8.2/docs/en/guides/remote-first.md +138 -0
  35. operondbs-0.8.2/docs/en/guides/remote-storage.md +70 -0
  36. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/index.md +2 -7
  37. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/operations/database-compatibility.md +5 -1
  38. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/operations/qc-performance.md +6 -3
  39. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/overview.md +1 -11
  40. operondbs-0.8.2/docs/en/reference/behaviors-and-limitations.md +279 -0
  41. operondbs-0.8.2/docs/en/reference/cli-analysis.md +215 -0
  42. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-decisions-reports.md +33 -7
  43. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-files-qc.md +37 -3
  44. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-project-metadata.md +45 -0
  45. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-remote.md +3 -2
  46. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-taxonomy-lifecycle-admin.md +2 -0
  47. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-tui.md +47 -7
  48. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/cli-workflow.md +24 -3
  49. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/data-model.md +30 -17
  50. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/index.md +2 -0
  51. operondbs-0.8.2/docs/en/reference/recipe-fields.md +468 -0
  52. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/recipe-overview.md +6 -4
  53. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/reference/recipe-parsers-examples.md +164 -8
  54. operondbs-0.8.2/docs/en/reference/resolved-issues.md +58 -0
  55. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/extensibility.md +7 -2
  56. operondbs-0.8.2/docs/zh/architecture/external-analysis.md +176 -0
  57. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/files-and-storage.md +9 -11
  58. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/index.md +1 -1
  59. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/metadata-and-data-model.md +4 -31
  60. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/overview.md +23 -4
  61. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/qc-and-rules.md +5 -0
  62. operondbs-0.8.2/docs/zh/contributor/defect-tracking.md +55 -0
  63. operondbs-0.8.2/docs/zh/contributor/development-testing.md +110 -0
  64. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/contributor/index.md +2 -0
  65. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/contributor/repository-guide.md +2 -6
  66. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/getting-started/first-project.md +38 -58
  67. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/getting-started/quickstart.md +5 -11
  68. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/backup-migration.md +7 -14
  69. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/curation-lifecycle.md +4 -2
  70. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/external-analysis.md +127 -94
  71. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/file-archiving.md +7 -16
  72. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/index.md +4 -0
  73. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/metadata-import.md +7 -6
  74. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/ncbi-datasets.md +6 -6
  75. operondbs-0.8.2/docs/zh/guides/phylogenetics-workflow.md +244 -0
  76. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/qc-profiles.md +99 -1
  77. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/remote-execution.md +21 -6
  78. operondbs-0.8.2/docs/zh/guides/remote-first.md +169 -0
  79. operondbs-0.8.2/docs/zh/guides/remote-storage.md +82 -0
  80. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/taxonomy-coverage.md +5 -3
  81. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/index.md +2 -7
  82. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/operations/database-compatibility.md +19 -2
  83. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/operations/qc-performance.md +10 -5
  84. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/overview.md +2 -12
  85. operondbs-0.8.2/docs/zh/reference/behaviors-and-limitations.md +276 -0
  86. operondbs-0.8.2/docs/zh/reference/cli-analysis.md +341 -0
  87. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-decisions-reports.md +68 -9
  88. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-files-qc.md +50 -8
  89. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-project-metadata.md +45 -0
  90. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-remote.md +8 -1
  91. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-taxonomy-lifecycle-admin.md +4 -0
  92. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-tui.md +38 -7
  93. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/cli-workflow.md +16 -2
  94. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/data-model.md +60 -40
  95. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/index.md +2 -0
  96. operondbs-0.8.2/docs/zh/reference/recipe-fields.md +558 -0
  97. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/recipe-overview.md +9 -4
  98. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/reference/recipe-parsers-examples.md +209 -7
  99. operondbs-0.8.2/docs/zh/reference/resolved-issues.md +50 -0
  100. {operondbs-0.7.2 → operondbs-0.8.2}/operon/adapters/ncbi_datasets.py +31 -28
  101. operondbs-0.8.2/operon/adapters/timetree.py +377 -0
  102. operondbs-0.8.2/operon/classify.py +541 -0
  103. {operondbs-0.7.2 → operondbs-0.8.2}/operon/cli.py +653 -32
  104. {operondbs-0.7.2 → operondbs-0.8.2}/operon/coverage.py +3 -3
  105. {operondbs-0.7.2 → operondbs-0.8.2}/operon/database.py +221 -63
  106. {operondbs-0.7.2 → operondbs-0.8.2}/operon/demo.py +1 -1
  107. {operondbs-0.7.2 → operondbs-0.8.2}/operon/entity_view.py +24 -9
  108. operondbs-0.8.2/operon/environment.py +222 -0
  109. operondbs-0.8.2/operon/environment_capture.py +304 -0
  110. {operondbs-0.7.2 → operondbs-0.8.2}/operon/errors.py +9 -0
  111. {operondbs-0.7.2 → operondbs-0.8.2}/operon/execution.py +626 -61
  112. {operondbs-0.7.2 → operondbs-0.8.2}/operon/export.py +66 -31
  113. operondbs-0.8.2/operon/fanout.py +385 -0
  114. {operondbs-0.7.2 → operondbs-0.8.2}/operon/files.py +40 -12
  115. {operondbs-0.7.2 → operondbs-0.8.2}/operon/import_wizard.py +3 -1
  116. {operondbs-0.7.2 → operondbs-0.8.2}/operon/lifecycle.py +5 -5
  117. {operondbs-0.7.2/operon/qc_module → operondbs-0.8.2/operon/qc}/__init__.py +98 -89
  118. operondbs-0.8.2/operon/qc/_alignment.pyx +185 -0
  119. operondbs-0.8.2/operon/qc/alignment.py +176 -0
  120. operondbs-0.8.2/operon/qc/measure.py +239 -0
  121. {operondbs-0.7.2 → operondbs-0.8.2}/operon/release.py +33 -6
  122. {operondbs-0.7.2 → operondbs-0.8.2}/operon/remotes.py +114 -43
  123. {operondbs-0.7.2 → operondbs-0.8.2}/operon/rules.py +7 -6
  124. operondbs-0.8.2/operon/sequence_tools.py +477 -0
  125. operondbs-0.8.2/operon/sql.py +18 -0
  126. {operondbs-0.7.2 → operondbs-0.8.2}/operon/table_import.py +8 -3
  127. {operondbs-0.7.2 → operondbs-0.8.2}/operon/taxonomy.py +6 -6
  128. operondbs-0.8.2/operon/timetree.py +489 -0
  129. operondbs-0.8.2/operon/tools.py +2788 -0
  130. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/actions.py +30 -8
  131. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/data.py +59 -18
  132. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/common.py +14 -4
  133. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/config.py +36 -15
  134. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/files_ops.py +51 -3
  135. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/import_wizard.py +78 -22
  136. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/publish.py +11 -3
  137. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/runs.py +1 -0
  138. {operondbs-0.7.2 → operondbs-0.8.2}/operon/workflow.py +271 -11
  139. {operondbs-0.7.2 → operondbs-0.8.2}/pyproject.toml +24 -17
  140. {operondbs-0.7.2 → operondbs-0.8.2}/setup.py +4 -1
  141. {operondbs-0.7.2 → operondbs-0.8.2}/tests/compatibility/test_python_support.py +24 -3
  142. operondbs-0.8.2/tests/integration/test_analysis_array.py +774 -0
  143. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_analysis_shutdown.py +25 -0
  144. operondbs-0.8.2/tests/integration/test_analysis_tools.py +1064 -0
  145. operondbs-0.8.2/tests/integration/test_classify_sequences.py +251 -0
  146. operondbs-0.8.2/tests/integration/test_fanout_analyze.py +175 -0
  147. operondbs-0.8.2/tests/integration/test_python_packaging.py +169 -0
  148. operondbs-0.8.2/tests/integration/test_qc_remote_measure.py +69 -0
  149. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_taxonomy_coverage.py +1 -1
  150. {operondbs-0.7.2 → operondbs-0.8.2}/tests/regression/test_correctness.py +1 -1
  151. operondbs-0.8.2/tests/regression/test_cython_alignment_parity.py +151 -0
  152. {operondbs-0.7.2 → operondbs-0.8.2}/tests/regression/test_cython_parser_parity.py +4 -4
  153. {operondbs-0.7.2 → operondbs-0.8.2}/tests/regression/test_parser_semantics.py +2 -2
  154. operondbs-0.8.2/tests/regression/test_sql_identifier_security.py +124 -0
  155. operondbs-0.8.2/tests/unit/test_alignment_qc.py +285 -0
  156. operondbs-0.8.2/tests/unit/test_classify.py +616 -0
  157. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_cli_edges.py +14 -10
  158. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_config_workflow_edges.py +50 -9
  159. operondbs-0.8.2/tests/unit/test_core_coverage_more.py +2037 -0
  160. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_coverage_edges.py +0 -1
  161. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_database_edges_more.py +24 -8
  162. operondbs-0.8.2/tests/unit/test_defect_registry.py +121 -0
  163. operondbs-0.8.2/tests/unit/test_defects_cli.py +150 -0
  164. operondbs-0.8.2/tests/unit/test_environment.py +296 -0
  165. operondbs-0.8.2/tests/unit/test_environment_capture.py +398 -0
  166. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_execution.py +394 -41
  167. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_execution_edges.py +321 -16
  168. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_export.py +62 -0
  169. operondbs-0.8.2/tests/unit/test_fanout.py +400 -0
  170. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_files_edges.py +115 -6
  171. operondbs-0.8.2/tests/unit/test_follow.py +265 -0
  172. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_import_backup_show.py +0 -22
  173. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_lifecycle.py +3 -17
  174. operondbs-0.8.2/tests/unit/test_misc_coverage_more.py +1552 -0
  175. operondbs-0.8.2/tests/unit/test_ncbi_coverage_gaps.py +1517 -0
  176. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_parser_edge_paths.py +1 -1
  177. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_qc_and_rules.py +45 -18
  178. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_qc_edges_more.py +15 -6
  179. operondbs-0.8.2/tests/unit/test_qc_measure.py +434 -0
  180. operondbs-0.8.2/tests/unit/test_qc_remote_only.py +141 -0
  181. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_recipe_history.py +0 -12
  182. operondbs-0.8.2/tests/unit/test_remote_taxonomy_more.py +1507 -0
  183. operondbs-0.8.2/tests/unit/test_remote_transport_edges.py +254 -0
  184. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_remotes.py +14 -22
  185. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_remotes_edges.py +2 -1
  186. operondbs-0.8.2/tests/unit/test_schema_2_10.py +79 -0
  187. operondbs-0.8.2/tests/unit/test_schema_2_11.py +62 -0
  188. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_schema_2_9.py +1 -2
  189. operondbs-0.8.2/tests/unit/test_sequence_tools.py +350 -0
  190. operondbs-0.8.2/tests/unit/test_sequences.py +168 -0
  191. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_support_edges.py +13 -2
  192. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_taxonomy_edges.py +18 -30
  193. operondbs-0.8.2/tests/unit/test_timetree.py +518 -0
  194. operondbs-0.8.2/tests/unit/test_timetree_snapshots.py +938 -0
  195. operondbs-0.8.2/tests/unit/test_tools_edges.py +1077 -0
  196. operondbs-0.8.2/tests/unit/test_tools_execution_more.py +1254 -0
  197. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_tui.py +94 -19
  198. operondbs-0.8.2/tests/unit/test_tui_config.py +1700 -0
  199. operondbs-0.8.2/tests/unit/test_tui_flows_more.py +1126 -0
  200. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_tui_publish.py +216 -9
  201. operondbs-0.8.2/tests/unit/test_tui_screens_more.py +1663 -0
  202. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_tui_writes.py +120 -8
  203. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_views_release_reports_edges.py +64 -27
  204. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_workflow_cli.py +41 -0
  205. operondbs-0.7.2/.github/workflows/test.yml +0 -27
  206. operondbs-0.7.2/docs/en/architecture/external-analysis.md +0 -47
  207. operondbs-0.7.2/docs/en/contributor/development-testing.md +0 -48
  208. operondbs-0.7.2/docs/en/guides/external-analysis.md +0 -262
  209. operondbs-0.7.2/docs/en/guides/remote-storage.md +0 -113
  210. operondbs-0.7.2/docs/en/reference/behaviors-and-limitations.md +0 -192
  211. operondbs-0.7.2/docs/en/reference/cli-analysis.md +0 -111
  212. operondbs-0.7.2/docs/en/reference/recipe-fields.md +0 -328
  213. operondbs-0.7.2/docs/zh/architecture/external-analysis.md +0 -114
  214. operondbs-0.7.2/docs/zh/contributor/development-testing.md +0 -57
  215. operondbs-0.7.2/docs/zh/guides/remote-storage.md +0 -130
  216. operondbs-0.7.2/docs/zh/reference/behaviors-and-limitations.md +0 -190
  217. operondbs-0.7.2/docs/zh/reference/cli-analysis.md +0 -152
  218. operondbs-0.7.2/docs/zh/reference/recipe-fields.md +0 -364
  219. operondbs-0.7.2/operon/environment.py +0 -92
  220. operondbs-0.7.2/operon/tools.py +0 -1537
  221. operondbs-0.7.2/tests/integration/test_analysis_tools.py +0 -492
  222. operondbs-0.7.2/tests/integration/test_python_packaging.py +0 -131
  223. operondbs-0.7.2/tests/unit/test_environment.py +0 -121
  224. operondbs-0.7.2/tests/unit/test_tools_edges.py +0 -361
  225. operondbs-0.7.2/tests/unit/test_tui_config.py +0 -683
  226. {operondbs-0.7.2 → operondbs-0.8.2}/.readthedocs.yaml +0 -0
  227. {operondbs-0.7.2 → operondbs-0.8.2}/LICENSE +0 -0
  228. {operondbs-0.7.2 → operondbs-0.8.2}/OperonDBS.egg-info/dependency_links.txt +0 -0
  229. {operondbs-0.7.2 → operondbs-0.8.2}/OperonDBS.egg-info/entry_points.txt +0 -0
  230. {operondbs-0.7.2 → operondbs-0.8.2}/OperonDBS.egg-info/top_level.txt +0 -0
  231. {operondbs-0.7.2 → operondbs-0.8.2}/benchmarks/qc_representative_entities.tsv +0 -0
  232. {operondbs-0.7.2 → operondbs-0.8.2}/docs/_static/language-switcher.js +0 -0
  233. {operondbs-0.7.2 → operondbs-0.8.2}/docs/_static/operon.css +0 -0
  234. {operondbs-0.7.2 → operondbs-0.8.2}/docs/_templates/layout.html +0 -0
  235. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/index.md +0 -0
  236. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/release-lifecycle.md +0 -0
  237. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/architecture/taxonomy-coverage.md +0 -0
  238. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/contributor/documentation-deployment.md +0 -0
  239. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/contributor/pypi-release.md +0 -0
  240. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/getting-started/daily-workflow.md +0 -0
  241. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/getting-started/index.md +0 -0
  242. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/getting-started/installation.md +0 -0
  243. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/ncbi-datasets.md +0 -0
  244. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/taxonomy-coverage.md +0 -0
  245. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/guides/troubleshooting.md +0 -0
  246. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/operations/index.md +0 -0
  247. {operondbs-0.7.2 → operondbs-0.8.2}/docs/en/operations/ncbi-recovery-migration.md +0 -0
  248. {operondbs-0.7.2 → operondbs-0.8.2}/docs/index.md +0 -0
  249. {operondbs-0.7.2 → operondbs-0.8.2}/docs/requirements.txt +0 -0
  250. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/release-lifecycle.md +0 -0
  251. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/architecture/taxonomy-coverage.md +0 -0
  252. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/contributor/documentation-deployment.md +0 -0
  253. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/contributor/pypi-release.md +0 -0
  254. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/getting-started/daily-workflow.md +0 -0
  255. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/getting-started/index.md +0 -0
  256. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/getting-started/installation.md +0 -0
  257. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/guides/troubleshooting.md +0 -0
  258. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/operations/index.md +0 -0
  259. {operondbs-0.7.2 → operondbs-0.8.2}/docs/zh/operations/ncbi-recovery-migration.md +0 -0
  260. {operondbs-0.7.2 → operondbs-0.8.2}/operon/__init__.py +0 -0
  261. {operondbs-0.7.2 → operondbs-0.8.2}/operon/__main__.py +0 -0
  262. {operondbs-0.7.2 → operondbs-0.8.2}/operon/adapters/__init__.py +0 -0
  263. {operondbs-0.7.2 → operondbs-0.8.2}/operon/backup.py +0 -0
  264. {operondbs-0.7.2 → operondbs-0.8.2}/operon/config.py +0 -0
  265. {operondbs-0.7.2 → operondbs-0.8.2}/operon/lineage.py +0 -0
  266. {operondbs-0.7.2 → operondbs-0.8.2}/operon/metadata_files.py +0 -0
  267. {operondbs-0.7.2 → operondbs-0.8.2}/operon/ncbi_reconcile.py +0 -0
  268. {operondbs-0.7.2 → operondbs-0.8.2}/operon/profiles.py +0 -0
  269. {operondbs-0.7.2/operon/qc_module → operondbs-0.8.2/operon/qc}/_parsers.pyx +0 -0
  270. {operondbs-0.7.2/operon/qc_module → operondbs-0.8.2/operon/qc}/parsers.py +0 -0
  271. {operondbs-0.7.2 → operondbs-0.8.2}/operon/reports.py +0 -0
  272. {operondbs-0.7.2 → operondbs-0.8.2}/operon/schema.py +0 -0
  273. {operondbs-0.7.2 → operondbs-0.8.2}/operon/shutdown.py +0 -0
  274. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/__init__.py +0 -0
  275. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/app.py +0 -0
  276. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/app.tcss +0 -0
  277. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/assets/splash.png +0 -0
  278. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/assets/splash.rgb.z +0 -0
  279. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/__init__.py +0 -0
  280. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/coverage.py +0 -0
  281. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/decisions.py +0 -0
  282. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/entities.py +0 -0
  283. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/files.py +0 -0
  284. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/screens/home.py +0 -0
  285. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/splash.py +0 -0
  286. {operondbs-0.7.2 → operondbs-0.8.2}/operon/tui/splash_terminal.py +0 -0
  287. {operondbs-0.7.2 → operondbs-0.8.2}/operon/utils.py +0 -0
  288. {operondbs-0.7.2 → operondbs-0.8.2}/setup.cfg +0 -0
  289. {operondbs-0.7.2 → operondbs-0.8.2}/tests/__init__.py +0 -0
  290. {operondbs-0.7.2 → operondbs-0.8.2}/tests/compatibility/__init__.py +0 -0
  291. {operondbs-0.7.2 → operondbs-0.8.2}/tests/helpers.py +0 -0
  292. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/__init__.py +0 -0
  293. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_analysis_resume.py +0 -0
  294. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_execution_backends.py +0 -0
  295. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_lineage_cascade.py +0 -0
  296. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_ncbi_datasets_adapter.py +0 -0
  297. {operondbs-0.7.2 → operondbs-0.8.2}/tests/integration/test_pipeline_and_release.py +0 -0
  298. {operondbs-0.7.2 → operondbs-0.8.2}/tests/regression/__init__.py +0 -0
  299. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/__init__.py +0 -0
  300. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_docs_versions.py +0 -0
  301. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_import_wizard_edges.py +0 -0
  302. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_lineage.py +0 -0
  303. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_ncbi_edge_cases.py +0 -0
  304. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_ncbi_reconcile_edges.py +0 -0
  305. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_rules_schema_edges.py +0 -0
  306. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_schema_and_metadata.py +0 -0
  307. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_shutdown.py +0 -0
  308. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_table_import_edges.py +0 -0
  309. {operondbs-0.7.2 → operondbs-0.8.2}/tests/unit/test_tui_splash_terminal.py +0 -0
@@ -71,10 +71,11 @@ jobs:
71
71
  - run: python -m cibuildwheel --output-dir wheelhouse
72
72
  env:
73
73
  CIBW_ARCHS: ${{ matrix.architecture }}
74
- CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-*"
74
+ CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-* cp315-*"
75
75
  CIBW_SKIP: "*-musllinux_*"
76
76
  CIBW_TEST_COMMAND: >-
77
- python -c "import operon; import operon.qc_module._parsers;
77
+ python -c "import operon; import operon.qc._parsers;
78
+ import operon.qc._alignment;
78
79
  print(operon.__version__)" && operon --help
79
80
  - uses: actions/upload-artifact@v7
80
81
  with:
@@ -0,0 +1,52 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+
9
+ # A newer push supersedes an in-flight run of the same ref.
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ # Documentation is cheap to build and independent of the test matrix, so it
16
+ # runs as its own job in parallel instead of gating the ten test jobs.
17
+ docs:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v6
21
+ - uses: actions/setup-python@v7
22
+ with:
23
+ python-version: "3.12"
24
+ cache: pip
25
+ cache-dependency-path: pyproject.toml
26
+ - run: python -m pip install --upgrade pip
27
+ - run: python -m pip install -e '.[docs]'
28
+ - run: sphinx-build -W --keep-going -b html docs docs/_build/html
29
+
30
+ pytest:
31
+ strategy:
32
+ fail-fast: false
33
+ matrix:
34
+ os: [ ubuntu-latest, macos-latest ]
35
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
36
+ runs-on: ${{ matrix.os }}
37
+ steps:
38
+ - uses: actions/checkout@v6
39
+ - uses: actions/setup-python@v7
40
+ with:
41
+ allow-prereleases: true
42
+ check-latest: true
43
+ python-version: ${{ matrix.python-version }}
44
+ cache: pip
45
+ cache-dependency-path: pyproject.toml
46
+ - run: |
47
+ python -m pip install --upgrade pip
48
+ python -m pip install -e '.[test]'
49
+ python -m pytest
50
+ - uses: codacy/codacy-coverage-reporter-action@v1.3.0
51
+ with:
52
+ project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
@@ -5,7 +5,8 @@ dist/
5
5
  __pycache__/
6
6
  *.py[cod]
7
7
  *.so
8
- operon/qc_module/_parsers.c
8
+ operon/qc/_parsers.c
9
+ operon/qc/_alignment.c
9
10
  *.egg-info/
10
11
  *.sqlite
11
12
  *.sqlite-wal
@@ -14,6 +15,7 @@ logs/
14
15
  raw/
15
16
  standardized/
16
17
  qc/
18
+ !operon/qc/
17
19
  analysis/
18
20
  reports/
19
21
  releases/
@@ -26,3 +28,7 @@ junit.xml
26
28
  htmlcov/
27
29
  /site/
28
30
  /docs/_build/
31
+ /workflows/
32
+ /HPC/
33
+ .matrix/
34
+ cobertura.xml
@@ -26,8 +26,8 @@ principle-to-implementation mapping.
26
26
 
27
27
  Current version markers (must stay consistent across code and docs):
28
28
 
29
- - `operon` 0.7.0 (`pyproject.toml`)
30
- - database schema 2.9 (`operon/database.py`, `SCHEMA_VERSION`)
29
+ - `operon` 0.8.2 (`pyproject.toml`)
30
+ - database schema 2.11 (`operon/database.py`, `SCHEMA_VERSION`)
31
31
  - metadata schema 1.4 (`operon/schema.py`, `METADATA_SCHEMA_VERSION`)
32
32
 
33
33
  The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
@@ -36,17 +36,27 @@ The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
36
36
 
37
37
  - `operon/` — the Python package (CLI entry points: `operon/cli.py`,
38
38
  `operon/__main__.py`; console script `operon = operon.cli:main`).
39
- - `operon/adapters/` — external source adapters (currently NCBI Datasets,
40
- offline-first: JSON/JSONL, ZIP, or unpacked directories, plus optional
41
- online download).
42
- - `operon/qc_module/` — streaming FASTA/FASTQ/GFF3/protein parsers and
43
- built-in QC stages. `parsers.py` is the pure-Python reference
39
+ - `operon/adapters/` — external source adapters: NCBI Datasets
40
+ (offline-first: JSON/JSONL, ZIP, or unpacked directories, plus optional
41
+ online download) and TimeTree (query-cache-only REST client caching the
42
+ verbatim responses of exact queries under `adapters_cache/timetree/`;
43
+ mirroring or redistribution is forbidden by TimeTree's terms).
44
+ - `operon/qc/` — home for all QC functionality: streaming
45
+ FASTA/FASTQ/GFF3/protein parsers and built-in QC stages, plus alignment
46
+ QC (`alignment.py`, the pure-Python multiple-alignment QC reference
47
+ implementation behind `operon alignment-qc`, and `_alignment.pyx`, its
48
+ Cython production backend; parity enforced by
49
+ `tests/regression/test_cython_alignment_parity.py`). `parsers.py` is the
50
+ pure-Python reference
44
51
  implementation; `_parsers.pyx` is the Cython-accelerated build of the
45
- same API (compiled in place as `operon.qc_module._parsers`). The Cython
52
+ same API (compiled in place as `operon.qc._parsers`). The Cython
46
53
  module is the required production backend; the pure-Python module is the
47
54
  behavioral reference used by regression tests. Both must produce
48
55
  identical metrics and error messages (enforced by
49
- `tests/regression/test_cython_parser_parity.py`).
56
+ `tests/regression/test_cython_parser_parity.py`). `measure.py` backs
57
+ `operon qc-measure`, a project-independent measurement-only path whose
58
+ JSON payload can be imported back through `operon import-qc` (the remote
59
+ built-in QC workflow).
50
60
  - `operon/execution.py` — execution backends for external commands:
51
61
  `local` subprocess, `slurm` (sbatch submit + squeue poll), and `ssh`
52
62
  (Paramiko; HPC head nodes and cloud VMs, optionally through remote
@@ -96,9 +106,18 @@ The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
96
106
  NCBI Taxonomy snapshots and coverage denominators), `release.py` +
97
107
  `export.py` (immutable releases and selective exports), `lifecycle.py`
98
108
  (audited reversible entity retirement), `lineage.py` (adopting external
99
- workflow outputs), `backup.py`, `reports.py`, `table_import.py`,
109
+ workflow outputs), `sequence_tools.py` (alignment-driven domain
110
+ extraction and sequence selection), `classify.py` (versioned
111
+ sequence_classification profiles labelling `sequence_labels`),
112
+ `fanout.py` (data-derived fan-out of registered sequence files into
113
+ per-unit FASTAs under `analysis/derived/`, selected downstream by recipe
114
+ `file_role_prefix`), `timetree.py` (TimeTree query/calibration CLI
115
+ group backed by the query-cache adapter), `backup.py`, `reports.py`,
116
+ `table_import.py`,
100
117
  `import_wizard.py`, `entity_view.py`, `environment.py`
101
- (execution-environment capture), `shutdown.py` (graceful SIGINT/SIGTERM
118
+ (execution-environment capture with at-capture redaction; recipe
119
+ `environment_policy` governs environment-aware cache reuse),
120
+ `shutdown.py` (graceful SIGINT/SIGTERM
102
121
  handling), `ncbi_reconcile.py` (development-era adapter anomaly repair),
103
122
  `demo.py` (deterministic synthetic demo project), `errors.py`,
104
123
  `utils.py`.
@@ -112,6 +131,11 @@ The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
112
131
  (`.readthedocs.yaml`).
113
132
  - `benchmarks/` — representative entity sets for QC performance diagnostics
114
133
  (see `docs/*/operations/qc-performance.md`).
134
+ - `scripts/` — local developer tooling; `setup-test-matrix.sh` and
135
+ `run-test-matrix.sh` build and drive the uv-managed Python 3.10–3.14
136
+ matrix under .matrix/ (see `docs/*/contributor/development-testing.md`);
137
+ `defects.sh` appends to and queries the defect registry (`defects.yml`,
138
+ see "Defect reports" below).
115
139
 
116
140
  ## Setup, test, and build
117
141
 
@@ -123,22 +147,48 @@ python3 -m venv .venv && source .venv/bin/activate
123
147
  python -m pip install -e '.[dev]' # runtime + pytest + Cython + Sphinx;
124
148
  # also compiles the qc parsers extension
125
149
 
126
- python -m pytest # full suite (coverage gate: 90% branch)
150
+ python -m pytest # full suite (coverage gate: >=95% combined
151
+ # line+branch, and >=95% branch coverage)
127
152
  python -m pytest tests/unit # by category: unit / integration /
128
153
  # regression / compatibility
129
154
 
155
+ python -m pytest --lf -q --no-cov # iterate: last failures, no coverage
156
+ python -m pytest -n 4 --dist loadfile # parallel full suite (xdist, in the dev/test extras)
157
+ scripts/run-test-matrix.sh # whole suite on 3.10-3.15 concurrently
158
+
130
159
  python setup.py build_ext --inplace # rebuild only the Cython extension
131
160
 
132
161
  sphinx-build -W --keep-going -b html docs docs/_build/html # strict docs build
133
162
  ```
134
163
 
135
164
  Run the relevant test category after any change; run the full suite before
136
- considering work done. CI (`.github/workflows/deploy.yml`) runs pytest on
137
- Python 3.10–3.14 and the strict Sphinx build. Releases are published
138
- exclusively to PyPI; see `docs/*/contributor/pypi-release.md`.
165
+ considering work done.
166
+
167
+ CI (`.github/workflows/test.yml`) runs pytest on Python 3.10–3.15 and the strict
168
+ Sphinx build. Releases are published exclusively to PyPI; see `docs/*/contributor/pypi-release.md`.
169
+
170
+ The project uses `pytest-xdist` to parallel testing. Avoid sharing state between tests
171
+ to prevent unexpected or random test results.
172
+
173
+ > Running `python -m pytest` directly takes approx 35 seconds
174
+ > (auto: 24 workers). Running the local test matrix takes 3 minutes
175
+ > (6 jobs × 4 workers), or 4~5min (6 jobs × 2 workers in default).
176
+ >
177
+ > Measured on Intel Core i7-13700HX (16c24t).
178
+
179
+ ## Git
139
180
 
140
- Do not commit or perform other git mutations unless the user explicitly
141
- asks.
181
+ If the user requests or grants permission, do `git commit` after modify.
182
+ Avoid including overly large changes in a single commit. For commit messages,
183
+ follow the pattern used in the last five commits; otherwise, the Conventional
184
+ Commits guidelines.
185
+
186
+ **DO NOT** push any commit or tag unless the user **explicitly** requests that.
187
+
188
+ If times out, assume the user is not present and that a GPG signature
189
+ is required. Add `-c commit.gpgsign=false` behind `git` may help (However,
190
+ re-signing will reset the commit hash, and corrupt the defects.yml. Please
191
+ proceed with caution).
142
192
 
143
193
  ## Conventions
144
194
 
@@ -170,6 +220,27 @@ asks.
170
220
  exists only for pre-1.0 databases and is scheduled for removal at the 1.0
171
221
  release; check it before touching `operon/database.py` migrations or the
172
222
  NCBI adapter's schema-upgrade path.
223
+ - The `operon.qc` module uses CFFI (specifically, Cython), so static analysis
224
+ tools, such as `flake8`, will report "undefined reference" errors (F821).
225
+ Using `# noqa: F821` behind the line **ONLY** when importing `operon.qc`
226
+ and an F821 error is likely to occur. Globally ignoring F821 is **STRICKLY
227
+ PROHIBITED**.
228
+
229
+ ## Defect reports
230
+
231
+ Confirmed defects are tracked in the machine-readable registry
232
+ `defects.yml` at the repository root (plus any `defects/*.yml` shards;
233
+ `scripts/defects.sh` appends and queries records). The full process is in
234
+ `docs/*/contributor/defect-tracking.md`; the binding rules are:
235
+
236
+ 1. **Register first.** When an audit or investigation confirms a defect,
237
+ append its `ODR-XXXX` record to `defects.yml` before the fix lands.
238
+ 2. **One commit per defect.** The fix and its regression tests ride in the
239
+ same commit; fill in `fix_commit` when committing.
240
+ 3. **Close the test loop.** Regression tests for a defect carry
241
+ `@pytest.mark.bug("ODR-XXXX")`, and every `fixed`/`verified` record
242
+ lists at least one such test; `tests/unit/test_defect_registry.py`
243
+ validates the registry schema and both directions of this closure.
173
244
 
174
245
  ## Documentation sync
175
246
 
@@ -186,7 +257,7 @@ change:
186
257
  - Contributor-facing processes → `docs/*/contributor/`; navigation →
187
258
  `docs/*/index.md`
188
259
 
189
- Version markers in docs (`operon` 0.7.0, database schema 2.9, metadata
260
+ Version markers in docs (`operon` 0.8.2, database schema 2.11, metadata
190
261
  schema 1.4) must match `pyproject.toml` and the code. Do not write the
191
262
  current values literally in Markdown sources: use the `myst_substitutions`
192
263
  references `{{ operon_version }}`, `{{ db_schema }}`, and
@@ -203,6 +274,9 @@ Sphinx-rendered); update the list above when bumping.
203
274
 
204
275
  ## Special Note For Codex/ChatGPT
205
276
 
206
- Due to specific limitations of the sandbox environment, executing certain TUI test code may cause the system to freeze; this often occurs on Codex/ChatGPT. The specific reason is that when this test code runs in the sandbox, it may results a Textual/asyncio cleanup block, and reports "FAIL" due to timeout.
277
+ Due to specific limitations of the sandbox environment, executing certain TUI
278
+ test code may cause the system to freeze; this often occurs on Codex/ChatGPT.
279
+ The specific reason is that when this test code runs in the sandbox, it may
280
+ result a Textual/asyncio cleanup block, and reports "FAIL" due to timeout.
207
281
 
208
282
  If you are Codex/ChatGPT, please execute TUI-related test code OUTSIDE the sandbox.
@@ -14,4 +14,5 @@ prune docs/_build
14
14
  recursive-include operon *.py *.pyx *.tcss
15
15
  recursive-include operon/tui/assets *.png *.z *.md
16
16
  recursive-include tests *.py
17
- exclude operon/qc_module/_parsers.c
17
+ exclude operon/qc/_parsers.c
18
+ exclude operon/qc/_alignment.c
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OperonDBS
3
- Version: 0.7.2
3
+ Version: 0.8.2
4
4
  Summary: Operon the Database System: Archive, Quality-Control, Organize, Analyze and Release Your Bio-Data
5
5
  Author-email: hyli360 <lihuanyu2003@gmail.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -8,30 +8,26 @@ Project-URL: Repository, https://github.com/HYLi360/Operon
8
8
  Project-URL: Issues, https://github.com/HYLi360/Operon/issues
9
9
  Classifier: Operating System :: MacOS
10
10
  Classifier: Operating System :: POSIX :: Linux
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Classifier: Programming Language :: Python :: 3.14
11
+ Classifier: Programming Language :: Python :: 3 :: Only
17
12
  Requires-Python: >=3.10
18
13
  Description-Content-Type: text/markdown
19
14
  License-File: LICENSE
20
15
  Requires-Dist: aiohttp>=3.9
21
16
  Requires-Dist: biopython>=1.85
22
- Requires-Dist: PyYAML>=6.0
23
17
  Requires-Dist: paramiko>=3.4
18
+ Requires-Dist: PyYAML>=6.0
24
19
  Requires-Dist: questionary>=2.1
25
20
  Requires-Dist: requests>=2.32
26
21
  Requires-Dist: textual>=8.0
27
22
  Provides-Extra: test
28
23
  Requires-Dist: coverage>=7.0; extra == "test"
24
+ Requires-Dist: cython>=3.0; extra == "test"
29
25
  Requires-Dist: paramiko>=3.4; extra == "test"
30
- Requires-Dist: pytest-cov>=7.0; extra == "test"
31
26
  Requires-Dist: pytest>=8.0; extra == "test"
27
+ Requires-Dist: pytest-cov>=7.0; extra == "test"
28
+ Requires-Dist: pytest-xdist>=3.8; extra == "test"
32
29
  Requires-Dist: setuptools>=77; extra == "test"
33
30
  Requires-Dist: textual>=8.0; extra == "test"
34
- Requires-Dist: cython>=3.0; extra == "test"
35
31
  Provides-Extra: docs
36
32
  Requires-Dist: Sphinx<9,>=7.4; extra == "docs"
37
33
  Requires-Dist: myst-parser<5,>=4.0; extra == "docs"
@@ -40,17 +36,24 @@ Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "docs"
40
36
  Provides-Extra: dev
41
37
  Requires-Dist: coverage>=7.0; extra == "dev"
42
38
  Requires-Dist: cython>=3.0; extra == "dev"
43
- Requires-Dist: pytest-cov>=7.0; extra == "dev"
44
39
  Requires-Dist: pytest>=8.0; extra == "dev"
40
+ Requires-Dist: pytest-cov>=7.0; extra == "dev"
41
+ Requires-Dist: pytest-xdist>=3.8; extra == "dev"
42
+ Requires-Dist: setuptools>=77; extra == "dev"
45
43
  Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
46
44
  Requires-Dist: Sphinx<9,>=7.4; extra == "dev"
47
45
  Requires-Dist: myst-parser<5,>=4.0; extra == "dev"
48
46
  Requires-Dist: sphinx-rtd-theme<4,>=3.0; extra == "dev"
49
47
  Dynamic: license-file
50
48
 
51
- # Operon
49
+ # Operon the Database System
52
50
 
53
- [![test status](https://github.com/HYLi360/Operon/actions/workflows/test.yml/badge.svg)](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [![codecov](https://codecov.io/gh/HYLi360/Operon/branch/master/graph/badge.svg?token=BC4LD8UPL2)](https://codecov.io/gh/HYLi360/Operon)
51
+ [![test status](https://github.com/HYLi360/Operon/actions/workflows/test.yml/badge.svg)](https://github.com/HYLi360/Operon/actions/workflows/test.yml)
52
+ [![RtD badge](https://img.shields.io/badge/Read-the_Document-blue?style=flat)](https://operonproject.readthedocs.io/)
53
+ ![PyPI Version](https://img.shields.io/pypi/v/OperonDBS?link=https%3A%2F%2Fpypi.org%2Fproject%2FOperonDBS%2F)
54
+ ![GitHub commit activity](https://img.shields.io/github/commit-activity/t/HYLi360/Operon?logo=github)
55
+ [![Codacy Code quality Badge](https://app.codacy.com/project/badge/Grade/47d652651ff645ff86fa0646768a08b3)](https://app.codacy.com/gh/HYLi360/Operon/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
56
+ [![Codacy Coverage Badge](https://app.codacy.com/project/badge/Coverage/47d652651ff645ff86fa0646768a08b3)](https://app.codacy.com/gh/HYLi360/Operon/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage)
54
57
 
55
58
  A Python-based, **file-based database** designed for large-scale genomic data, used for archiving, quality control, analysis, and deterministic automation.
56
59
 
@@ -33,6 +33,7 @@ docs/en/architecture/overview.md
33
33
  docs/en/architecture/qc-and-rules.md
34
34
  docs/en/architecture/release-lifecycle.md
35
35
  docs/en/architecture/taxonomy-coverage.md
36
+ docs/en/contributor/defect-tracking.md
36
37
  docs/en/contributor/development-testing.md
37
38
  docs/en/contributor/documentation-deployment.md
38
39
  docs/en/contributor/index.md
@@ -50,8 +51,10 @@ docs/en/guides/file-archiving.md
50
51
  docs/en/guides/index.md
51
52
  docs/en/guides/metadata-import.md
52
53
  docs/en/guides/ncbi-datasets.md
54
+ docs/en/guides/phylogenetics-workflow.md
53
55
  docs/en/guides/qc-profiles.md
54
56
  docs/en/guides/remote-execution.md
57
+ docs/en/guides/remote-first.md
55
58
  docs/en/guides/remote-storage.md
56
59
  docs/en/guides/taxonomy-coverage.md
57
60
  docs/en/guides/troubleshooting.md
@@ -73,6 +76,7 @@ docs/en/reference/index.md
73
76
  docs/en/reference/recipe-fields.md
74
77
  docs/en/reference/recipe-overview.md
75
78
  docs/en/reference/recipe-parsers-examples.md
79
+ docs/en/reference/resolved-issues.md
76
80
  docs/zh/index.md
77
81
  docs/zh/overview.md
78
82
  docs/zh/architecture/extensibility.md
@@ -84,6 +88,7 @@ docs/zh/architecture/overview.md
84
88
  docs/zh/architecture/qc-and-rules.md
85
89
  docs/zh/architecture/release-lifecycle.md
86
90
  docs/zh/architecture/taxonomy-coverage.md
91
+ docs/zh/contributor/defect-tracking.md
87
92
  docs/zh/contributor/development-testing.md
88
93
  docs/zh/contributor/documentation-deployment.md
89
94
  docs/zh/contributor/index.md
@@ -101,8 +106,10 @@ docs/zh/guides/file-archiving.md
101
106
  docs/zh/guides/index.md
102
107
  docs/zh/guides/metadata-import.md
103
108
  docs/zh/guides/ncbi-datasets.md
109
+ docs/zh/guides/phylogenetics-workflow.md
104
110
  docs/zh/guides/qc-profiles.md
105
111
  docs/zh/guides/remote-execution.md
112
+ docs/zh/guides/remote-first.md
106
113
  docs/zh/guides/remote-storage.md
107
114
  docs/zh/guides/taxonomy-coverage.md
108
115
  docs/zh/guides/troubleshooting.md
@@ -124,9 +131,11 @@ docs/zh/reference/index.md
124
131
  docs/zh/reference/recipe-fields.md
125
132
  docs/zh/reference/recipe-overview.md
126
133
  docs/zh/reference/recipe-parsers-examples.md
134
+ docs/zh/reference/resolved-issues.md
127
135
  operon/__init__.py
128
136
  operon/__main__.py
129
137
  operon/backup.py
138
+ operon/classify.py
130
139
  operon/cli.py
131
140
  operon/config.py
132
141
  operon/coverage.py
@@ -134,9 +143,11 @@ operon/database.py
134
143
  operon/demo.py
135
144
  operon/entity_view.py
136
145
  operon/environment.py
146
+ operon/environment_capture.py
137
147
  operon/errors.py
138
148
  operon/execution.py
139
149
  operon/export.py
150
+ operon/fanout.py
140
151
  operon/files.py
141
152
  operon/import_wizard.py
142
153
  operon/lifecycle.py
@@ -149,17 +160,24 @@ operon/remotes.py
149
160
  operon/reports.py
150
161
  operon/rules.py
151
162
  operon/schema.py
163
+ operon/sequence_tools.py
152
164
  operon/shutdown.py
165
+ operon/sql.py
153
166
  operon/table_import.py
154
167
  operon/taxonomy.py
168
+ operon/timetree.py
155
169
  operon/tools.py
156
170
  operon/utils.py
157
171
  operon/workflow.py
158
172
  operon/adapters/__init__.py
159
173
  operon/adapters/ncbi_datasets.py
160
- operon/qc_module/__init__.py
161
- operon/qc_module/_parsers.pyx
162
- operon/qc_module/parsers.py
174
+ operon/adapters/timetree.py
175
+ operon/qc/__init__.py
176
+ operon/qc/_alignment.pyx
177
+ operon/qc/_parsers.pyx
178
+ operon/qc/alignment.py
179
+ operon/qc/measure.py
180
+ operon/qc/parsers.py
163
181
  operon/tui/__init__.py
164
182
  operon/tui/actions.py
165
183
  operon/tui/app.py
@@ -186,53 +204,82 @@ tests/helpers.py
186
204
  tests/compatibility/__init__.py
187
205
  tests/compatibility/test_python_support.py
188
206
  tests/integration/__init__.py
207
+ tests/integration/test_analysis_array.py
189
208
  tests/integration/test_analysis_resume.py
190
209
  tests/integration/test_analysis_shutdown.py
191
210
  tests/integration/test_analysis_tools.py
211
+ tests/integration/test_classify_sequences.py
192
212
  tests/integration/test_execution_backends.py
213
+ tests/integration/test_fanout_analyze.py
193
214
  tests/integration/test_lineage_cascade.py
194
215
  tests/integration/test_ncbi_datasets_adapter.py
195
216
  tests/integration/test_pipeline_and_release.py
196
217
  tests/integration/test_python_packaging.py
218
+ tests/integration/test_qc_remote_measure.py
197
219
  tests/integration/test_taxonomy_coverage.py
198
220
  tests/regression/__init__.py
199
221
  tests/regression/test_correctness.py
222
+ tests/regression/test_cython_alignment_parity.py
200
223
  tests/regression/test_cython_parser_parity.py
201
224
  tests/regression/test_parser_semantics.py
225
+ tests/regression/test_sql_identifier_security.py
202
226
  tests/unit/__init__.py
227
+ tests/unit/test_alignment_qc.py
228
+ tests/unit/test_classify.py
203
229
  tests/unit/test_cli_edges.py
204
230
  tests/unit/test_config_workflow_edges.py
231
+ tests/unit/test_core_coverage_more.py
205
232
  tests/unit/test_coverage_edges.py
206
233
  tests/unit/test_database_edges_more.py
234
+ tests/unit/test_defect_registry.py
235
+ tests/unit/test_defects_cli.py
207
236
  tests/unit/test_docs_versions.py
208
237
  tests/unit/test_environment.py
238
+ tests/unit/test_environment_capture.py
209
239
  tests/unit/test_execution.py
210
240
  tests/unit/test_execution_edges.py
211
241
  tests/unit/test_export.py
242
+ tests/unit/test_fanout.py
212
243
  tests/unit/test_files_edges.py
244
+ tests/unit/test_follow.py
213
245
  tests/unit/test_import_backup_show.py
214
246
  tests/unit/test_import_wizard_edges.py
215
247
  tests/unit/test_lifecycle.py
216
248
  tests/unit/test_lineage.py
249
+ tests/unit/test_misc_coverage_more.py
250
+ tests/unit/test_ncbi_coverage_gaps.py
217
251
  tests/unit/test_ncbi_edge_cases.py
218
252
  tests/unit/test_ncbi_reconcile_edges.py
219
253
  tests/unit/test_parser_edge_paths.py
220
254
  tests/unit/test_qc_and_rules.py
221
255
  tests/unit/test_qc_edges_more.py
256
+ tests/unit/test_qc_measure.py
257
+ tests/unit/test_qc_remote_only.py
222
258
  tests/unit/test_recipe_history.py
259
+ tests/unit/test_remote_taxonomy_more.py
260
+ tests/unit/test_remote_transport_edges.py
223
261
  tests/unit/test_remotes.py
224
262
  tests/unit/test_remotes_edges.py
225
263
  tests/unit/test_rules_schema_edges.py
264
+ tests/unit/test_schema_2_10.py
265
+ tests/unit/test_schema_2_11.py
226
266
  tests/unit/test_schema_2_9.py
227
267
  tests/unit/test_schema_and_metadata.py
268
+ tests/unit/test_sequence_tools.py
269
+ tests/unit/test_sequences.py
228
270
  tests/unit/test_shutdown.py
229
271
  tests/unit/test_support_edges.py
230
272
  tests/unit/test_table_import_edges.py
231
273
  tests/unit/test_taxonomy_edges.py
274
+ tests/unit/test_timetree.py
275
+ tests/unit/test_timetree_snapshots.py
232
276
  tests/unit/test_tools_edges.py
277
+ tests/unit/test_tools_execution_more.py
233
278
  tests/unit/test_tui.py
234
279
  tests/unit/test_tui_config.py
280
+ tests/unit/test_tui_flows_more.py
235
281
  tests/unit/test_tui_publish.py
282
+ tests/unit/test_tui_screens_more.py
236
283
  tests/unit/test_tui_splash_terminal.py
237
284
  tests/unit/test_tui_writes.py
238
285
  tests/unit/test_views_release_reports_edges.py
@@ -1,7 +1,7 @@
1
1
  aiohttp>=3.9
2
2
  biopython>=1.85
3
- PyYAML>=6.0
4
3
  paramiko>=3.4
4
+ PyYAML>=6.0
5
5
  questionary>=2.1
6
6
  requests>=2.32
7
7
  textual>=8.0
@@ -9,8 +9,10 @@ textual>=8.0
9
9
  [dev]
10
10
  coverage>=7.0
11
11
  cython>=3.0
12
- pytest-cov>=7.0
13
12
  pytest>=8.0
13
+ pytest-cov>=7.0
14
+ pytest-xdist>=3.8
15
+ setuptools>=77
14
16
  Sphinx<9,>=7.4
15
17
  myst-parser<5,>=4.0
16
18
  sphinx-rtd-theme<4,>=3.0
@@ -28,9 +30,10 @@ tomli>=2.0
28
30
 
29
31
  [test]
30
32
  coverage>=7.0
33
+ cython>=3.0
31
34
  paramiko>=3.4
32
- pytest-cov>=7.0
33
35
  pytest>=8.0
36
+ pytest-cov>=7.0
37
+ pytest-xdist>=3.8
34
38
  setuptools>=77
35
39
  textual>=8.0
36
- cython>=3.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OperonDBS
3
- Version: 0.7.2
3
+ Version: 0.8.2
4
4
  Summary: Operon the Database System: Archive, Quality-Control, Organize, Analyze and Release Your Bio-Data
5
5
  Author-email: hyli360 <lihuanyu2003@gmail.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -8,30 +8,26 @@ Project-URL: Repository, https://github.com/HYLi360/Operon
8
8
  Project-URL: Issues, https://github.com/HYLi360/Operon/issues
9
9
  Classifier: Operating System :: MacOS
10
10
  Classifier: Operating System :: POSIX :: Linux
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Classifier: Programming Language :: Python :: 3.14
11
+ Classifier: Programming Language :: Python :: 3 :: Only
17
12
  Requires-Python: >=3.10
18
13
  Description-Content-Type: text/markdown
19
14
  License-File: LICENSE
20
15
  Requires-Dist: aiohttp>=3.9
21
16
  Requires-Dist: biopython>=1.85
22
- Requires-Dist: PyYAML>=6.0
23
17
  Requires-Dist: paramiko>=3.4
18
+ Requires-Dist: PyYAML>=6.0
24
19
  Requires-Dist: questionary>=2.1
25
20
  Requires-Dist: requests>=2.32
26
21
  Requires-Dist: textual>=8.0
27
22
  Provides-Extra: test
28
23
  Requires-Dist: coverage>=7.0; extra == "test"
24
+ Requires-Dist: cython>=3.0; extra == "test"
29
25
  Requires-Dist: paramiko>=3.4; extra == "test"
30
- Requires-Dist: pytest-cov>=7.0; extra == "test"
31
26
  Requires-Dist: pytest>=8.0; extra == "test"
27
+ Requires-Dist: pytest-cov>=7.0; extra == "test"
28
+ Requires-Dist: pytest-xdist>=3.8; extra == "test"
32
29
  Requires-Dist: setuptools>=77; extra == "test"
33
30
  Requires-Dist: textual>=8.0; extra == "test"
34
- Requires-Dist: cython>=3.0; extra == "test"
35
31
  Provides-Extra: docs
36
32
  Requires-Dist: Sphinx<9,>=7.4; extra == "docs"
37
33
  Requires-Dist: myst-parser<5,>=4.0; extra == "docs"
@@ -40,17 +36,24 @@ Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "docs"
40
36
  Provides-Extra: dev
41
37
  Requires-Dist: coverage>=7.0; extra == "dev"
42
38
  Requires-Dist: cython>=3.0; extra == "dev"
43
- Requires-Dist: pytest-cov>=7.0; extra == "dev"
44
39
  Requires-Dist: pytest>=8.0; extra == "dev"
40
+ Requires-Dist: pytest-cov>=7.0; extra == "dev"
41
+ Requires-Dist: pytest-xdist>=3.8; extra == "dev"
42
+ Requires-Dist: setuptools>=77; extra == "dev"
45
43
  Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
46
44
  Requires-Dist: Sphinx<9,>=7.4; extra == "dev"
47
45
  Requires-Dist: myst-parser<5,>=4.0; extra == "dev"
48
46
  Requires-Dist: sphinx-rtd-theme<4,>=3.0; extra == "dev"
49
47
  Dynamic: license-file
50
48
 
51
- # Operon
49
+ # Operon the Database System
52
50
 
53
- [![test status](https://github.com/HYLi360/Operon/actions/workflows/test.yml/badge.svg)](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [![codecov](https://codecov.io/gh/HYLi360/Operon/branch/master/graph/badge.svg?token=BC4LD8UPL2)](https://codecov.io/gh/HYLi360/Operon)
51
+ [![test status](https://github.com/HYLi360/Operon/actions/workflows/test.yml/badge.svg)](https://github.com/HYLi360/Operon/actions/workflows/test.yml)
52
+ [![RtD badge](https://img.shields.io/badge/Read-the_Document-blue?style=flat)](https://operonproject.readthedocs.io/)
53
+ ![PyPI Version](https://img.shields.io/pypi/v/OperonDBS?link=https%3A%2F%2Fpypi.org%2Fproject%2FOperonDBS%2F)
54
+ ![GitHub commit activity](https://img.shields.io/github/commit-activity/t/HYLi360/Operon?logo=github)
55
+ [![Codacy Code quality Badge](https://app.codacy.com/project/badge/Grade/47d652651ff645ff86fa0646768a08b3)](https://app.codacy.com/gh/HYLi360/Operon/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
56
+ [![Codacy Coverage Badge](https://app.codacy.com/project/badge/Coverage/47d652651ff645ff86fa0646768a08b3)](https://app.codacy.com/gh/HYLi360/Operon/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage)
54
57
 
55
58
  A Python-based, **file-based database** designed for large-scale genomic data, used for archiving, quality control, analysis, and deterministic automation.
56
59
 
@@ -1,6 +1,11 @@
1
- # Operon
2
-
3
- [![test status](https://github.com/HYLi360/Operon/actions/workflows/test.yml/badge.svg)](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [![codecov](https://codecov.io/gh/HYLi360/Operon/branch/master/graph/badge.svg?token=BC4LD8UPL2)](https://codecov.io/gh/HYLi360/Operon)
1
+ # Operon the Database System
2
+
3
+ [![test status](https://github.com/HYLi360/Operon/actions/workflows/test.yml/badge.svg)](https://github.com/HYLi360/Operon/actions/workflows/test.yml)
4
+ [![RtD badge](https://img.shields.io/badge/Read-the_Document-blue?style=flat)](https://operonproject.readthedocs.io/)
5
+ ![PyPI Version](https://img.shields.io/pypi/v/OperonDBS?link=https%3A%2F%2Fpypi.org%2Fproject%2FOperonDBS%2F)
6
+ ![GitHub commit activity](https://img.shields.io/github/commit-activity/t/HYLi360/Operon?logo=github)
7
+ [![Codacy Code quality Badge](https://app.codacy.com/project/badge/Grade/47d652651ff645ff86fa0646768a08b3)](https://app.codacy.com/gh/HYLi360/Operon/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
8
+ [![Codacy Coverage Badge](https://app.codacy.com/project/badge/Coverage/47d652651ff645ff86fa0646768a08b3)](https://app.codacy.com/gh/HYLi360/Operon/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage)
4
9
 
5
10
  A Python-based, **file-based database** designed for large-scale genomic data, used for archiving, quality control, analysis, and deterministic automation.
6
11