OperonDBS 0.7.0__tar.gz → 0.7.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.
- {operondbs-0.7.0 → operondbs-0.7.2}/.github/workflows/publish.yml +11 -0
- operondbs-0.7.0/.github/workflows/deploy.yml → operondbs-0.7.2/.github/workflows/test.yml +1 -22
- {operondbs-0.7.0 → operondbs-0.7.2}/AGENTS.md +22 -25
- {operondbs-0.7.0 → operondbs-0.7.2}/MANIFEST.in +1 -1
- {operondbs-0.7.0 → operondbs-0.7.2}/OperonDBS.egg-info/PKG-INFO +4 -19
- {operondbs-0.7.0 → operondbs-0.7.2}/OperonDBS.egg-info/SOURCES.txt +12 -6
- {operondbs-0.7.0 → operondbs-0.7.2}/OperonDBS.egg-info/requires.txt +3 -11
- {operondbs-0.7.0 → operondbs-0.7.2}/PKG-INFO +4 -19
- {operondbs-0.7.0 → operondbs-0.7.2}/README.md +2 -10
- {operondbs-0.7.0 → operondbs-0.7.2}/README_ZH.md +2 -9
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/conf.py +2 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/files-and-storage.md +1 -1
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/contributor/development-testing.md +2 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/contributor/documentation-deployment.md +0 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/contributor/index.md +0 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/contributor/pypi-release.md +1 -3
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/contributor/repository-guide.md +0 -1
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/getting-started/installation.md +3 -15
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/operations/ncbi-recovery-migration.md +1 -1
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-tui.md +130 -8
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/files-and-storage.md +1 -1
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/contributor/development-testing.md +3 -4
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/contributor/documentation-deployment.md +0 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/contributor/index.md +0 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/contributor/pypi-release.md +1 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/contributor/repository-guide.md +0 -1
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/getting-started/installation.md +2 -12
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/operations/ncbi-recovery-migration.md +1 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-tui.md +106 -9
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/actions.py +98 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/app.py +68 -8
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/app.tcss +121 -0
- operondbs-0.7.2/operon/tui/assets/splash.png +0 -0
- operondbs-0.7.2/operon/tui/assets/splash.rgb.z +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/data.py +279 -14
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/common.py +50 -2
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/config.py +10 -4
- operondbs-0.7.2/operon/tui/screens/coverage.py +290 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/entities.py +18 -3
- operondbs-0.7.2/operon/tui/screens/import_wizard.py +619 -0
- operondbs-0.7.2/operon/tui/screens/publish.py +441 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/runs.py +5 -10
- operondbs-0.7.2/operon/tui/splash.py +188 -0
- operondbs-0.7.2/operon/tui/splash_terminal.py +86 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/pyproject.toml +11 -26
- {operondbs-0.7.0 → operondbs-0.7.2}/setup.py +0 -5
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/compatibility/test_python_support.py +1 -1
- operondbs-0.7.2/tests/integration/test_python_packaging.py +131 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_tui.py +188 -12
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_tui_config.py +34 -2
- operondbs-0.7.2/tests/unit/test_tui_publish.py +725 -0
- operondbs-0.7.2/tests/unit/test_tui_splash_terminal.py +165 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_tui_writes.py +28 -1
- operondbs-0.7.0/docs/en/contributor/application-release.md +0 -52
- operondbs-0.7.0/docs/zh/contributor/application-release.md +0 -69
- operondbs-0.7.0/tests/integration/test_application_build.py +0 -298
- operondbs-0.7.0/tools/build.py +0 -519
- {operondbs-0.7.0 → operondbs-0.7.2}/.gitignore +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/.readthedocs.yaml +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/LICENSE +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/OperonDBS.egg-info/dependency_links.txt +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/OperonDBS.egg-info/entry_points.txt +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/OperonDBS.egg-info/top_level.txt +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/benchmarks/qc_representative_entities.tsv +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/_static/language-switcher.js +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/_static/operon.css +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/_templates/layout.html +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/extensibility.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/external-analysis.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/metadata-and-data-model.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/overview.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/qc-and-rules.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/release-lifecycle.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/architecture/taxonomy-coverage.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/getting-started/daily-workflow.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/getting-started/first-project.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/getting-started/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/getting-started/quickstart.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/backup-migration.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/curation-lifecycle.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/external-analysis.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/file-archiving.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/metadata-import.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/ncbi-datasets.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/qc-profiles.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/remote-execution.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/remote-storage.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/taxonomy-coverage.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/guides/troubleshooting.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/operations/database-compatibility.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/operations/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/operations/qc-performance.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/overview.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/behaviors-and-limitations.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-analysis.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-decisions-reports.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-files-qc.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-project-metadata.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-remote.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-taxonomy-lifecycle-admin.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/cli-workflow.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/data-model.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/recipe-fields.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/recipe-overview.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/en/reference/recipe-parsers-examples.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/requirements.txt +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/extensibility.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/external-analysis.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/metadata-and-data-model.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/overview.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/qc-and-rules.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/release-lifecycle.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/architecture/taxonomy-coverage.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/getting-started/daily-workflow.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/getting-started/first-project.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/getting-started/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/getting-started/quickstart.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/backup-migration.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/curation-lifecycle.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/external-analysis.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/file-archiving.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/metadata-import.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/ncbi-datasets.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/qc-profiles.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/remote-execution.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/remote-storage.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/taxonomy-coverage.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/guides/troubleshooting.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/operations/database-compatibility.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/operations/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/operations/qc-performance.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/overview.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/behaviors-and-limitations.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-analysis.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-decisions-reports.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-files-qc.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-project-metadata.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-remote.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-taxonomy-lifecycle-admin.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/cli-workflow.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/data-model.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/index.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/recipe-fields.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/recipe-overview.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/docs/zh/reference/recipe-parsers-examples.md +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/__main__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/adapters/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/adapters/ncbi_datasets.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/backup.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/cli.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/config.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/coverage.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/database.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/demo.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/entity_view.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/environment.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/errors.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/execution.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/export.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/files.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/import_wizard.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/lifecycle.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/lineage.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/metadata_files.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/ncbi_reconcile.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/profiles.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/qc_module/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/qc_module/_parsers.pyx +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/qc_module/parsers.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/release.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/remotes.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/reports.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/rules.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/schema.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/shutdown.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/table_import.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/taxonomy.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tools.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/decisions.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/files.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/files_ops.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/tui/screens/home.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/utils.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/operon/workflow.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/setup.cfg +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/compatibility/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/helpers.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_analysis_resume.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_analysis_shutdown.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_analysis_tools.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_execution_backends.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_lineage_cascade.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_ncbi_datasets_adapter.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_pipeline_and_release.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/integration/test_taxonomy_coverage.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/regression/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/regression/test_correctness.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/regression/test_cython_parser_parity.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/regression/test_parser_semantics.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/__init__.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_cli_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_config_workflow_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_coverage_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_database_edges_more.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_docs_versions.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_environment.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_execution.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_execution_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_export.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_files_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_import_backup_show.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_import_wizard_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_lifecycle.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_lineage.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_ncbi_edge_cases.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_ncbi_reconcile_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_parser_edge_paths.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_qc_and_rules.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_qc_edges_more.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_recipe_history.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_remotes.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_remotes_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_rules_schema_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_schema_2_9.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_schema_and_metadata.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_shutdown.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_support_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_table_import_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_taxonomy_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_tools_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_views_release_reports_edges.py +0 -0
- {operondbs-0.7.0 → operondbs-0.7.2}/tests/unit/test_workflow_cli.py +0 -0
|
@@ -34,6 +34,17 @@ jobs:
|
|
|
34
34
|
path: dist/*.tar.gz
|
|
35
35
|
if-no-files-found: error
|
|
36
36
|
|
|
37
|
+
documentation:
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v6
|
|
41
|
+
- uses: actions/setup-python@v7
|
|
42
|
+
with:
|
|
43
|
+
python-version: "3.12"
|
|
44
|
+
- run: python -m pip install --upgrade pip
|
|
45
|
+
- run: python -m pip install -e '.[docs]'
|
|
46
|
+
- run: sphinx-build -W --keep-going -b html docs docs/_build/html
|
|
47
|
+
|
|
37
48
|
wheels:
|
|
38
49
|
strategy:
|
|
39
50
|
fail-fast: false
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: test
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -25,24 +25,3 @@ jobs:
|
|
|
25
25
|
with:
|
|
26
26
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
27
27
|
report_type: test_results
|
|
28
|
-
|
|
29
|
-
frozen-release-test:
|
|
30
|
-
runs-on: ubuntu-latest
|
|
31
|
-
steps:
|
|
32
|
-
- uses: actions/checkout@v6
|
|
33
|
-
- uses: actions/setup-python@v7
|
|
34
|
-
with:
|
|
35
|
-
python-version: "3.14"
|
|
36
|
-
- run: python -m pip install -e '.[build]'
|
|
37
|
-
- run: python tools/build.py
|
|
38
|
-
|
|
39
|
-
documentation:
|
|
40
|
-
runs-on: ubuntu-latest
|
|
41
|
-
steps:
|
|
42
|
-
- uses: actions/checkout@v6
|
|
43
|
-
- uses: actions/setup-python@v7
|
|
44
|
-
with:
|
|
45
|
-
python-version: "3.12"
|
|
46
|
-
- run: python -m pip install --upgrade pip
|
|
47
|
-
- run: python -m pip install -e '.[docs]'
|
|
48
|
-
- run: sphinx-build -W --keep-going -b html docs docs/_build/html
|
|
@@ -26,7 +26,7 @@ principle-to-implementation mapping.
|
|
|
26
26
|
|
|
27
27
|
Current version markers (must stay consistent across code and docs):
|
|
28
28
|
|
|
29
|
-
- `operon` 0.
|
|
29
|
+
- `operon` 0.7.0 (`pyproject.toml`)
|
|
30
30
|
- database schema 2.9 (`operon/database.py`, `SCHEMA_VERSION`)
|
|
31
31
|
- metadata schema 1.4 (`operon/schema.py`, `METADATA_SCHEMA_VERSION`)
|
|
32
32
|
|
|
@@ -55,7 +55,13 @@ The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
|
|
|
55
55
|
checksum verification) and `sftp://` / `remote://` URL fetching.
|
|
56
56
|
- `operon/tui/` — Textual-based terminal UI (`operon tui`, optional `tui`
|
|
57
57
|
extra): Home dashboard, Entities browser, Files browser, workflow-run
|
|
58
|
-
monitor, a Decisions screen,
|
|
58
|
+
monitor, a Decisions screen, a Config screen, a Publish screen (nav key
|
|
59
|
+
`7`; release builder + selective export builder with read-only previews),
|
|
60
|
+
a Coverage screen (nav key `8`; taxonomy snapshots, reference sets,
|
|
61
|
+
coverage report generation and `COV_*` report browsing), and the import
|
|
62
|
+
dataset wizard (`operon/tui/screens/import_wizard.py`; Home button or
|
|
63
|
+
global `i`, except on the Files screen where `i` stays ingest). Read
|
|
64
|
+
access lives in
|
|
59
65
|
`operon/tui/data.py` and is strictly read-only (short-lived read-only
|
|
60
66
|
connections only). Phase 2 write operations (evaluate, curate,
|
|
61
67
|
retire/restore, ingest, verify, QC batch) live in
|
|
@@ -64,7 +70,12 @@ The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
|
|
|
64
70
|
(identical `changes`/`workflow_runs` provenance), and returns plain
|
|
65
71
|
dicts; writable connections are never held by the UI. Every write in the
|
|
66
72
|
UI follows form/plan preview → equivalent CLI command shown → explicit
|
|
67
|
-
Confirm → background worker → notify + reload or inline error.
|
|
73
|
+
Confirm → background worker → notify + reload or inline error. Phase 3
|
|
74
|
+
actions in the same module: `import_dataset` (commits wizard drafts
|
|
75
|
+
through the shared single-transaction `import_wizard._commit`),
|
|
76
|
+
`reserve_entity_ids`, `create_release`, `export`, and `run_coverage`
|
|
77
|
+
(a below-threshold coverage report returns `exit_code=1` in the result
|
|
78
|
+
dict — a warning, not an exception). The
|
|
68
79
|
Config screen (`operon/tui/screens/config.py`, nav key `6`) edits
|
|
69
80
|
`config/profiles/*.yaml` (kind `qc`) and single recipes inside
|
|
70
81
|
`config/tools.yaml` through structured control-based forms (no free-text
|
|
@@ -101,9 +112,6 @@ The project is licensed AGPL-3.0-or-later (`LICENSE` at the repo root).
|
|
|
101
112
|
(`.readthedocs.yaml`).
|
|
102
113
|
- `benchmarks/` — representative entity sets for QC performance diagnostics
|
|
103
114
|
(see `docs/*/operations/qc-performance.md`).
|
|
104
|
-
- `tools/build.py` — the only standalone-application release entry point.
|
|
105
|
-
- `build/release/v<version>/` — generated cx_Freeze application releases,
|
|
106
|
-
including third-party licenses and corresponding source.
|
|
107
115
|
|
|
108
116
|
## Setup, test, and build
|
|
109
117
|
|
|
@@ -112,9 +120,8 @@ repo root; activate it or invoke `.venv/bin/python` explicitly).
|
|
|
112
120
|
|
|
113
121
|
```bash
|
|
114
122
|
python3 -m venv .venv && source .venv/bin/activate
|
|
115
|
-
python -m pip install -e '.[dev]' # runtime + pytest +
|
|
116
|
-
#
|
|
117
|
-
# extension
|
|
123
|
+
python -m pip install -e '.[dev]' # runtime + pytest + Cython + Sphinx;
|
|
124
|
+
# also compiles the qc parsers extension
|
|
118
125
|
|
|
119
126
|
python -m pytest # full suite (coverage gate: 90% branch)
|
|
120
127
|
python -m pytest tests/unit # by category: unit / integration /
|
|
@@ -123,19 +130,12 @@ python -m pytest tests/unit # by category: unit / integration /
|
|
|
123
130
|
python setup.py build_ext --inplace # rebuild only the Cython extension
|
|
124
131
|
|
|
125
132
|
sphinx-build -W --keep-going -b html docs docs/_build/html # strict docs build
|
|
126
|
-
|
|
127
|
-
python tools/build.py # complete standalone release -> build/release/v<version>/
|
|
128
133
|
```
|
|
129
134
|
|
|
130
135
|
Run the relevant test category after any change; run the full suite before
|
|
131
136
|
considering work done. CI (`.github/workflows/deploy.yml`) runs pytest on
|
|
132
|
-
Python 3.10–3.14
|
|
133
|
-
|
|
134
|
-
`tools/build.py` compiles the Cython parser, builds the Sphinx documentation
|
|
135
|
-
strictly, collects third-party license texts, builds the
|
|
136
|
-
corresponding-source sdist, freezes the application, assembles the versioned
|
|
137
|
-
directory, and runs the frozen executable smoke test. Do not call cx_Freeze
|
|
138
|
-
directly for a release bundle.
|
|
137
|
+
Python 3.10–3.14 and the strict Sphinx build. Releases are published
|
|
138
|
+
exclusively to PyPI; see `docs/*/contributor/pypi-release.md`.
|
|
139
139
|
|
|
140
140
|
Do not commit or perform other git mutations unless the user explicitly
|
|
141
141
|
asks.
|
|
@@ -145,7 +145,7 @@ asks.
|
|
|
145
145
|
- Python 3.10+. Treat `pyproject.toml` as the authoritative dependency
|
|
146
146
|
list: `[project.dependencies]` contains core runtime dependencies, while
|
|
147
147
|
`[project.optional-dependencies]` contains separately installable extras
|
|
148
|
-
(`test`, `
|
|
148
|
+
(`test`, `docs`, `dev`). Runtime-feature extras must
|
|
149
149
|
remain lazy-imported by their feature paths (e.g. Paramiko is only
|
|
150
150
|
imported inside remote/SSH code); test/build extras must stay out of
|
|
151
151
|
normal runtime paths. Do not promote an extra dependency to core, or add a
|
|
@@ -186,7 +186,7 @@ change:
|
|
|
186
186
|
- Contributor-facing processes → `docs/*/contributor/`; navigation →
|
|
187
187
|
`docs/*/index.md`
|
|
188
188
|
|
|
189
|
-
Version markers in docs (`operon` 0.
|
|
189
|
+
Version markers in docs (`operon` 0.7.0, database schema 2.9, metadata
|
|
190
190
|
schema 1.4) must match `pyproject.toml` and the code. Do not write the
|
|
191
191
|
current values literally in Markdown sources: use the `myst_substitutions`
|
|
192
192
|
references `{{ operon_version }}`, `{{ db_schema }}`, and
|
|
@@ -203,9 +203,6 @@ Sphinx-rendered); update the list above when bumping.
|
|
|
203
203
|
|
|
204
204
|
## Special Note For Codex/ChatGPT
|
|
205
205
|
|
|
206
|
-
|
|
207
|
-
However, this causes the `test_tui.py` section to experience Textual/asyncio
|
|
208
|
-
cleanup blocking during testing, resulting in a "FAIL" report due to a timeout.
|
|
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.
|
|
209
207
|
|
|
210
|
-
|
|
211
|
-
outside the sandbox.
|
|
208
|
+
If you are Codex/ChatGPT, please execute TUI-related test code OUTSIDE the sandbox.
|
|
@@ -12,6 +12,6 @@ recursive-include benchmarks *.tsv
|
|
|
12
12
|
recursive-include docs *.css *.html *.js *.md *.py *.txt
|
|
13
13
|
prune docs/_build
|
|
14
14
|
recursive-include operon *.py *.pyx *.tcss
|
|
15
|
+
recursive-include operon/tui/assets *.png *.z *.md
|
|
15
16
|
recursive-include tests *.py
|
|
16
|
-
recursive-include tools *.py
|
|
17
17
|
exclude operon/qc_module/_parsers.c
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OperonDBS
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.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
|
|
@@ -32,20 +32,13 @@ Requires-Dist: pytest>=8.0; extra == "test"
|
|
|
32
32
|
Requires-Dist: setuptools>=77; extra == "test"
|
|
33
33
|
Requires-Dist: textual>=8.0; extra == "test"
|
|
34
34
|
Requires-Dist: cython>=3.0; extra == "test"
|
|
35
|
-
Provides-Extra: build
|
|
36
|
-
Requires-Dist: cx-Freeze>=8.4; extra == "build"
|
|
37
|
-
Requires-Dist: myst-parser<5,>=4.0; extra == "build"
|
|
38
|
-
Requires-Dist: Sphinx<9,>=7.4; extra == "build"
|
|
39
|
-
Requires-Dist: sphinx-rtd-theme<4,>=3.0; extra == "build"
|
|
40
|
-
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "build"
|
|
41
|
-
Requires-Dist: cython>=3.0; extra == "build"
|
|
42
35
|
Provides-Extra: docs
|
|
43
36
|
Requires-Dist: Sphinx<9,>=7.4; extra == "docs"
|
|
44
37
|
Requires-Dist: myst-parser<5,>=4.0; extra == "docs"
|
|
45
38
|
Requires-Dist: sphinx-rtd-theme<4,>=3.0; extra == "docs"
|
|
39
|
+
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "docs"
|
|
46
40
|
Provides-Extra: dev
|
|
47
41
|
Requires-Dist: coverage>=7.0; extra == "dev"
|
|
48
|
-
Requires-Dist: cx-Freeze>=8.4; extra == "dev"
|
|
49
42
|
Requires-Dist: cython>=3.0; extra == "dev"
|
|
50
43
|
Requires-Dist: pytest-cov>=7.0; extra == "dev"
|
|
51
44
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
@@ -57,7 +50,7 @@ Dynamic: license-file
|
|
|
57
50
|
|
|
58
51
|
# Operon
|
|
59
52
|
|
|
60
|
-
[](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [](https://codecov.io/gh/HYLi360/Operon)
|
|
61
54
|
|
|
62
55
|
A Python-based, **file-based database** designed for large-scale genomic data, used for archiving, quality control, analysis, and deterministic automation.
|
|
63
56
|
|
|
@@ -78,7 +71,7 @@ A Python-based, **file-based database** designed for large-scale genomic data, u
|
|
|
78
71
|
|
|
79
72
|
- Python 3.10+
|
|
80
73
|
- Runtime dependencies: `PyYAML`, `requests`, `aiohttp`, `Biopython`, `Paramiko`, `Textual`, and `questionary`; the built-in QC acceleration extension is compiled when the package is built
|
|
81
|
-
- Optional extras: `test` (pytest and Cython), `
|
|
74
|
+
- Optional extras: `test` (pytest and Cython), `docs` (documentation tooling), and `dev` (all development/build dependencies)
|
|
82
75
|
|
|
83
76
|
## Install
|
|
84
77
|
|
|
@@ -95,14 +88,6 @@ For an editable checkout, run from the repository root:
|
|
|
95
88
|
python -m pip install -e '.[dev]'
|
|
96
89
|
```
|
|
97
90
|
|
|
98
|
-
PyPI installation does not use cx_Freeze. To build the separately distributed
|
|
99
|
-
standalone application instead:
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
python -m pip install -e '.[build]'
|
|
103
|
-
python tools/build.py
|
|
104
|
-
```
|
|
105
|
-
|
|
106
91
|
## Documentation
|
|
107
92
|
|
|
108
93
|
The complete documentation is maintained in [English](docs/en/index.md) and [Chinese](docs/zh/index.md). To build the Sphinx site locally:
|
|
@@ -7,8 +7,8 @@ README.md
|
|
|
7
7
|
README_ZH.md
|
|
8
8
|
pyproject.toml
|
|
9
9
|
setup.py
|
|
10
|
-
.github/workflows/deploy.yml
|
|
11
10
|
.github/workflows/publish.yml
|
|
11
|
+
.github/workflows/test.yml
|
|
12
12
|
OperonDBS.egg-info/PKG-INFO
|
|
13
13
|
OperonDBS.egg-info/SOURCES.txt
|
|
14
14
|
OperonDBS.egg-info/dependency_links.txt
|
|
@@ -33,7 +33,6 @@ 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/application-release.md
|
|
37
36
|
docs/en/contributor/development-testing.md
|
|
38
37
|
docs/en/contributor/documentation-deployment.md
|
|
39
38
|
docs/en/contributor/index.md
|
|
@@ -85,7 +84,6 @@ docs/zh/architecture/overview.md
|
|
|
85
84
|
docs/zh/architecture/qc-and-rules.md
|
|
86
85
|
docs/zh/architecture/release-lifecycle.md
|
|
87
86
|
docs/zh/architecture/taxonomy-coverage.md
|
|
88
|
-
docs/zh/contributor/application-release.md
|
|
89
87
|
docs/zh/contributor/development-testing.md
|
|
90
88
|
docs/zh/contributor/documentation-deployment.md
|
|
91
89
|
docs/zh/contributor/index.md
|
|
@@ -167,14 +165,21 @@ operon/tui/actions.py
|
|
|
167
165
|
operon/tui/app.py
|
|
168
166
|
operon/tui/app.tcss
|
|
169
167
|
operon/tui/data.py
|
|
168
|
+
operon/tui/splash.py
|
|
169
|
+
operon/tui/splash_terminal.py
|
|
170
|
+
operon/tui/assets/splash.png
|
|
171
|
+
operon/tui/assets/splash.rgb.z
|
|
170
172
|
operon/tui/screens/__init__.py
|
|
171
173
|
operon/tui/screens/common.py
|
|
172
174
|
operon/tui/screens/config.py
|
|
175
|
+
operon/tui/screens/coverage.py
|
|
173
176
|
operon/tui/screens/decisions.py
|
|
174
177
|
operon/tui/screens/entities.py
|
|
175
178
|
operon/tui/screens/files.py
|
|
176
179
|
operon/tui/screens/files_ops.py
|
|
177
180
|
operon/tui/screens/home.py
|
|
181
|
+
operon/tui/screens/import_wizard.py
|
|
182
|
+
operon/tui/screens/publish.py
|
|
178
183
|
operon/tui/screens/runs.py
|
|
179
184
|
tests/__init__.py
|
|
180
185
|
tests/helpers.py
|
|
@@ -184,11 +189,11 @@ tests/integration/__init__.py
|
|
|
184
189
|
tests/integration/test_analysis_resume.py
|
|
185
190
|
tests/integration/test_analysis_shutdown.py
|
|
186
191
|
tests/integration/test_analysis_tools.py
|
|
187
|
-
tests/integration/test_application_build.py
|
|
188
192
|
tests/integration/test_execution_backends.py
|
|
189
193
|
tests/integration/test_lineage_cascade.py
|
|
190
194
|
tests/integration/test_ncbi_datasets_adapter.py
|
|
191
195
|
tests/integration/test_pipeline_and_release.py
|
|
196
|
+
tests/integration/test_python_packaging.py
|
|
192
197
|
tests/integration/test_taxonomy_coverage.py
|
|
193
198
|
tests/regression/__init__.py
|
|
194
199
|
tests/regression/test_correctness.py
|
|
@@ -227,7 +232,8 @@ tests/unit/test_taxonomy_edges.py
|
|
|
227
232
|
tests/unit/test_tools_edges.py
|
|
228
233
|
tests/unit/test_tui.py
|
|
229
234
|
tests/unit/test_tui_config.py
|
|
235
|
+
tests/unit/test_tui_publish.py
|
|
236
|
+
tests/unit/test_tui_splash_terminal.py
|
|
230
237
|
tests/unit/test_tui_writes.py
|
|
231
238
|
tests/unit/test_views_release_reports_edges.py
|
|
232
|
-
tests/unit/test_workflow_cli.py
|
|
233
|
-
tools/build.py
|
|
239
|
+
tests/unit/test_workflow_cli.py
|
|
@@ -6,19 +6,8 @@ questionary>=2.1
|
|
|
6
6
|
requests>=2.32
|
|
7
7
|
textual>=8.0
|
|
8
8
|
|
|
9
|
-
[build]
|
|
10
|
-
cx-Freeze>=8.4
|
|
11
|
-
myst-parser<5,>=4.0
|
|
12
|
-
Sphinx<9,>=7.4
|
|
13
|
-
sphinx-rtd-theme<4,>=3.0
|
|
14
|
-
cython>=3.0
|
|
15
|
-
|
|
16
|
-
[build:python_version < "3.11"]
|
|
17
|
-
tomli>=2.0
|
|
18
|
-
|
|
19
9
|
[dev]
|
|
20
10
|
coverage>=7.0
|
|
21
|
-
cx-Freeze>=8.4
|
|
22
11
|
cython>=3.0
|
|
23
12
|
pytest-cov>=7.0
|
|
24
13
|
pytest>=8.0
|
|
@@ -34,6 +23,9 @@ Sphinx<9,>=7.4
|
|
|
34
23
|
myst-parser<5,>=4.0
|
|
35
24
|
sphinx-rtd-theme<4,>=3.0
|
|
36
25
|
|
|
26
|
+
[docs:python_version < "3.11"]
|
|
27
|
+
tomli>=2.0
|
|
28
|
+
|
|
37
29
|
[test]
|
|
38
30
|
coverage>=7.0
|
|
39
31
|
paramiko>=3.4
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OperonDBS
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.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
|
|
@@ -32,20 +32,13 @@ Requires-Dist: pytest>=8.0; extra == "test"
|
|
|
32
32
|
Requires-Dist: setuptools>=77; extra == "test"
|
|
33
33
|
Requires-Dist: textual>=8.0; extra == "test"
|
|
34
34
|
Requires-Dist: cython>=3.0; extra == "test"
|
|
35
|
-
Provides-Extra: build
|
|
36
|
-
Requires-Dist: cx-Freeze>=8.4; extra == "build"
|
|
37
|
-
Requires-Dist: myst-parser<5,>=4.0; extra == "build"
|
|
38
|
-
Requires-Dist: Sphinx<9,>=7.4; extra == "build"
|
|
39
|
-
Requires-Dist: sphinx-rtd-theme<4,>=3.0; extra == "build"
|
|
40
|
-
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "build"
|
|
41
|
-
Requires-Dist: cython>=3.0; extra == "build"
|
|
42
35
|
Provides-Extra: docs
|
|
43
36
|
Requires-Dist: Sphinx<9,>=7.4; extra == "docs"
|
|
44
37
|
Requires-Dist: myst-parser<5,>=4.0; extra == "docs"
|
|
45
38
|
Requires-Dist: sphinx-rtd-theme<4,>=3.0; extra == "docs"
|
|
39
|
+
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "docs"
|
|
46
40
|
Provides-Extra: dev
|
|
47
41
|
Requires-Dist: coverage>=7.0; extra == "dev"
|
|
48
|
-
Requires-Dist: cx-Freeze>=8.4; extra == "dev"
|
|
49
42
|
Requires-Dist: cython>=3.0; extra == "dev"
|
|
50
43
|
Requires-Dist: pytest-cov>=7.0; extra == "dev"
|
|
51
44
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
@@ -57,7 +50,7 @@ Dynamic: license-file
|
|
|
57
50
|
|
|
58
51
|
# Operon
|
|
59
52
|
|
|
60
|
-
[](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [](https://codecov.io/gh/HYLi360/Operon)
|
|
61
54
|
|
|
62
55
|
A Python-based, **file-based database** designed for large-scale genomic data, used for archiving, quality control, analysis, and deterministic automation.
|
|
63
56
|
|
|
@@ -78,7 +71,7 @@ A Python-based, **file-based database** designed for large-scale genomic data, u
|
|
|
78
71
|
|
|
79
72
|
- Python 3.10+
|
|
80
73
|
- Runtime dependencies: `PyYAML`, `requests`, `aiohttp`, `Biopython`, `Paramiko`, `Textual`, and `questionary`; the built-in QC acceleration extension is compiled when the package is built
|
|
81
|
-
- Optional extras: `test` (pytest and Cython), `
|
|
74
|
+
- Optional extras: `test` (pytest and Cython), `docs` (documentation tooling), and `dev` (all development/build dependencies)
|
|
82
75
|
|
|
83
76
|
## Install
|
|
84
77
|
|
|
@@ -95,14 +88,6 @@ For an editable checkout, run from the repository root:
|
|
|
95
88
|
python -m pip install -e '.[dev]'
|
|
96
89
|
```
|
|
97
90
|
|
|
98
|
-
PyPI installation does not use cx_Freeze. To build the separately distributed
|
|
99
|
-
standalone application instead:
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
python -m pip install -e '.[build]'
|
|
103
|
-
python tools/build.py
|
|
104
|
-
```
|
|
105
|
-
|
|
106
91
|
## Documentation
|
|
107
92
|
|
|
108
93
|
The complete documentation is maintained in [English](docs/en/index.md) and [Chinese](docs/zh/index.md). To build the Sphinx site locally:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Operon
|
|
2
2
|
|
|
3
|
-
[](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [](https://codecov.io/gh/HYLi360/Operon)
|
|
4
4
|
|
|
5
5
|
A Python-based, **file-based database** designed for large-scale genomic data, used for archiving, quality control, analysis, and deterministic automation.
|
|
6
6
|
|
|
@@ -21,7 +21,7 @@ A Python-based, **file-based database** designed for large-scale genomic data, u
|
|
|
21
21
|
|
|
22
22
|
- Python 3.10+
|
|
23
23
|
- Runtime dependencies: `PyYAML`, `requests`, `aiohttp`, `Biopython`, `Paramiko`, `Textual`, and `questionary`; the built-in QC acceleration extension is compiled when the package is built
|
|
24
|
-
- Optional extras: `test` (pytest and Cython), `
|
|
24
|
+
- Optional extras: `test` (pytest and Cython), `docs` (documentation tooling), and `dev` (all development/build dependencies)
|
|
25
25
|
|
|
26
26
|
## Install
|
|
27
27
|
|
|
@@ -38,14 +38,6 @@ For an editable checkout, run from the repository root:
|
|
|
38
38
|
python -m pip install -e '.[dev]'
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
PyPI installation does not use cx_Freeze. To build the separately distributed
|
|
42
|
-
standalone application instead:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
python -m pip install -e '.[build]'
|
|
46
|
-
python tools/build.py
|
|
47
|
-
```
|
|
48
|
-
|
|
49
41
|
## Documentation
|
|
50
42
|
|
|
51
43
|
The complete documentation is maintained in [English](docs/en/index.md) and [Chinese](docs/zh/index.md). To build the Sphinx site locally:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Operon
|
|
2
2
|
|
|
3
|
-
[](https://github.com/HYLi360/Operon/actions/workflows/test.yml) [](https://codecov.io/gh/HYLi360/Operon)
|
|
4
4
|
|
|
5
5
|
一个基于 Python 的、面向大规模基因组数据的**基于文件的数据库**,用于归档、质控、分析与确定性自动化处理。
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
- Python 3.10 及以上版本
|
|
21
21
|
- 运行时依赖:`PyYAML`、`requests`、`aiohttp`、`Biopython`、`Paramiko`、`Textual` 与 `questionary`;内置 QC 加速扩展在构建软件包时编译
|
|
22
|
-
- 可选 extras:`test`(pytest 与 Cython)、`
|
|
22
|
+
- 可选 extras:`test`(pytest 与 Cython)、`docs`(文档工具)和 `dev`(全部开发/构建依赖)
|
|
23
23
|
|
|
24
24
|
## 安装
|
|
25
25
|
|
|
@@ -36,13 +36,6 @@ python -m pip install OperonDBS
|
|
|
36
36
|
python -m pip install -e '.[dev]'
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
PyPI 安装不使用 cx_Freeze。若要另行构建独立可执行应用:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
python -m pip install -e '.[build]'
|
|
43
|
-
python tools/build.py
|
|
44
|
-
```
|
|
45
|
-
|
|
46
39
|
## 文档
|
|
47
40
|
|
|
48
41
|
完整文档同时维护[中文](docs/zh/index.md)和[英文](docs/en/index.md)版本。本地构建 Sphinx 站点:
|
|
@@ -16,8 +16,8 @@ DOCS_DIR = Path(__file__).resolve().parent
|
|
|
16
16
|
REPO_ROOT = DOCS_DIR.parent
|
|
17
17
|
|
|
18
18
|
project = "Operon"
|
|
19
|
-
author = "Operon
|
|
20
|
-
copyright = "2026,
|
|
19
|
+
author = "Project Operon Development Group"
|
|
20
|
+
copyright = f"2026, {author}. All Rights Reserved."
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def _package_version() -> str:
|
|
@@ -25,7 +25,7 @@ The `remotes:` section of `project.yaml` can configure one or more SFTP remote m
|
|
|
25
25
|
- After `pull` restores a locally missing file, `files.status` returns to `CHECKSUM_VERIFIED`, and this change is written to `changes` just like the status changes from `verify`/`evict`;
|
|
26
26
|
- `ingest --source` also directly accepts `sftp://[user@]host[:port]/path` and `remote://<name>/<path>`; the latter must exist in the remote manifest and is identity-checked first, while the former is downloaded and assigned a fresh identity by ingest, then follows exactly the same archiving flow as a local file.
|
|
27
27
|
|
|
28
|
-
Paramiko is a core runtime dependency but remains lazily imported, so local-only commands do not initialize the SSH stack.
|
|
28
|
+
Paramiko is a core runtime dependency but remains lazily imported, so local-only commands do not initialize the SSH stack.
|
|
29
29
|
|
|
30
30
|
## Local control plane and remote data plane
|
|
31
31
|
|
|
@@ -21,9 +21,9 @@ The taxonomy coverage integration tests additionally cover taxonomy source-packa
|
|
|
21
21
|
|
|
22
22
|
## Special Note For Codex/ChatGPT
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
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.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
If you are Codex/ChatGPT, please execute TUI-related test code OUTSIDE the sandbox.
|
|
27
27
|
|
|
28
28
|
This information has also been updated in AGENTS.md.
|
|
29
29
|
|
|
@@ -34,5 +34,3 @@ Run the following from the repository root with the project virtual environment:
|
|
|
34
34
|
Dependencies are installed from the `docs` optional extra in `pyproject.toml`. RTD uses Python 3.12 and fails the build on Sphinx warnings, matching the strict local build and the CI gate.
|
|
35
35
|
|
|
36
36
|
The current setup publishes the two existing complete Markdown trees in one RTD project and does not require converting the source into gettext PO files. If the project later needs the platform-native language menu, separate search indexes, or independent translation-version lifecycles, create linked translation projects in RTD. The current bilingual source and mirrored relative paths can still be reused during that migration.
|
|
37
|
-
|
|
38
|
-
Official standalone application releases use the same `docs/conf.py`. Before freezing the application, `python tools/build.py` runs the strict Sphinx build and places its output in `share/doc/operon/html/` inside the release. Any documentation warning or missing language entry point prevents publication.
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
- [Repository Guidelines](repository-guide.md)
|
|
4
4
|
- [Development and Testing](development-testing.md)
|
|
5
5
|
- [PyPI Release](pypi-release.md)
|
|
6
|
-
- [Application Release](application-release.md)
|
|
7
6
|
- [Documentation builds and Read the Docs deployment](documentation-deployment.md)
|
|
8
7
|
|
|
9
8
|
```{toctree}
|
|
@@ -12,6 +11,5 @@
|
|
|
12
11
|
repository-guide
|
|
13
12
|
development-testing
|
|
14
13
|
pypi-release
|
|
15
|
-
application-release
|
|
16
14
|
documentation-deployment
|
|
17
15
|
```
|
|
@@ -4,9 +4,7 @@ The PyPI distribution is named `OperonDBS` because the `operon` distribution
|
|
|
4
4
|
name belongs to an unrelated project. This does not change the import name or
|
|
5
5
|
console command: users install `OperonDBS`, import `operon`, and run `operon`.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
PEP 517 build dependencies contain only setuptools and Cython; cx_Freeze stays
|
|
9
|
-
in the optional `build` extra and is used only by `python tools/build.py`.
|
|
7
|
+
The PEP 517 build dependencies contain only setuptools and Cython.
|
|
10
8
|
|
|
11
9
|
## GitHub Actions release
|
|
12
10
|
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
- `operon/remotes.py`: SFTP mirrors, push/pull, and remote URL downloads.
|
|
18
18
|
- `tests/`: `unit/`, `integration/`, `regression/`, `compatibility/` tests.
|
|
19
19
|
- `docs/`: user, architecture, and operations documentation.
|
|
20
|
-
- `build/release/v<version>/`: generated standalone application release directories.
|
|
21
20
|
|
|
22
21
|
## Collaboration conventions
|
|
23
22
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
## Platform support
|
|
11
11
|
|
|
12
|
-
Linux is the primary platform for
|
|
12
|
+
Linux is the primary platform for local
|
|
13
13
|
Slurm, and the broad external bioinformatics tool ecosystem. macOS is
|
|
14
14
|
supported for source-installed local execution and as an SSH/SFTP client,
|
|
15
15
|
including remote Slurm submission to a Linux host. Local resource sampling
|
|
@@ -18,8 +18,7 @@ uses procfs when available and the system `ps` command on macOS.
|
|
|
18
18
|
External commands configured in `tools.yaml` must themselves be installed for
|
|
19
19
|
the controller platform. SSH direct execution still requires util-linux
|
|
20
20
|
`setsid` on the remote host, so that compute-side mode targets Linux; this does
|
|
21
|
-
not prevent a Mac from acting as the controller.
|
|
22
|
-
standalone bundles are not currently published.
|
|
21
|
+
not prevent a Mac from acting as the controller.
|
|
23
22
|
|
|
24
23
|
## Install from PyPI
|
|
25
24
|
|
|
@@ -33,9 +32,7 @@ python -m pip install OperonDBS
|
|
|
33
32
|
```
|
|
34
33
|
|
|
35
34
|
Published wheels include the compiled QC parser. SSH/SFTP support and the TUI
|
|
36
|
-
are included in the standard installation.
|
|
37
|
-
cx_Freeze; that tool is only needed for the separate standalone application
|
|
38
|
-
directory.
|
|
35
|
+
are included in the standard installation.
|
|
39
36
|
|
|
40
37
|
## Install from the repository
|
|
41
38
|
|
|
@@ -57,12 +54,3 @@ operon --help
|
|
|
57
54
|
|
|
58
55
|
The first command prints `operon` followed by the installed version —
|
|
59
56
|
{{ operon_version }} for the release this documentation matches.
|
|
60
|
-
|
|
61
|
-
To build a standalone cx_Freeze application, install the build extra and use the unified release entry point:
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
python -m pip install -e '.[build]'
|
|
65
|
-
python tools/build.py
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
See [Application Release](../contributor/application-release.md) for the release directory layout and validation rules.
|
|
@@ -33,7 +33,7 @@ Do not point these variables at the project's parent directory, a disk root, or
|
|
|
33
33
|
.venv/bin/python -m operon --version
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
The full test suite must pass.
|
|
36
|
+
The full test suite must pass.
|
|
37
37
|
|
|
38
38
|
## 3. Record the pre-migration read-only baseline
|
|
39
39
|
|