{"id":37621767,"url":"https://github.com/romi/romitask","last_synced_at":"2026-01-16T10:40:02.959Z","repository":{"id":43173303,"uuid":"353006143","full_name":"romi/romitask","owner":"romi","description":"The ROMI task runner, a luigi based task pipeline.","archived":false,"fork":false,"pushed_at":"2025-12-15T17:52:32.000Z","size":1644,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":9,"default_branch":"dev","last_synced_at":"2025-12-19T00:46:24.083Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/romi.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-30T13:12:48.000Z","updated_at":"2025-11-13T20:52:55.000Z","dependencies_parsed_at":"2024-08-28T14:26:39.088Z","dependency_job_id":"d252df25-0807-4eb0-8642-74d0ee6a33e0","html_url":"https://github.com/romi/romitask","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/romi/romitask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romi%2Fromitask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romi%2Fromitask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romi%2Fromitask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romi%2Fromitask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/romi","download_url":"https://codeload.github.com/romi/romitask/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romi%2Fromitask/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-16T10:40:02.859Z","updated_at":"2026-01-16T10:40:02.948Z","avatar_url":"https://github.com/romi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [![ROMI_logo](docs/assets/images/ROMI_logo_green_25.svg)](https://romi-project.eu) / RomiTask\n\n[![Licence](https://img.shields.io/github/license/romi/romitask?color=lightgray)](https://www.gnu.org/licenses/gpl-3.0.en.html)\n[![Python Version](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fromi%2Fromitask%2Frefs%2Fheads%2Fdev%2Fpyproject.toml\u0026logo=python\u0026logoColor=white)]()\n[![PyPI - Version](https://img.shields.io/pypi/v/romitask?logo=pypi\u0026logoColor=white)](https://pypi.org/project/romitask/)\n[![Conda - Version](https://img.shields.io/conda/vn/romi-eu/romitask?logo=anaconda\u0026logoColor=white\u0026label=romi-eu\u0026color=%2344A833)](https://anaconda.org/romi-eu/romitask)\n[![GitHub branch check runs](https://img.shields.io/github/check-runs/romi/romitask/dev)](https://github.com/romi/romitask)\n\n\n## Overview\n\nThis repository gathers CLI and classes needed to run `luigi` based tasks for the ROMI project.\n\nAlone, this library does not do much...\nTo run a \"meaningful\" task you need to install other ROMI libraries like `plantdb` and `plant-3d-vision`\nor `plant-imager`.\n\nNote that both `plant-3d-vision` \u0026 `plant-imager` ROMI libraries have `romitask` \u0026 `plantdb` as git submodules.\n\n## Installation\n\nWe strongly advise to create isolated environments to install the ROMI libraries.\n\nWe often use `conda` as an environment and python package manager.\nIf you do not yet have `miniconda3` installed on your system, have a look [here](https://docs.conda.io/en/latest/miniconda.html).\n\nThe `romitask` package is available from the `romi-eu` channel.\n\n### Existing conda environment\nTo install the `romitask` conda package in an existing environment, first activate it, then proceed as follows:\n```shell\nconda install romitask -c romi-eu\n```\n\n### New conda environment\nTo install the `romitask` conda package in a new environment, here named `romi`, proceed as follows:\n```shell\nconda create -n romi romitask -c romi-eu\n```\n\n### Installation from sources\nTo install this library, simply clone the repo and use `pip` to install it and the required dependencies.\nAgain, we strongly advise to create a `conda` environment.\n\nAll this can be done as follows:\n```shell\ngit clone https://github.com/romi/romitask.git -b dev  # git clone the 'dev' branch of romitask\ncd romitask\nconda create -n romi 'python =3.10'\nconda activate romi  # do not forget to activate your environment!\npython -m pip install -e .  # install the sources\n```\n\nNote that the `-e` option is to install the `romitask` sources in \"developer mode\".\nThat is, if you make changes to the source code of `romitask` you will not have to `pip install` it again.\n\nYou may want to install the `plantdb` sources to perform the `DummyTask` test example below:\n```shell\nconda activate romi  # do not forget to activate your environment!\npython -m pip install git+https://github.com/romi/plantdb.git@dev#egg=plantdb # install the `plantdb` sources from 'dev' branch\n```\n\nThis will install the required ROMI library `plantdb`, but not in \"developer mode\".\n\n## Usage\n\n### Create a dummy database\nTo quickly create a _dummy database_, let's use the temporary folder `/tmp`:\n```shell\nmkdir -p /tmp/dummy_db/dummy_dataset  # create dummy database and dataset\ntouch /tmp/dummy_db/romidb  # add the romidb marker (empty file)\nexport DB_LOCATION='/tmp/dummy_db'  # add database location as an environment variable, 'DB_LOCATION', to current shell\n```\n\n### Test the CLI with `DummyTask`\nTo test the CLI `romi_run_task`:\n```shell\nromi_run_task DummyTask $DB_LOCATION/dummy_dataset\n```\n\nYou should get a \"Luigi Execution Summary\" similar to this:\n```\n===== Luigi Execution Summary =====\n\nScheduled 1 tasks of which:\n* 1 ran successfully:\n    - 1 DummyTask(scan_id=)\n\nThis progress looks :) because there were no failed tasks or missing dependencies\n\n===== Luigi Execution Summary =====\n```\n\nAs no TOML configuration file was provided, you should get a `pipeline.toml` with only a `retcode` and a `version`\nsections at the root of the `dummy_dataset/` directory.\n\nThe `dummy_database` tree structure should look like this:\n```\ndummy_database/\n├── dummy_dataset/\n│   ├── DummyTask__**********/\n│   ├── files.json\n│   ├── metadata/\n│   │   └── DummyTask__**********.json\n│   └── pipeline.toml\n└── romidb\n```\n\n\n## Developers \u0026 contributors\n\nYou first have to install the library from sources as explained [here](#installation-from-sources).\n\n### Conda packaging\nStart by installing the required `conda-build` \u0026 `anaconda-client` conda packages in the `base` environment as follows:\n```shell\nconda install -n base conda-build anaconda-client\n```\n\n#### Build a conda package\nTo build the `romitask` conda package, from the root directory of the repository and the `base` conda environment, run:\n```shell\nconda build conda/recipe/ -c conda-forge --user romi-eu\n```\n\nIf you are struggling with some of the modifications you made to the recipe, \nnotably when using environment variables or Jinja2 stuffs, you can always render the recipe with:\n```shell\nconda render conda/recipe/\n```\n\nThe official documentation for `conda-render` can be found [here](https://docs.conda.io/projects/conda-build/en/stable/resources/commands/conda-render.html).\n\n#### Upload a conda package\nTo upload the built packages, you need a valid account (here `romi-eu`) on [anaconda.org](www.anaconda.org) \u0026 to log ONCE\nwith `anaconda login`, then:\n```shell\nanaconda upload ~/miniconda3/conda-bld/linux-64/romitask*.tar.bz2 --user romi-eu\n```\n\n#### Clean builds\nTo clean the source and build intermediates:\n```shell\nconda build purge\n```\n\nTo clean **ALL** the built packages \u0026 build environments:\n```shell\nconda build purge-all\n```\n\n### Documentation\n\nWe use [`mkdocs`](https://www.mkdocs.org/) to build the documentation with [`mkdocs-material`](https://squidfunk.github.io/mkdocs-material) theme.\nThe API documentation is generated by [`mkdocstrings`](https://mkdocstrings.github.io/).\nAlso, we use [`markdown-exec`](https://pawamoy.github.io/markdown-exec) to execute some code snippets to generate output parsed in Markdown.\nFinally, you may want to check the [`pymdown-extensions`](https://facelessuser.github.io/pymdown-extensions) documentation.\n\n#### Requirements\nTo install the requirements for documentation edition, simply run:\n```shell\npython -m pip install -e .[doc]\n```\n\n#### Live edit\nYou can edit the documentation, `mkdocs.yaml` and the `docs` directory, and see the changes live by using:\n```shell\nmkdocs serve\n```\n\nYou should see some logging and this message, indicating where to view it:\n```\nINFO    -  [14:39:21] Serving on http://127.0.0.1:8000/\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromi%2Fromitask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromi%2Fromitask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromi%2Fromitask/lists"}