{"id":28546453,"url":"https://github.com/exomars-pancam/passthrough","last_synced_at":"2025-07-07T06:31:14.676Z","repository":{"id":49111899,"uuid":"336113088","full_name":"ExoMars-PanCam/passthrough","owner":"ExoMars-PanCam","description":"Template-Driven PDS4 Product Generation","archived":false,"fork":false,"pushed_at":"2021-06-28T15:20:52.000Z","size":1730,"stargazers_count":4,"open_issues_count":11,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-09T23:43:04.141Z","etag":null,"topics":["esa","nasa","pds4","planetary-data"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ExoMars-PanCam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-02-04T23:46:20.000Z","updated_at":"2023-11-14T14:11:09.000Z","dependencies_parsed_at":"2022-09-26T20:30:41.808Z","dependency_job_id":null,"html_url":"https://github.com/ExoMars-PanCam/passthrough","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ExoMars-PanCam/passthrough","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExoMars-PanCam%2Fpassthrough","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExoMars-PanCam%2Fpassthrough/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExoMars-PanCam%2Fpassthrough/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExoMars-PanCam%2Fpassthrough/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ExoMars-PanCam","download_url":"https://codeload.github.com/ExoMars-PanCam/passthrough/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExoMars-PanCam%2Fpassthrough/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264027532,"owners_count":23546093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esa","nasa","pds4","planetary-data"],"created_at":"2025-06-09T23:39:34.697Z","updated_at":"2025-07-07T06:31:14.663Z","avatar_url":"https://github.com/ExoMars-PanCam.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Passthrough - Template-Driven PDS4 Data Product Generation in Python\nThe Passthrough software library seeks to provide PDS4 data processors with an\nintegrated solution for generating output labels based on declarative product type\ntemplates. It serves as a complementary counterpart to the [PDS4 Tools][1] read-in\nlibrary, enabling processors to interact natively with the PDS4 format without the need\nfor intermediary internal product representations or separate file formats.\n\nTo learn more, visit the project's [documentation][2].\n\n## Installation\nThe Passthrough library lives on [PyPI][3] and can be installed with\n`pip`:\n```commandline\npip install passthrough\n```\nYou'll need to have installed Python 3.6 or newer, and the package will pull in `lxml` \nand `numpy` as dependencies.\n\n## Development setup\nThe project uses [Poetry][4] to manage dependencies and packaging. After cloning the \nrepository and installing Poetry (e.g. `pipx install poetry`), the following steps \n(executed from the project root directory) will initialise the development environment.\n\nCreate venv (substitute for the version you want to work against):\n```commandline\npoetry env use python3.6  \n```\nFetch dependencies defined in [pyproject.toml][5] and install project in \ndevelopment mode:\n```commandline\npoetry install  \n```    \n\nPlease refer to the Poetry documentation for further information on its usage.\n\n## Feature roadmap\n### Near term / high priority\n- [ ] Documentation revamp (MkDocs, tutorial, api) - *in progress*\n- [ ] Helpers on the API side for working with `File_Area_Observational` - *in progress*\n- [ ] Automated test suite\n- [ ] Continuous integration\n### Longer term / lower priority\n- [ ] Validation entry point script capable of statically checking templates\n- [ ] If needed: `strict` property which actively discards non-`required` elements:\n  in the `fetch` context, even if a source element is found; in the non-`fetch` context,\n  even if the element is populated\n- [ ] If needed: `ignore` property which allows unpopulated elements to remain in the \n  exported label (for when a downstream tool will perform modifications to the product \n  before it is validated for correctness / ingested in the archive)\n- [ ] If needed: the ability to add element XML attributes via the template (unlikely?)\n- [ ] Support for no-default-prefix XPath expressions via internal substitution \n  (supporting XPath predicates etc. will require a tokenizer/parser be \n  built/commandeered, which is low on the priority list)\n### Completed  \n- [x] Adopt Poetry for packaging and dependency management\n- [x] Full support for logging\n- [x] Interoperability with `pds4_tools` loaded source labels\n- [x] Common label interrogation/manipulation functionality exposed for clients to use\n- [x] Add support for multi-fill (fill node in node-set based on which multi branch \n  context node belongs to)\n- [x] Add support for fill string formatting (if node is populated and contains a \n  {}-pair, substitute in fill result)\n- [x] Create extension plugin support (3rd party XPath functions)\n  \n[1]: https://github.com/Small-Bodies-Node/pds4_tools\n[2]: https://ExoMars-PanCam.github.io/passthrough\n[3]: https://pypi.org/\n[4]: https://python-poetry.org/\n[5]: ./pyproject.toml","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexomars-pancam%2Fpassthrough","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexomars-pancam%2Fpassthrough","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexomars-pancam%2Fpassthrough/lists"}