albert 1.10.0rc2__tar.gz → 1.11.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {albert-1.10.0rc2 → albert-1.11.1}/.circleci/config.yml +1 -27
- {albert-1.10.0rc2 → albert-1.11.1}/PKG-INFO +1 -1
- albert-1.11.1/docs/collections/synthesis.md +1 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/concepts.md +11 -11
- albert-1.11.1/docs/examples/notebook.md +139 -0
- albert-1.11.1/docs/examples/property_data.md +184 -0
- albert-1.11.1/docs/examples/tasks.md +46 -0
- albert-1.11.1/docs/resources/synthesis.md +1 -0
- {albert-1.10.0rc2 → albert-1.11.1}/mkdocs.yml +9 -2
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/__init__.py +1 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/client.py +5 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/custom_templates.py +3 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/data_templates.py +118 -264
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/entity_types.py +19 -3
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/inventory.py +1 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/notebooks.py +154 -26
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/parameters.py +1 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/property_data.py +384 -280
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/reports.py +4 -0
- albert-1.11.1/src/albert/collections/synthesis.py +292 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/tasks.py +2 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/worksheets.py +3 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/shared/models/base.py +3 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/shared/models/patch.py +1 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/batch_data.py +4 -2
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/cas.py +3 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/custom_fields.py +3 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/data_templates.py +60 -12
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/entity_types.py +15 -4
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/inventory.py +6 -4
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/lists.py +3 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/notebooks.py +12 -7
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/parameter_groups.py +3 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/property_data.py +64 -5
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/sheets.py +16 -14
- albert-1.11.1/src/albert/resources/synthesis.py +61 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/tags.py +3 -1
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/tasks.py +4 -7
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/workflows.py +4 -2
- albert-1.11.1/src/albert/utils/data_template.py +791 -0
- albert-1.11.1/src/albert/utils/property_data.py +638 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/utils/tasks.py +3 -3
- albert-1.10.0rc2/src/albert/utils/data_template.py +0 -436
- {albert-1.10.0rc2 → albert-1.11.1}/.gitignore +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/.pre-commit-config.yaml +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/.vscode/settings.json +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/CHANGELOG.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/CONTRIBUTING.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/LICENSE +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/README.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/CONTRIBUTING.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/albert.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/assets/Vector_Favicon_Blue.svg +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/assets/Wordmark_Black.png +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/assets/Wordmark_White.png +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/authentication.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/activities.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/attachments.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/base.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/batch_data.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/btdataset.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/btinsight.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/btmodel.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/cas.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/companies.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/custom_fields.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/custom_templates.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/data_columns.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/data_templates.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/entity_types.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/files.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/hazards.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/inventory.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/links.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/lists.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/locations.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/lots.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/notebooks.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/notes.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/parameter_groups.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/parameters.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/pricings.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/product_design.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/projects.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/property_data.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/reports.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/roles.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/storage_classes.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/storage_locations.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/substances.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/tags.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/tasks.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/un_numbers.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/units.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/users.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/workflows.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/collections/worksheets.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/configuration.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/credentials.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/index.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/installation.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/migration.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/activities.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/attachments.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/batch_data.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/btdataset.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/btinsight.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/btmodel.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/cas.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/companies.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/custom_fields.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/custom_templates.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/data_columns.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/data_templates.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/entity_types.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/files.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/hazards.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/identifiers.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/inventory.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/links.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/lists.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/locations.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/lots.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/notebooks.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/notes.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/parameter_groups.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/parameters.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/pricings.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/product_design.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/projects.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/property_data.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/reports.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/roles.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/sheets.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/storage_classes.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/storage_locations.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/substances.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/tags.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/tasks.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/un_numbers.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/units.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/users.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/workflows.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/resources/worksheets.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/sso.md +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/docs/styles/extra.css +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/pyproject.toml +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/scripts/validate_release_tag.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/scripts/validate_version_bump.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/setup.sh +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/activities.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/attachments.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/base.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/batch_data.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/btdataset.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/btinsight.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/btmodel.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/cas.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/companies.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/custom_fields.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/data_columns.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/files.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/hazards.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/links.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/lists.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/locations.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/lots.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/notes.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/parameter_groups.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/pricings.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/product_design.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/projects.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/report_templates.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/roles.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/storage_classes.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/storage_locations.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/substance.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/tags.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/un_numbers.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/units.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/users.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/collections/workflows.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/auth/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/auth/_listener.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/auth/_manager.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/auth/credentials.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/auth/sso.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/base.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/logging.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/pagination.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/session.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/shared/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/shared/enums.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/shared/identifiers.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/core/shared/types.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/exceptions.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/_mixins.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/acls.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/activities.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/attachments.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/btdataset.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/btinsight.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/btmodel.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/companies.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/custom_templates.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/data_columns.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/facet.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/files.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/hazards.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/links.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/locations.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/lots.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/notes.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/parameters.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/pricings.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/product_design.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/projects.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/report_templates.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/reports.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/roles.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/storage_classes.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/storage_locations.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/substance.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/tagged_base.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/un_numbers.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/units.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/users.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/worker_jobs.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/resources/worksheets.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/utils/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/utils/_auth.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/utils/_patch.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/src/albert/utils/inventory.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_activities.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_attachments.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_batch_data.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_btdataset.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_btinsight.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_btmodel.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_cas.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_company.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_custom_fields.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_custom_templates.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_data_columns.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_data_templates.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_entity_types.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_files.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_hazards.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_inventory.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_links.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_lists.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_locations.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_lots.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_notebooks.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_notes.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_parameter_groups.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_parameters.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_pricings.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_product_design.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_projects.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_property_data.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_report_templates.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_reports.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_roles.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_storage_classes.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_storage_locations.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_substance.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_tags.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_tasks.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_un_number.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_units.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_users.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_workflows.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/collections/test_worksheet.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/conftest.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/core/shared/__init__.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/core/shared/test_identifiers.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/core/shared/test_types.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/core/test_auth.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/data/SDS_HCL.pdf +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/data/dontpanic.jpg +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/resources/test_inventory.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/resources/test_lots.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/resources/test_notebooks.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/resources/test_sheets.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/seeding.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/utils/fake_session.py +0 -0
- {albert-1.10.0rc2 → albert-1.11.1}/tests/utils/test_patches.py +0 -0
|
@@ -12,29 +12,6 @@ commands:
|
|
|
12
12
|
command: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
|
-
snyk_app_scan:
|
|
16
|
-
executor:
|
|
17
|
-
name: python/default
|
|
18
|
-
tag: "3.10.15"
|
|
19
|
-
steps:
|
|
20
|
-
- checkout
|
|
21
|
-
- add_ssh_keys:
|
|
22
|
-
fingerprints:
|
|
23
|
-
- "SHA256:8xP/cfKKsXJOx9XDojfxU3nx9NRtDCEVSVm0uL6qL5I"
|
|
24
|
-
- install_uv
|
|
25
|
-
- run:
|
|
26
|
-
name: Export dependencies
|
|
27
|
-
command: |
|
|
28
|
-
uv sync
|
|
29
|
-
uv export > requirements_lock.txt
|
|
30
|
-
uv pip compile requirements_lock.txt > requirements.txt
|
|
31
|
-
uv pip install --system -r requirements.txt
|
|
32
|
-
- snyk/scan:
|
|
33
|
-
fail-on-issues: true
|
|
34
|
-
monitor-on-build: true
|
|
35
|
-
severity-threshold: high
|
|
36
|
-
token-variable: SNYK_TOKEN
|
|
37
|
-
|
|
38
15
|
test:
|
|
39
16
|
executor:
|
|
40
17
|
name: python/default
|
|
@@ -146,7 +123,7 @@ jobs:
|
|
|
146
123
|
exit 0
|
|
147
124
|
fi
|
|
148
125
|
|
|
149
|
-
SEMVER_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+(
|
|
126
|
+
SEMVER_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+((a|b|rc|dev)[0-9]+|-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$'
|
|
150
127
|
|
|
151
128
|
if [[ "$CIRCLE_TAG" =~ $SEMVER_REGEX ]]; then
|
|
152
129
|
VERSION="${CIRCLE_TAG#v}"
|
|
@@ -161,9 +138,6 @@ jobs:
|
|
|
161
138
|
workflows:
|
|
162
139
|
main:
|
|
163
140
|
jobs:
|
|
164
|
-
- snyk_app_scan:
|
|
165
|
-
name: Snyk App Scan
|
|
166
|
-
context: dev
|
|
167
141
|
- test:
|
|
168
142
|
name: Test
|
|
169
143
|
context: dev
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: albert
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.1
|
|
4
4
|
Summary: The official Python SDK for the Albert Invent platform.
|
|
5
5
|
Project-URL: Homepage, https://www.albertinvent.com/
|
|
6
6
|
Project-URL: Documentation, https://docs.developer.albertinvent.com/albert-python
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
::: albert.collections.synthesis.SynthesisCollection
|
|
@@ -67,7 +67,7 @@ project = Project(
|
|
|
67
67
|
)
|
|
68
68
|
|
|
69
69
|
# Or pass full object and let SDK convert
|
|
70
|
-
location = client.locations.get_by_id("loc123")
|
|
70
|
+
location = client.locations.get_by_id(id="loc123")
|
|
71
71
|
project = Project(
|
|
72
72
|
description="Example",
|
|
73
73
|
locations=[location] # Automatically converted
|
|
@@ -198,15 +198,15 @@ Tags are searchable and help categorize content.
|
|
|
198
198
|
|
|
199
199
|
Concepts you should know:
|
|
200
200
|
|
|
201
|
-
| Concept
|
|
202
|
-
|
|
203
|
-
| Resource Models
|
|
204
|
-
| Resource Collections
|
|
205
|
-
| EntityLink
|
|
206
|
-
| Custom Fields & Lists
|
|
207
|
-
| SerializeAsEntityLink
|
|
208
|
-
| Authentication
|
|
209
|
-
| Partial Records
|
|
210
|
-
| Tags and Metadata
|
|
201
|
+
| Concept | Purpose |
|
|
202
|
+
| --------------------- | -------------------------------------- |
|
|
203
|
+
| Resource Models | Define the structure of data entities |
|
|
204
|
+
| Resource Collections | Manage CRUD operations for each model |
|
|
205
|
+
| EntityLink | Represents foreign key references |
|
|
206
|
+
| Custom Fields & Lists | Add structured metadata to resources |
|
|
207
|
+
| SerializeAsEntityLink | Allows transparent references or links |
|
|
208
|
+
| Authentication | Supports static token, OAuth2, and SSO |
|
|
209
|
+
| Partial Records | Lightweight search results |
|
|
210
|
+
| Tags and Metadata | Categorize and extend data |
|
|
211
211
|
|
|
212
212
|
These concepts form the foundation of working effectively with the Albert SDK.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Notebooks
|
|
2
|
+
|
|
3
|
+
Notebooks in Albert Invent are a tool for organizing your laboratory work in a centralized, secure place that is connected to other parts of the Albert platform. They allow you to capture unstructured notes and data, attachments, images, and documents within Projects, set up complex synthesis instructions, document Standard Operating Procedures (SOPs), and collaborate with team members.
|
|
4
|
+
|
|
5
|
+
## Create a notebook
|
|
6
|
+
|
|
7
|
+
!!! example "Create an empty notebook"
|
|
8
|
+
```python
|
|
9
|
+
from albert import Albert
|
|
10
|
+
from albert.resources.notebooks import Notebook
|
|
11
|
+
|
|
12
|
+
client = Albert.from_client_credentials()
|
|
13
|
+
|
|
14
|
+
notebook = Notebook(parent_id="PRJ123", name="Reaction Notes")
|
|
15
|
+
notebook = client.notebooks.create(notebook=notebook)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Add different block types
|
|
19
|
+
|
|
20
|
+
!!! example "Add header, paragraph, checklist, table, image, and attachment blocks"
|
|
21
|
+
```python
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
from albert import Albert
|
|
25
|
+
from albert.resources.notebooks import (
|
|
26
|
+
AttachesBlock,
|
|
27
|
+
AttachesContent,
|
|
28
|
+
ChecklistBlock,
|
|
29
|
+
ChecklistContent,
|
|
30
|
+
ChecklistItem,
|
|
31
|
+
HeaderBlock,
|
|
32
|
+
HeaderContent,
|
|
33
|
+
ImageBlock,
|
|
34
|
+
ImageContent,
|
|
35
|
+
ParagraphBlock,
|
|
36
|
+
ParagraphContent,
|
|
37
|
+
TableBlock,
|
|
38
|
+
TableContent,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
client = Albert.from_client_credentials()
|
|
42
|
+
|
|
43
|
+
notebook = client.notebooks.get_by_id(id="NTB123")
|
|
44
|
+
|
|
45
|
+
# Provide a file path to upload for image and attachment blocks.
|
|
46
|
+
image_path = Path("/path/to/image.png")
|
|
47
|
+
image_block = ImageBlock(content=ImageContent(file_path=image_path, with_background=True))
|
|
48
|
+
attaches_block = AttachesBlock(content=AttachesContent(file_path=image_path))
|
|
49
|
+
|
|
50
|
+
notebook.blocks = [
|
|
51
|
+
HeaderBlock(content=HeaderContent(level=2, text="Notebook overview")),
|
|
52
|
+
ParagraphBlock(content=ParagraphContent(text="Run conditions and observations.")),
|
|
53
|
+
ChecklistBlock(
|
|
54
|
+
content=ChecklistContent(
|
|
55
|
+
items=[
|
|
56
|
+
ChecklistItem(checked=False, text="Prepare reagents"),
|
|
57
|
+
ChecklistItem(checked=True, text="Start reaction"),
|
|
58
|
+
]
|
|
59
|
+
)
|
|
60
|
+
),
|
|
61
|
+
TableBlock(
|
|
62
|
+
content=TableContent(
|
|
63
|
+
content=[
|
|
64
|
+
["Reagent", "Mass (mg)"],
|
|
65
|
+
["A", "10"],
|
|
66
|
+
["B", "25"],
|
|
67
|
+
],
|
|
68
|
+
with_headings=True,
|
|
69
|
+
)
|
|
70
|
+
),
|
|
71
|
+
image_block,
|
|
72
|
+
attaches_block,
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
notebook = client.notebooks.update_block_content(notebook=notebook)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
!!! note
|
|
79
|
+
When `file_path` is set on image or attachment content, the SDK uploads the file and fills in
|
|
80
|
+
`file_key`, `format`, and (for attachments) `title`.
|
|
81
|
+
|
|
82
|
+
## Add a Ketcher block
|
|
83
|
+
|
|
84
|
+
!!! example "Create a new Ketcher block with SMILES"
|
|
85
|
+
```python
|
|
86
|
+
from albert import Albert
|
|
87
|
+
from albert.resources.notebooks import KetcherBlock, KetcherContent
|
|
88
|
+
|
|
89
|
+
client = Albert.from_client_credentials()
|
|
90
|
+
|
|
91
|
+
notebook = client.notebooks.get_by_id(id="NTB123")
|
|
92
|
+
notebook.blocks.append(
|
|
93
|
+
KetcherBlock(content=KetcherContent(smiles="CCO"))
|
|
94
|
+
)
|
|
95
|
+
notebook = client.notebooks.update_block_content(notebook=notebook)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
!!! warning
|
|
99
|
+
Updating existing Ketcher blocks is not supported. To change a Ketcher block, remove
|
|
100
|
+
it from `notebook.blocks` and add a new Ketcher block with the desired `smiles`.
|
|
101
|
+
|
|
102
|
+
## Replace a Ketcher block
|
|
103
|
+
|
|
104
|
+
!!! example "Delete the old Ketcher block and add a new one"
|
|
105
|
+
```python
|
|
106
|
+
from albert import Albert
|
|
107
|
+
from albert.resources.notebooks import KetcherBlock, KetcherContent
|
|
108
|
+
|
|
109
|
+
client = Albert.from_client_credentials()
|
|
110
|
+
|
|
111
|
+
notebook = client.notebooks.get_by_id(id="NTB123")
|
|
112
|
+
|
|
113
|
+
# Drop existing Ketcher blocks (this deletes them on update).
|
|
114
|
+
notebook.blocks = [b for b in notebook.blocks if b.type != "ketcher"]
|
|
115
|
+
|
|
116
|
+
# Add a new Ketcher block.
|
|
117
|
+
notebook.blocks.append(
|
|
118
|
+
KetcherBlock(content=KetcherContent(smiles="C1=CC=CC=C1"))
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
notebook = client.notebooks.update_block_content(notebook=notebook)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Copy a notebook
|
|
125
|
+
|
|
126
|
+
!!! example "Copy a notebook to another parent"
|
|
127
|
+
```python
|
|
128
|
+
from albert import Albert
|
|
129
|
+
from albert.resources.notebooks import NotebookCopyInfo, NotebookCopyType
|
|
130
|
+
|
|
131
|
+
client = Albert.from_client_credentials()
|
|
132
|
+
|
|
133
|
+
copy_info = NotebookCopyInfo(id="NTB123", parent_id="PRJ456")
|
|
134
|
+
notebook_copy = client.notebooks.copy(
|
|
135
|
+
notebook_copy_info=copy_info,
|
|
136
|
+
type=NotebookCopyType.PROJECT,
|
|
137
|
+
)
|
|
138
|
+
print(notebook_copy.id)
|
|
139
|
+
```
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Property Data
|
|
2
|
+
|
|
3
|
+
Property data refers to the results collected from a Property Task in Albert. This data is captured using Data Templates, which allow for the collection of clean, structured data about your experiments.
|
|
4
|
+
|
|
5
|
+
## Update an existing trial row
|
|
6
|
+
|
|
7
|
+
!!! example "Update a trial row"
|
|
8
|
+
```python
|
|
9
|
+
from albert import Albert
|
|
10
|
+
from albert.resources.property_data import (
|
|
11
|
+
CurvePropertyValue,
|
|
12
|
+
ImagePropertyValue,
|
|
13
|
+
TaskDataColumn,
|
|
14
|
+
TaskPropertyCreate,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
client = Albert.from_client_credentials()
|
|
18
|
+
|
|
19
|
+
task_id = "TAS123"
|
|
20
|
+
inventory_id = "INV123"
|
|
21
|
+
block_id = "BLK1"
|
|
22
|
+
|
|
23
|
+
task_ptd = client.property_data.get_task_block_properties(
|
|
24
|
+
inventory_id=inventory_id,
|
|
25
|
+
task_id=task_id,
|
|
26
|
+
block_id=block_id,
|
|
27
|
+
)
|
|
28
|
+
dt = task_ptd.data_template
|
|
29
|
+
|
|
30
|
+
# trial_number maps to the row number in the task data.
|
|
31
|
+
# when provided, it updates that row for the given columns.
|
|
32
|
+
properties = [
|
|
33
|
+
TaskPropertyCreate(
|
|
34
|
+
data_column=TaskDataColumn(data_column_id="DAC123", column_sequence="COL4"),
|
|
35
|
+
value="10",
|
|
36
|
+
trial_number=2,
|
|
37
|
+
data_template=dt,
|
|
38
|
+
),
|
|
39
|
+
TaskPropertyCreate(
|
|
40
|
+
data_column=TaskDataColumn(data_column_id="DAC456", column_sequence="COL5"),
|
|
41
|
+
value="enum2",
|
|
42
|
+
trial_number=1,
|
|
43
|
+
data_template=dt,
|
|
44
|
+
),
|
|
45
|
+
# image property data
|
|
46
|
+
TaskPropertyCreate(
|
|
47
|
+
data_column=TaskDataColumn(data_column_id="DAC789", column_sequence="COL1"),
|
|
48
|
+
value=ImagePropertyValue(file_path="path/to/image.png"),
|
|
49
|
+
trial_number=1,
|
|
50
|
+
data_template=dt,
|
|
51
|
+
),
|
|
52
|
+
# curve property data (CSV import by default)
|
|
53
|
+
TaskPropertyCreate(
|
|
54
|
+
data_column=TaskDataColumn(data_column_id="DAC313", column_sequence="COL3"),
|
|
55
|
+
value=CurvePropertyValue(
|
|
56
|
+
file_path="path/to/curve.csv",
|
|
57
|
+
field_mapping={"temperature": "Temperature", "cnt": "Count"},
|
|
58
|
+
),
|
|
59
|
+
trial_number=1,
|
|
60
|
+
data_template=dt,
|
|
61
|
+
),
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
client.property_data.update_or_create_task_properties(
|
|
65
|
+
inventory_id=inventory_id,
|
|
66
|
+
task_id=task_id,
|
|
67
|
+
block_id=block_id,
|
|
68
|
+
properties=properties,
|
|
69
|
+
return_scope="block",
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Add a new trial row
|
|
74
|
+
|
|
75
|
+
!!! example "Add a new trial row"
|
|
76
|
+
```python
|
|
77
|
+
from albert.resources.property_data import TaskDataColumn, TaskPropertyCreate
|
|
78
|
+
|
|
79
|
+
task_ptd = client.property_data.get_task_block_properties(
|
|
80
|
+
inventory_id=inventory_id,
|
|
81
|
+
task_id=task_id,
|
|
82
|
+
block_id=block_id,
|
|
83
|
+
)
|
|
84
|
+
dt = task_ptd.data_template
|
|
85
|
+
|
|
86
|
+
# Omitting trial_number creates a new row in the task data table.
|
|
87
|
+
new_row = [
|
|
88
|
+
TaskPropertyCreate(
|
|
89
|
+
data_column=TaskDataColumn(data_column_id="DAC123", column_sequence="COL4"),
|
|
90
|
+
value="25",
|
|
91
|
+
data_template=dt,
|
|
92
|
+
)
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
client.property_data.update_or_create_task_properties(
|
|
96
|
+
inventory_id=inventory_id,
|
|
97
|
+
task_id=task_id,
|
|
98
|
+
block_id=block_id,
|
|
99
|
+
properties=new_row,
|
|
100
|
+
return_scope="block",
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Void data row
|
|
105
|
+
|
|
106
|
+
!!! example "Void task data"
|
|
107
|
+
```python
|
|
108
|
+
from albert import Albert
|
|
109
|
+
|
|
110
|
+
client = Albert.from_client_credentials()
|
|
111
|
+
|
|
112
|
+
task_id = "TAS123"
|
|
113
|
+
inventory_id = "INV123"
|
|
114
|
+
block_id = "BLK1"
|
|
115
|
+
|
|
116
|
+
client.property_data.void_task_data(
|
|
117
|
+
inventory_id=inventory_id,
|
|
118
|
+
task_id=task_id,
|
|
119
|
+
block_id=block_id,
|
|
120
|
+
)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
!!! example "Void interval data"
|
|
124
|
+
```python
|
|
125
|
+
from albert import Albert
|
|
126
|
+
|
|
127
|
+
client = Albert.from_client_credentials()
|
|
128
|
+
|
|
129
|
+
task_id = "TAS123"
|
|
130
|
+
inventory_id = "INV123"
|
|
131
|
+
block_id = "BLK1"
|
|
132
|
+
|
|
133
|
+
interval_id = next(
|
|
134
|
+
(
|
|
135
|
+
combo.interval_id
|
|
136
|
+
for combo in client.property_data.check_for_task_data(task_id=task_id)
|
|
137
|
+
if combo.inventory_id == inventory_id and combo.block_id == block_id
|
|
138
|
+
),
|
|
139
|
+
None,
|
|
140
|
+
)
|
|
141
|
+
if not interval_id:
|
|
142
|
+
raise ValueError("No interval data found for the block/inventory combination.")
|
|
143
|
+
|
|
144
|
+
client.property_data.void_interval_data(
|
|
145
|
+
inventory_id=inventory_id,
|
|
146
|
+
task_id=task_id,
|
|
147
|
+
block_id=block_id,
|
|
148
|
+
interval_id=interval_id,
|
|
149
|
+
)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
!!! example "Void trial data"
|
|
153
|
+
```python
|
|
154
|
+
from albert import Albert
|
|
155
|
+
|
|
156
|
+
client = Albert.from_client_credentials()
|
|
157
|
+
|
|
158
|
+
task_id = "TAS123"
|
|
159
|
+
inventory_id = "INV123"
|
|
160
|
+
block_id = "BLK1"
|
|
161
|
+
|
|
162
|
+
interval_id = next(
|
|
163
|
+
(
|
|
164
|
+
combo.interval_id
|
|
165
|
+
for combo in client.property_data.check_for_task_data(task_id=task_id)
|
|
166
|
+
if combo.inventory_id == inventory_id and combo.block_id == block_id
|
|
167
|
+
),
|
|
168
|
+
None,
|
|
169
|
+
)
|
|
170
|
+
if not interval_id:
|
|
171
|
+
raise ValueError("No interval data found for the block/inventory combination.")
|
|
172
|
+
|
|
173
|
+
client.property_data.void_trial_data(
|
|
174
|
+
inventory_id=inventory_id,
|
|
175
|
+
task_id=task_id,
|
|
176
|
+
block_id=block_id,
|
|
177
|
+
trial_number=2,
|
|
178
|
+
interval_id=interval_id,
|
|
179
|
+
)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
!!! note
|
|
183
|
+
Use the corresponding `unvoid_task_data`, `unvoid_interval_data`, and `unvoid_trial_data`
|
|
184
|
+
methods to unvoid records.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
Tasks in Albert Invent are a way to manage and track your daily work and collaborate with colleagues. There are three types of tasks: Batch Tasks, Property Tasks, and General Tasks.
|
|
4
|
+
|
|
5
|
+
## Import results
|
|
6
|
+
|
|
7
|
+
This feature enables users to import a .csv file straight into the Data Template of a Property Task allowing them to easily mass enter results without having to type them in manually or copy-paste.
|
|
8
|
+
|
|
9
|
+
!!! example "Import results from a CSV file"
|
|
10
|
+
```python
|
|
11
|
+
from albert import Albert
|
|
12
|
+
from albert.resources.data_templates import ImportMode
|
|
13
|
+
|
|
14
|
+
client = Albert.from_client_credentials()
|
|
15
|
+
|
|
16
|
+
task = client.tasks.import_results(
|
|
17
|
+
task_id="TAS123",
|
|
18
|
+
inventory_id="INV123",
|
|
19
|
+
data_template_id="DT123",
|
|
20
|
+
file_path="path/to/results.csv",
|
|
21
|
+
field_mapping={"comm": "Comments", "Solvent": " Solvent, ppm"},
|
|
22
|
+
mode=ImportMode.CSV,
|
|
23
|
+
)
|
|
24
|
+
print(task)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
!!! example "Import results using a script"
|
|
28
|
+
```python
|
|
29
|
+
from albert import Albert
|
|
30
|
+
from albert.resources.data_templates import ImportMode
|
|
31
|
+
|
|
32
|
+
client = Albert.from_client_credentials()
|
|
33
|
+
|
|
34
|
+
task = client.tasks.import_results(
|
|
35
|
+
task_id="TAS123",
|
|
36
|
+
inventory_id="INV123",
|
|
37
|
+
data_template_id="DT123",
|
|
38
|
+
block_id="BLK1",
|
|
39
|
+
file_path="path/to/results.csv",
|
|
40
|
+
mode=ImportMode.SCRIPT,
|
|
41
|
+
)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
!!! warning
|
|
45
|
+
`import_results` deletes existing property data for the matching task/block/inventory/lot/interval
|
|
46
|
+
before writing new values. Use with care if you need to preserve older results.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
::: albert.resources.synthesis
|
|
@@ -23,7 +23,7 @@ use_directory_urls: true
|
|
|
23
23
|
theme:
|
|
24
24
|
name: "material"
|
|
25
25
|
font:
|
|
26
|
-
text:
|
|
26
|
+
text: Aeonik Regular
|
|
27
27
|
logo: assets/Wordmark_White.png
|
|
28
28
|
favicon: assets/Vector_Favicon_Blue.svg
|
|
29
29
|
features:
|
|
@@ -40,6 +40,7 @@ theme:
|
|
|
40
40
|
- navigation.sections # Sidebar sections
|
|
41
41
|
- navigation.top # Scroll-to-top button
|
|
42
42
|
- navigation.tracking # Highlight section in sidebar
|
|
43
|
+
- navigation.collapse
|
|
43
44
|
- search.suggest # Smart search suggestions
|
|
44
45
|
- toc.follow # Highlight TOC entry while scrolling
|
|
45
46
|
|
|
@@ -126,7 +127,7 @@ nav:
|
|
|
126
127
|
- SDK Reference:
|
|
127
128
|
- Clients:
|
|
128
129
|
- Albert Client: albert.md
|
|
129
|
-
-
|
|
130
|
+
- Authentication:
|
|
130
131
|
- Albert Client Credentials: credentials.md
|
|
131
132
|
- Albert SSO Client: sso.md
|
|
132
133
|
- Collections:
|
|
@@ -165,6 +166,7 @@ nav:
|
|
|
165
166
|
- Storage Classes: collections/storage_classes.md
|
|
166
167
|
- Storage Locations: collections/storage_locations.md
|
|
167
168
|
- Substances: collections/substances.md
|
|
169
|
+
- Synthesis: collections/synthesis.md
|
|
168
170
|
- Tags: collections/tags.md
|
|
169
171
|
- Tasks: collections/tasks.md
|
|
170
172
|
- UN Numbers: collections/un_numbers.md
|
|
@@ -208,6 +210,7 @@ nav:
|
|
|
208
210
|
- Storage Classes: resources/storage_classes.md
|
|
209
211
|
- Storage Locations: resources/storage_locations.md
|
|
210
212
|
- Substances: resources/substances.md
|
|
213
|
+
- Synthesis: resources/synthesis.md
|
|
211
214
|
- Tags: resources/tags.md
|
|
212
215
|
- Tasks: resources/tasks.md
|
|
213
216
|
- UN Numbers: resources/un_numbers.md
|
|
@@ -217,6 +220,10 @@ nav:
|
|
|
217
220
|
- Worksheets:
|
|
218
221
|
- Worksheets: resources/worksheets.md
|
|
219
222
|
- Sheets: resources/sheets.md
|
|
223
|
+
- Examples:
|
|
224
|
+
- Property Data: examples/property_data.md
|
|
225
|
+
- Tasks: examples/tasks.md
|
|
226
|
+
- Notebooks: examples/notebook.md
|
|
220
227
|
|
|
221
228
|
validation:
|
|
222
229
|
omitted_files: warn
|
|
@@ -38,6 +38,7 @@ from albert.collections.roles import RoleCollection
|
|
|
38
38
|
from albert.collections.storage_classes import StorageClassesCollection
|
|
39
39
|
from albert.collections.storage_locations import StorageLocationsCollection
|
|
40
40
|
from albert.collections.substance import SubstanceCollection
|
|
41
|
+
from albert.collections.synthesis import SynthesisCollection
|
|
41
42
|
from albert.collections.tags import TagCollection
|
|
42
43
|
from albert.collections.tasks import TaskCollection
|
|
43
44
|
from albert.collections.un_numbers import UnNumberCollection
|
|
@@ -188,6 +189,10 @@ class Albert:
|
|
|
188
189
|
def lots(self) -> LotCollection:
|
|
189
190
|
return LotCollection(session=self.session)
|
|
190
191
|
|
|
192
|
+
@property
|
|
193
|
+
def synthesis(self) -> SynthesisCollection:
|
|
194
|
+
return SynthesisCollection(session=self.session)
|
|
195
|
+
|
|
191
196
|
@property
|
|
192
197
|
def units(self) -> UnitCollection:
|
|
193
198
|
return UnitCollection(session=self.session)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from collections.abc import Iterator
|
|
2
2
|
|
|
3
|
+
from pydantic import validate_call
|
|
4
|
+
|
|
3
5
|
from albert.collections.base import BaseCollection
|
|
4
6
|
from albert.core.logging import logger
|
|
5
7
|
from albert.core.pagination import AlbertPaginator
|
|
@@ -28,6 +30,7 @@ class CustomTemplatesCollection(BaseCollection):
|
|
|
28
30
|
super().__init__(session=session)
|
|
29
31
|
self.base_path = f"/api/{CustomTemplatesCollection._api_version}/customtemplates"
|
|
30
32
|
|
|
33
|
+
@validate_call
|
|
31
34
|
def get_by_id(self, *, id: CustomTemplateId) -> CustomTemplate:
|
|
32
35
|
"""Get a Custom Template by ID
|
|
33
36
|
|