{"id":135585,"name":"TSX","description":"Provides reliable and robust measures of change in the relative abundance of Australia's threatened and near-threatened species at national, state and regional levels.","url":"https://github.com/nesp-tsr3-1/tsx","last_synced_at":"2026-05-17T20:30:20.367Z","repository":{"id":39603434,"uuid":"111494275","full_name":"nesp-tsr3-1/tsx","owner":"nesp-tsr3-1","description":"Australian Threatened Species Index","archived":false,"fork":false,"pushed_at":"2026-05-07T03:24:18.000Z","size":56380,"stargazers_count":6,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-14T19:04:47.148Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://tsx.org.au","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/nesp-tsr3-1.png","metadata":{"files":{"readme":"README.rst","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":"2017-11-21T03:30:08.000Z","updated_at":"2026-05-07T03:24:22.000Z","dependencies_parsed_at":"2024-11-06T00:35:26.342Z","dependency_job_id":"ef1629dc-eccc-4325-a335-13969fd05458","html_url":"https://github.com/nesp-tsr3-1/tsx","commit_stats":{"total_commits":907,"total_committers":8,"mean_commits":113.375,"dds":"0.25689084895259096","last_synced_commit":"c3d9aebd2e62e121f799b60109c92b22782add76"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nesp-tsr3-1/tsx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nesp-tsr3-1","download_url":"https://codeload.github.com/nesp-tsr3-1/tsx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33117348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"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"}},"owner":{"login":"nesp-tsr3-1","name":"NESP Threatened Species Recovery Hub (Project 3.1)","uuid":"33853157","kind":"organization","description":"","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/33853157?v=4","repositories_count":1,"last_synced_at":"2023-03-08T18:46:30.031Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/nesp-tsr3-1","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-18T09:04:10.995Z","updated_at":"2023-03-08T18:46:30.047Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nesp-tsr3-1","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nesp-tsr3-1/repositories"},"packages":[],"commits":{"id":1448284,"full_name":"nesp-tsr3-1/tsx","default_branch":"master","total_commits":1144,"total_committers":7,"total_bot_commits":1,"total_bot_committers":1,"mean_commits":163.42857142857142,"dds":0.2027972027972028,"past_year_total_commits":168,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":168.0,"past_year_dds":0.0,"last_synced_at":"2026-05-14T19:01:24.102Z","last_synced_commit":"91de6b025934f01107866ca2396ad5163a35f690","created_at":"2023-11-12T00:05:25.426Z","updated_at":"2026-05-14T19:01:14.065Z","committers":[{"name":"James Watmuff","email":"james@planticle.com.au","login":"ammojamo","count":912},{"name":"James Watmuff","email":"james@Jamess-MacBook-Pro.local","login":"james-richards-privitar","count":144},{"name":"James Watmuff","email":"james@Jamess-MBP.home.gateway","login":null,"count":54},{"name":"hoangnguyen177","email":"hoangnguyen177@gmail.com","login":"7neyugn7","count":23},{"name":"Ubuntu","email":"ubuntu@nesp-dev1.coesra.org.au","login":null,"count":8},{"name":"Ubuntu","email":"ubuntu@nesp-dev.coesra.org.au","login":null,"count":2},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":1}],"past_year_committers":[{"name":"James Watmuff","email":"james@planticle.com.au","login":"ammojamo","count":168}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-16T00:00:17.015Z","repositories_count":6234980,"commits_count":894702634,"contributors_count":34909586,"owners_count":1153783,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"nesp-tsr3-1/tsx","html_url":"https://github.com/nesp-tsr3-1/tsx","last_synced_at":"2026-05-04T14:02:09.894Z","status":"error","issues_count":3,"pull_requests_count":37,"avg_time_to_close_issue":62945456.333333336,"avg_time_to_close_pull_request":36978143.88235294,"issues_closed_count":3,"pull_requests_closed_count":34,"pull_request_authors_count":1,"issue_authors_count":2,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":3.27027027027027,"merged_pull_requests_count":1,"bot_issues_count":0,"bot_pull_requests_count":37,"past_year_issues_count":0,"past_year_pull_requests_count":4,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":1907182.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.25,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":4,"past_year_merged_pull_requests_count":0,"created_at":"2023-11-12T00:05:37.732Z","updated_at":"2026-05-04T14:02:09.894Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/nesp-tsr3-1%2Ftsx/issues","issue_labels_count":{},"pull_request_labels_count":{"dependencies":39,"javascript":22,"python":15},"issue_author_associations_count":{"CONTRIBUTOR":2,"NONE":1},"pull_request_author_associations_count":{"CONTRIBUTOR":39},"issue_authors":{"ammojamo":2,"gakindler":1},"pull_request_authors":{"dependabot[bot]":39},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-16T00:00:24.458Z","repositories_count":14618342,"issues_count":34210353,"pull_requests_count":111983688,"authors_count":11264221,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":1,"PushEvent":77,"CreateEvent":1},"last_year":{"PushEvent":42}},"keywords":[],"dependencies":[{"ecosystem":"npm","filepath":"web/package-lock.json","sha":null,"kind":"lockfile","created_at":"2022-07-04T11:34:23.182Z","updated_at":"2022-07-04T11:34:23.182Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/web/package-lock.json","dependencies":[{"id":105156845,"package_name":"@babel/parser","ecosystem":"npm","requirements":"7.18.4","direct":false,"kind":"runtime","optional":false},{"id":105156846,"package_name":"@babel/runtime","ecosystem":"npm","requirements":"7.18.3","direct":false,"kind":"runtime","optional":false},{"id":105156847,"package_name":"@popperjs/core","ecosystem":"npm","requirements":"2.11.5","direct":false,"kind":"runtime","optional":false},{"id":105156848,"package_name":"@vitejs/plugin-vue","ecosystem":"npm","requirements":"1.10.2","direct":false,"kind":"development","optional":false},{"id":105156849,"package_name":"@vue/compiler-core","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156850,"package_name":"@vue/compiler-dom","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156851,"package_name":"@vue/compiler-sfc","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156852,"package_name":"@vue/compiler-ssr","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156853,"package_name":"@vue/devtools-api","ecosystem":"npm","requirements":"6.1.4","direct":false,"kind":"runtime","optional":false},{"id":105156854,"package_name":"@vue/reactivity","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156855,"package_name":"@vue/reactivity-transform","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156856,"package_name":"@vue/runtime-core","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156857,"package_name":"@vue/runtime-dom","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156858,"package_name":"@vue/server-renderer","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156859,"package_name":"@vue/shared","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156860,"package_name":"@vueform/multiselect","ecosystem":"npm","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":105156861,"package_name":"anymatch","ecosystem":"npm","requirements":"3.1.2","direct":false,"kind":"development","optional":false},{"id":105156862,"package_name":"binary-extensions","ecosystem":"npm","requirements":"2.2.0","direct":false,"kind":"development","optional":false},{"id":105156863,"package_name":"braces","ecosystem":"npm","requirements":"3.0.2","direct":false,"kind":"development","optional":false},{"id":105156864,"package_name":"bulma","ecosystem":"npm","requirements":"0.9.4","direct":false,"kind":"runtime","optional":false},{"id":105156865,"package_name":"chart.js","ecosystem":"npm","requirements":"3.8.0","direct":false,"kind":"runtime","optional":false},{"id":105156866,"package_name":"chokidar","ecosystem":"npm","requirements":"3.5.3","direct":false,"kind":"development","optional":false},{"id":105156867,"package_name":"csstype","ecosystem":"npm","requirements":"2.6.20","direct":false,"kind":"runtime","optional":false},{"id":105156868,"package_name":"esbuild","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156869,"package_name":"esbuild-android-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156870,"package_name":"esbuild-android-arm64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156871,"package_name":"esbuild-darwin-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156872,"package_name":"esbuild-darwin-arm64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156873,"package_name":"esbuild-freebsd-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156874,"package_name":"esbuild-freebsd-arm64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156875,"package_name":"esbuild-linux-32","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156876,"package_name":"esbuild-linux-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156877,"package_name":"esbuild-linux-arm","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156878,"package_name":"esbuild-linux-arm64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156879,"package_name":"esbuild-linux-mips64le","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156880,"package_name":"esbuild-linux-ppc64le","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156881,"package_name":"esbuild-linux-riscv64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156882,"package_name":"esbuild-linux-s390x","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156883,"package_name":"esbuild-netbsd-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156884,"package_name":"esbuild-openbsd-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156885,"package_name":"esbuild-sunos-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156886,"package_name":"esbuild-windows-32","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156887,"package_name":"esbuild-windows-64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156888,"package_name":"esbuild-windows-arm64","ecosystem":"npm","requirements":"0.14.42","direct":false,"kind":"development","optional":false},{"id":105156889,"package_name":"estree-walker","ecosystem":"npm","requirements":"2.0.2","direct":false,"kind":"runtime","optional":false},{"id":105156890,"package_name":"fill-range","ecosystem":"npm","requirements":"7.0.1","direct":false,"kind":"development","optional":false},{"id":105156891,"package_name":"fsevents","ecosystem":"npm","requirements":"2.3.2","direct":false,"kind":"development","optional":false},{"id":105156892,"package_name":"function-bind","ecosystem":"npm","requirements":"1.1.1","direct":false,"kind":"development","optional":false},{"id":105156893,"package_name":"glob-parent","ecosystem":"npm","requirements":"5.1.2","direct":false,"kind":"development","optional":false},{"id":105156894,"package_name":"has","ecosystem":"npm","requirements":"1.0.3","direct":false,"kind":"development","optional":false},{"id":105156895,"package_name":"heatmap.js","ecosystem":"npm","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":105156896,"package_name":"immutable","ecosystem":"npm","requirements":"4.1.0","direct":false,"kind":"development","optional":false},{"id":105156897,"package_name":"is-binary-path","ecosystem":"npm","requirements":"2.1.0","direct":false,"kind":"development","optional":false},{"id":105156898,"package_name":"is-core-module","ecosystem":"npm","requirements":"2.9.0","direct":false,"kind":"development","optional":false},{"id":105156899,"package_name":"is-extglob","ecosystem":"npm","requirements":"2.1.1","direct":false,"kind":"development","optional":false},{"id":105156900,"package_name":"is-glob","ecosystem":"npm","requirements":"4.0.3","direct":false,"kind":"development","optional":false},{"id":105156901,"package_name":"is-number","ecosystem":"npm","requirements":"7.0.0","direct":false,"kind":"development","optional":false},{"id":105156902,"package_name":"leaflet","ecosystem":"npm","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":105156903,"package_name":"leaflet-easybutton","ecosystem":"npm","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":105156904,"package_name":"magic-string","ecosystem":"npm","requirements":"0.25.9","direct":false,"kind":"runtime","optional":false},{"id":105156905,"package_name":"nanoid","ecosystem":"npm","requirements":"3.3.4","direct":false,"kind":"runtime","optional":false},{"id":105156906,"package_name":"normalize-path","ecosystem":"npm","requirements":"3.0.0","direct":false,"kind":"development","optional":false},{"id":105156907,"package_name":"path-parse","ecosystem":"npm","requirements":"1.0.7","direct":false,"kind":"development","optional":false},{"id":105156908,"package_name":"picocolors","ecosystem":"npm","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":105156909,"package_name":"picomatch","ecosystem":"npm","requirements":"2.3.1","direct":false,"kind":"development","optional":false},{"id":105156910,"package_name":"postcss","ecosystem":"npm","requirements":"8.4.14","direct":false,"kind":"runtime","optional":false},{"id":105156911,"package_name":"readdirp","ecosystem":"npm","requirements":"3.6.0","direct":false,"kind":"development","optional":false},{"id":105156912,"package_name":"regenerator-runtime","ecosystem":"npm","requirements":"0.13.9","direct":false,"kind":"runtime","optional":false},{"id":105156913,"package_name":"resolve","ecosystem":"npm","requirements":"1.22.0","direct":false,"kind":"development","optional":false},{"id":105156914,"package_name":"rollup","ecosystem":"npm","requirements":"2.75.3","direct":false,"kind":"development","optional":false},{"id":105156915,"package_name":"sass","ecosystem":"npm","requirements":"1.52.1","direct":false,"kind":"development","optional":false},{"id":105156916,"package_name":"source-map","ecosystem":"npm","requirements":"0.6.1","direct":false,"kind":"runtime","optional":false},{"id":105156917,"package_name":"source-map-js","ecosystem":"npm","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":105156918,"package_name":"sourcemap-codec","ecosystem":"npm","requirements":"1.4.8","direct":false,"kind":"runtime","optional":false},{"id":105156919,"package_name":"supports-preserve-symlinks-flag","ecosystem":"npm","requirements":"1.0.0","direct":false,"kind":"development","optional":false},{"id":105156920,"package_name":"tippy.js","ecosystem":"npm","requirements":"6.3.7","direct":false,"kind":"runtime","optional":false},{"id":105156921,"package_name":"to-regex-range","ecosystem":"npm","requirements":"5.0.1","direct":false,"kind":"development","optional":false},{"id":105156922,"package_name":"underscore","ecosystem":"npm","requirements":"1.13.3","direct":false,"kind":"runtime","optional":false},{"id":105156923,"package_name":"vite","ecosystem":"npm","requirements":"2.9.9","direct":false,"kind":"development","optional":false},{"id":105156924,"package_name":"vue","ecosystem":"npm","requirements":"3.2.36","direct":false,"kind":"runtime","optional":false},{"id":105156925,"package_name":"vue-autofocus-directive","ecosystem":"npm","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":105156926,"package_name":"vue-router","ecosystem":"npm","requirements":"4.0.15","direct":false,"kind":"runtime","optional":false},{"id":105156927,"package_name":"vue-simple-spinner","ecosystem":"npm","requirements":"1.2.10","direct":false,"kind":"runtime","optional":false},{"id":105156928,"package_name":"vue-tippy","ecosystem":"npm","requirements":"6.0.0-alpha.58","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"npm","filepath":"web/package.json","sha":null,"kind":"manifest","created_at":"2022-07-04T11:34:23.215Z","updated_at":"2022-07-04T11:34:23.215Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/web/package.json","dependencies":[{"id":105156929,"package_name":"@vueform/multiselect","ecosystem":"npm","requirements":"^2.4.2","direct":true,"kind":"runtime","optional":false},{"id":105156930,"package_name":"bulma","ecosystem":"npm","requirements":"^0.9.3","direct":true,"kind":"runtime","optional":false},{"id":105156931,"package_name":"chart.js","ecosystem":"npm","requirements":"^3.5.1","direct":true,"kind":"runtime","optional":false},{"id":105156932,"package_name":"heatmap.js","ecosystem":"npm","requirements":"^2.0.5","direct":true,"kind":"runtime","optional":false},{"id":105156933,"package_name":"leaflet","ecosystem":"npm","requirements":"^1.7.1","direct":true,"kind":"runtime","optional":false},{"id":105156934,"package_name":"leaflet-easybutton","ecosystem":"npm","requirements":"^2.4.0","direct":true,"kind":"runtime","optional":false},{"id":105156935,"package_name":"underscore","ecosystem":"npm","requirements":"^1.13.1","direct":true,"kind":"runtime","optional":false},{"id":105156936,"package_name":"vue","ecosystem":"npm","requirements":"^3.2.6","direct":true,"kind":"runtime","optional":false},{"id":105156937,"package_name":"vue-autofocus-directive","ecosystem":"npm","requirements":"^1.0.4","direct":true,"kind":"runtime","optional":false},{"id":105156938,"package_name":"vue-router","ecosystem":"npm","requirements":"^4.0.11","direct":true,"kind":"runtime","optional":false},{"id":105156939,"package_name":"vue-simple-spinner","ecosystem":"npm","requirements":"^1.2.10","direct":true,"kind":"runtime","optional":false},{"id":105156940,"package_name":"vue-tippy","ecosystem":"npm","requirements":"^6.0.0-alpha.43","direct":true,"kind":"runtime","optional":false},{"id":105156941,"package_name":"@vitejs/plugin-vue","ecosystem":"npm","requirements":"^1.6.0","direct":true,"kind":"development","optional":false},{"id":105156942,"package_name":"@vue/compiler-sfc","ecosystem":"npm","requirements":"^3.0.5","direct":true,"kind":"development","optional":false},{"id":105156943,"package_name":"sass","ecosystem":"npm","requirements":"^1.38.1","direct":true,"kind":"development","optional":false},{"id":105156944,"package_name":"vite","ecosystem":"npm","requirements":"^2.5.1","direct":true,"kind":"development","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2022-07-04T11:34:23.274Z","updated_at":"2022-07-04T11:34:23.274Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/setup.py","dependencies":[{"id":105156984,"package_name":"Twisted","ecosystem":"pypi","requirements":"\u003e=17.9.0","direct":true,"kind":"runtime","optional":false},{"id":105156985,"package_name":"pyOpenSSL","ecosystem":"pypi","requirements":"\u003e=17.5.0","direct":true,"kind":"runtime","optional":false},{"id":105156986,"package_name":"Flask","ecosystem":"pypi","requirements":"\u003e=1.1.1","direct":true,"kind":"runtime","optional":false},{"id":105156987,"package_name":"Flask-Cors","ecosystem":"pypi","requirements":"\u003e=3.0.6","direct":true,"kind":"runtime","optional":false},{"id":105156988,"package_name":"Flask-Session","ecosystem":"pypi","requirements":"\u003e=0.3.1","direct":true,"kind":"runtime","optional":false},{"id":105156989,"package_name":"mysql-connector","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":105156990,"package_name":"openpyxl","ecosystem":"pypi","requirements":"\u003e=2.4.9","direct":true,"kind":"runtime","optional":false},{"id":105156991,"package_name":"pyproj","ecosystem":"pypi","requirements":"\u003e=1.9.5.1","direct":true,"kind":"runtime","optional":false},{"id":105156992,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"\u003e=2.6.1","direct":true,"kind":"runtime","optional":false},{"id":105156993,"package_name":"SQLAlchemy","ecosystem":"pypi","requirements":"\u003e=1.1.14","direct":true,"kind":"runtime","optional":false},{"id":105156994,"package_name":"GeoAlchemy2","ecosystem":"pypi","requirements":"\u003e=0.4.0","direct":true,"kind":"runtime","optional":false},{"id":105156995,"package_name":"Shapely","ecosystem":"pypi","requirements":"\u003e=1.6.2.post1","direct":true,"kind":"runtime","optional":false},{"id":105156996,"package_name":"tqdm","ecosystem":"pypi","requirements":"\u003e=4.19.4","direct":true,"kind":"runtime","optional":false},{"id":105156997,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=0.21.0","direct":true,"kind":"runtime","optional":false},{"id":105156998,"package_name":"configparser","ecosystem":"pypi","requirements":"\u003e=3.7.4","direct":true,"kind":"runtime","optional":false},{"id":105156999,"package_name":"passlib","ecosystem":"pypi","requirements":"\u003e=1.7.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/publish-docker-image.yml","sha":null,"kind":"manifest","created_at":"2024-11-06T00:35:12.338Z","updated_at":"2024-11-06T00:35:12.338Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/.github/workflows/publish-docker-image.yml","dependencies":[{"id":20582558735,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":20582558736,"package_name":"docker/setup-qemu-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":20582558737,"package_name":"docker/setup-buildx-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":20582558738,"package_name":"docker/login-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":20582558739,"package_name":"docker/build-push-action","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":20582558740,"package_name":"actions/attest-build-provenance","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"containers/Dockerfile","sha":null,"kind":"manifest","created_at":"2024-11-06T00:35:12.457Z","updated_at":"2024-11-06T00:35:12.457Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/containers/Dockerfile","dependencies":[{"id":20582558749,"package_name":"python","ecosystem":"docker","requirements":"3.9-slim","direct":true,"kind":"build","optional":false},{"id":20582558750,"package_name":"base","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false},{"id":20582558751,"package_name":"prod","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"containers/docker-compose.yml","sha":null,"kind":"manifest","created_at":"2024-11-06T00:35:14.708Z","updated_at":"2024-11-06T00:35:14.708Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/containers/docker-compose.yml","dependencies":[{"id":20582559785,"package_name":"mysql","ecosystem":"docker","requirements":"8.3.0","direct":true,"kind":"runtime","optional":false},{"id":20582559786,"package_name":"phpmyadmin","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false},{"id":20582559997,"package_name":"ghcr.io/nesp-tsr3-1/tsx-workflow","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"Pipfile","sha":null,"kind":"manifest","created_at":"2024-11-06T00:35:18.041Z","updated_at":"2024-11-06T00:35:18.041Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/Pipfile","dependencies":[{"id":20582560225,"package_name":"fiona","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582561831,"package_name":"flask","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582561832,"package_name":"flask-cors","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582561833,"package_name":"flask-headers","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562325,"package_name":"flask-session","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562518,"package_name":"mysql-connector-python","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562519,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562520,"package_name":"openpyxl","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562521,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562522,"package_name":"pyproj","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562523,"package_name":"scipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562524,"package_name":"rpy2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562525,"package_name":"shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562526,"package_name":"sqlalchemy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562527,"package_name":"tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562528,"package_name":"sqlacodegen","ecosystem":"pypi","requirements":"==3.0.0rc5","direct":true,"kind":"runtime","optional":false},{"id":20582562549,"package_name":"passlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562550,"package_name":"argon2-cffi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562551,"package_name":"watchdog","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562552,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562553,"package_name":"fpdf2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562657,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582562658,"package_name":"flask-executor","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582563275,"package_name":"cartopy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":20582563276,"package_name":"cachelib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"Pipfile.lock","sha":null,"kind":"lockfile","created_at":"2024-11-06T00:35:25.422Z","updated_at":"2024-11-06T00:35:25.422Z","repository_link":"https://github.com/nesp-tsr3-1/tsx/blob/master/Pipfile.lock","dependencies":[{"id":20582563314,"package_name":"argon2-cffi","ecosystem":"pypi","requirements":"==23.1.0","direct":false,"kind":"runtime","optional":false},{"id":20582563315,"package_name":"argon2-cffi-bindings","ecosystem":"pypi","requirements":"==21.2.0","direct":false,"kind":"runtime","optional":false},{"id":20582563316,"package_name":"attrs","ecosystem":"pypi","requirements":"==24.2.0","direct":false,"kind":"runtime","optional":false},{"id":20582563317,"package_name":"blinker","ecosystem":"pypi","requirements":"==1.8.2","direct":false,"kind":"runtime","optional":false},{"id":20582563318,"package_name":"cachelib","ecosystem":"pypi","requirements":"==0.13.0","direct":false,"kind":"runtime","optional":false},{"id":20582563319,"package_name":"cartopy","ecosystem":"pypi","requirements":"==0.23.0","direct":false,"kind":"runtime","optional":false},{"id":20582563320,"package_name":"certifi","ecosystem":"pypi","requirements":"==2024.8.30","direct":false,"kind":"runtime","optional":false},{"id":20582563321,"package_name":"cffi","ecosystem":"pypi","requirements":"==1.17.1","direct":false,"kind":"runtime","optional":false},{"id":20582563322,"package_name":"click","ecosystem":"pypi","requirements":"==8.1.7","direct":false,"kind":"runtime","optional":false},{"id":20582563323,"package_name":"click-plugins","ecosystem":"pypi","requirements":"==1.1.1","direct":false,"kind":"runtime","optional":false},{"id":20582563324,"package_name":"cligj","ecosystem":"pypi","requirements":"==0.7.2","direct":false,"kind":"runtime","optional":false},{"id":20582563905,"package_name":"contourpy","ecosystem":"pypi","requirements":"==1.3.0","direct":false,"kind":"runtime","optional":false},{"id":20582563906,"package_name":"cycler","ecosystem":"pypi","requirements":"==0.12.1","direct":false,"kind":"runtime","optional":false},{"id":20582563907,"package_name":"defusedxml","ecosystem":"pypi","requirements":"==0.7.1","direct":false,"kind":"runtime","optional":false},{"id":20582563908,"package_name":"et-xmlfile","ecosystem":"pypi","requirements":"==2.0.0","direct":false,"kind":"runtime","optional":false},{"id":20582563909,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"==1.2.2","direct":false,"kind":"runtime","optional":false},{"id":20582563910,"package_name":"fiona","ecosystem":"pypi","requirements":"==1.10.1","direct":false,"kind":"runtime","optional":false},{"id":20582563911,"package_name":"flask","ecosystem":"pypi","requirements":"==3.0.3","direct":false,"kind":"runtime","optional":false},{"id":20582563912,"package_name":"flask-cors","ecosystem":"pypi","requirements":"==5.0.0","direct":false,"kind":"runtime","optional":false},{"id":20582563913,"package_name":"flask-executor","ecosystem":"pypi","requirements":"==1.0.0","direct":false,"kind":"runtime","optional":false},{"id":20582563914,"package_name":"flask-headers","ecosystem":"pypi","requirements":"==1.0","direct":false,"kind":"runtime","optional":false},{"id":20582563915,"package_name":"flask-session","ecosystem":"pypi","requirements":"==0.8.0","direct":false,"kind":"runtime","optional":false},{"id":20582563916,"package_name":"fonttools","ecosystem":"pypi","requirements":"==4.54.1","direct":false,"kind":"runtime","optional":false},{"id":20582563917,"package_name":"fpdf2","ecosystem":"pypi","requirements":"==2.8.1","direct":false,"kind":"runtime","optional":false},{"id":20582563919,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"==8.5.0","direct":false,"kind":"runtime","optional":false},{"id":20582563920,"package_name":"importlib-resources","ecosystem":"pypi","requirements":"==6.4.5","direct":false,"kind":"runtime","optional":false},{"id":20582563922,"package_name":"inflect","ecosystem":"pypi","requirements":"==7.4.0","direct":false,"kind":"runtime","optional":false},{"id":20582563924,"package_name":"iniconfig","ecosystem":"pypi","requirements":"==2.0.0","direct":false,"kind":"runtime","optional":false},{"id":20582563925,"package_name":"itsdangerous","ecosystem":"pypi","requirements":"==2.2.0","direct":false,"kind":"runtime","optional":false},{"id":20582563926,"package_name":"jinja2","ecosystem":"pypi","requirements":"==3.1.4","direct":false,"kind":"runtime","optional":false},{"id":20582563927,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"==1.4.7","direct":false,"kind":"runtime","optional":false},{"id":20582563928,"package_name":"markupsafe","ecosystem":"pypi","requirements":"==3.0.2","direct":false,"kind":"runtime","optional":false},{"id":20582563929,"package_name":"matplotlib","ecosystem":"pypi","requirements":"==3.9.2","direct":false,"kind":"runtime","optional":false},{"id":20582563930,"package_name":"more-itertools","ecosystem":"pypi","requirements":"==10.5.0","direct":false,"kind":"runtime","optional":false},{"id":20582563931,"package_name":"msgspec","ecosystem":"pypi","requirements":"==0.18.6","direct":false,"kind":"runtime","optional":false},{"id":20582563932,"package_name":"mysql-connector-python","ecosystem":"pypi","requirements":"==9.1.0","direct":false,"kind":"runtime","optional":false},{"id":20582563933,"package_name":"numpy","ecosystem":"pypi","requirements":"==2.0.2","direct":false,"kind":"runtime","optional":false},{"id":20582563934,"package_name":"openpyxl","ecosystem":"pypi","requirements":"==3.1.5","direct":false,"kind":"runtime","optional":false},{"id":20582563935,"package_name":"packaging","ecosystem":"pypi","requirements":"==24.1","direct":false,"kind":"runtime","optional":false},{"id":20582563936,"package_name":"pandas","ecosystem":"pypi","requirements":"==2.2.3","direct":false,"kind":"runtime","optional":false},{"id":20582563937,"package_name":"passlib","ecosystem":"pypi","requirements":"==1.7.4","direct":false,"kind":"runtime","optional":false},{"id":20582563938,"package_name":"pillow","ecosystem":"pypi","requirements":"==11.0.0","direct":false,"kind":"runtime","optional":false},{"id":20582563939,"package_name":"pluggy","ecosystem":"pypi","requirements":"==1.5.0","direct":false,"kind":"runtime","optional":false},{"id":20582563940,"package_name":"pycparser","ecosystem":"pypi","requirements":"==2.22","direct":false,"kind":"runtime","optional":false},{"id":20582563941,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.2.0","direct":false,"kind":"runtime","optional":false},{"id":20582563942,"package_name":"pyproj","ecosystem":"pypi","requirements":"==3.6.1","direct":false,"kind":"runtime","optional":false},{"id":20582563943,"package_name":"pyshp","ecosystem":"pypi","requirements":"==2.3.1","direct":false,"kind":"runtime","optional":false},{"id":20582563944,"package_name":"pytest","ecosystem":"pypi","requirements":"==8.3.3","direct":false,"kind":"runtime","optional":false},{"id":20582563945,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":20582563946,"package_name":"pytz","ecosystem":"pypi","requirements":"==2024.2","direct":false,"kind":"runtime","optional":false},{"id":20582563947,"package_name":"rpy2","ecosystem":"pypi","requirements":"==3.5.16","direct":false,"kind":"runtime","optional":false},{"id":20582563948,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.13.1","direct":false,"kind":"runtime","optional":false},{"id":20582563949,"package_name":"shapely","ecosystem":"pypi","requirements":"==2.0.6","direct":false,"kind":"runtime","optional":false},{"id":20582563950,"package_name":"six","ecosystem":"pypi","requirements":"==1.16.0","direct":false,"kind":"runtime","optional":false},{"id":20582563951,"package_name":"sqlacodegen","ecosystem":"pypi","requirements":"==3.0.0rc5","direct":false,"kind":"runtime","optional":false},{"id":20582563952,"package_name":"sqlalchemy","ecosystem":"pypi","requirements":"==2.0.36","direct":false,"kind":"runtime","optional":false},{"id":20582563953,"package_name":"tomli","ecosystem":"pypi","requirements":"==2.0.2","direct":false,"kind":"runtime","optional":false},{"id":20582563954,"package_name":"tqdm","ecosystem":"pypi","requirements":"==4.66.6","direct":false,"kind":"runtime","optional":false},{"id":20582563955,"package_name":"typeguard","ecosystem":"pypi","requirements":"==4.4.0","direct":false,"kind":"runtime","optional":false},{"id":20582563956,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"==4.12.2","direct":false,"kind":"runtime","optional":false},{"id":20582563957,"package_name":"tzdata","ecosystem":"pypi","requirements":"==2024.2","direct":false,"kind":"runtime","optional":false},{"id":20582563958,"package_name":"tzlocal","ecosystem":"pypi","requirements":"==5.2","direct":false,"kind":"runtime","optional":false},{"id":20582563959,"package_name":"watchdog","ecosystem":"pypi","requirements":"==5.0.3","direct":false,"kind":"runtime","optional":false},{"id":20582563960,"package_name":"werkzeug","ecosystem":"pypi","requirements":"==3.0.6","direct":false,"kind":"runtime","optional":false},{"id":20582563961,"package_name":"zipp","ecosystem":"pypi","requirements":"==3.20.2","direct":false,"kind":"runtime","optional":false}]}],"score":4.143134726391533,"created_at":"2023-11-12T00:00:23.158Z","updated_at":"2026-05-17T20:30:20.369Z","avatar_url":"https://github.com/nesp-tsr3-1.png","language":"Python","category":"Biosphere","sub_category":"Terrestrial Wildlife","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"===================================================================\nWelcome to the Australian Threatened Species Index (TSX) Repository\n===================================================================\n\nFor information about the Australian Threatened Species Index project, see https://tsx.org.au\n\nThe code in this repository is responsible for data import and pre-processing of data, and visualsation of the generated trend graphs and associated data.\n\n\nUser Guide\n==========\n\nThe easiest way to learn about running the TSX workflow is to check out the User Guide at https://tsx.org.au/user-guide/\n\nOverview\n========\n\nThe TSX consists of several components\n\n- MySQL database:\n    - For storage of raw data, which is either uploaded via the data interface, or imported via the command line scripts\n    - For storage for the data interface (e.g. user accounts, custodian feedback data, etc.)\n    - For processing of data using SQL queries and storing the results\n    - database schema is found under `db/sql/create.sql`\n\n- Python scripts:\n    - For running the TSX workflow that transforms raw data into time series\n    - For importing data such as taxonomic lists and species range polygons\n    - For generating trend permutations to be displayed by the TSX visualiser\n    - Found in the `tsx` directory\n\n- LPI R package (https://github.com/Zoological-Society-of-London/rlpi)\n    - Developed by Zoological Society of London\n    - For producing trends from time series using the Living Planet Index method\n    - We maintain a fork at https://github.com/nesp-tsr3-1/rlpi for bugfixes\n\n- API backend:\n    - Implemented in Python as a Flask app\n    - Backend for TSX Data Interface and TSX Visualiser\n    - Code lives under `tsx/api`\n\n- Data interface front-end (https://tsx.org.au/data)\n    - Implemented using the Vue Javascript framework\n    - Provides an interface for users to upload, manage and analyse datasets\n    - Requires login access (data custodians can self-register)\n    - Code lives under `web/data`\n\n- TSX Visualiser (https://tsx.org.au/tsx)\n    - Implemented using the Vue Javascript framework\n    - A single-page application that allows users to explore a set of trend permutations\n    - A separate instance is deployed for each new version of the TSX\n    - Code lives under `web/tsx`\n\n\nSetup\n=====\n\nPrerequisites\n-------------\n\n- MySQL 8.x\n- Python 3.12+\n- Node 22+\n- R 3.6+\n- `uv \u003chttps://docs.astral.sh/uv/\u003e`_\n\nClone this repository\n---------------------\n\ngit clone https://github.com/nesp-tsr3-1/tsx.git\n\n\nNative install vs Docker Compose\n--------------------------------\n\nThere are two main options for getting a TSX development environment up and running:\n\n1. Installing dependencies natively as per instructions below\n\n2. Use the supplied Docker Compose configuation to automatically build containers with the necessary dependencies included. This is quicker to get up and running, but is arguably more complicated to use for development and requires some familiarity with Docker. (See `Docker Compose Instructions`_.)\n\n\nInstall native packages\n-----------------------\n\nInstall development libraries (Ubuntu/Debian):\n\n.. code:: bash\n\n sudo apt-get update\n sudo apt-get install -y --no-install-recommends libgdal-dev r-base r-base-dev git build-essential libharfbuzz-dev libfribidi-dev  libfontconfig1-dev libgit2-dev libssl-dev  default-mysql-client libbz2-dev curl\n\nOn macOS, we recommend using homebrew to install packages as needed while following the steps below.\n\nCreate MySQL database\n---------------------\n\nBy default, the TSX software is configured to use a database called 'tsx' with a username of 'tsx' and a password of 'tsx'. This is configured in the `tsx.conf` file.\n\nTo create this database and user, connect to MySQL as root and run the following commands:\n\n.. code:: sql\n\n CREATE USER 'tsx'@'%' IDENTIFIED BY 'tsx';\n CREATE DATABASE tsx;\n GRANT ALL PRIVILEGES ON tsx.* TO 'tsx'@'%';\n\n\nAlternatively, you can avoid installing MySQL and instead run it via Docker (https://hub.docker.com/_/mysql/):\n\n.. code:: bash\n\n docker run -d --name tsx-mysql -e MYSQL_DATABASE=tsx -e MYSQL_USER=tsx -e MYSQL_PASSWORD=tsx \\\n   -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.3.0\n\n\nInitialise MySQL database\n--------------------------\n\nInitialise the database using the provided scripts:\n\n.. code:: bash\n\n mysql -u root -p tsx \u003c db/sql/create.sql\n mysql -u root -p tsx \u003c db/sql/init.sql\n mysql -u root -p tsx \u003c sample-data/seed.sql\n\n\nCopy example configuration\n--------------------------\n\n.. code:: bash\n\n cp tsx.conf.example tsx.conf\n\nIf necessary edit the ``[database]`` section in tsx.conf to match the database you just created.\n\nInstall R dependencies\n------------------------\n\nR dependencies are managed using `renv \u003chttps://rstudio.github.io/renv/articles/renv.html\u003e`_.\n\nInstall R dependencies by running:\n\n.. code:: bash\n\n  Rscript -e 'renv::restore()'\n\nInstall Python dependencies\n----------------------------------\n\nPython dependencies are managed using `uv \u003chttps://docs.astral.sh/uv/\u003e`_.\n\nInstall uv: https://docs.astral.sh/uv/getting-started/installation/\n\nUse uv to install Python and packages:\n\n.. code:: bash\n\n uv sync\n\n\nInstall node and Javascript dependencies\n----------------------------------------\n\nInstall Javascript dependencies:\n\n.. code:: bash\n\n cd web\n npm install\n\n\nRun API backend\n---------------\n\nThis is required for the Data Interface and/or TSX Visualiser to function\n\n.. code:: bash\n\n  # Native environment\n  uv run ./dev-server.sh\n\n  # Docker compose (note this also runs the Data Interface front end)\n  docker compose --profile webapp up\n\n\nRun Data Interface\n------------------\n\n.. code:: bash\n\n  cd web\n  npm run dev-data\n\n\nRun TSX Visualiser\n------------------\n\n.. code:: bash\n\n  cd web\n  npm run dev-tsx\n\n\nNote: the TSX Visualiser will not function properly until time series and trend permutations have been generated.\n\n\nDocker Compose Instructions\n===========================\n\nThe following command will build necessary Docker containers and start a shell for running the workflow:\n\n.. code:: bash\n\n  docker compose run --build --rm workflow_cli\n\nIt will take a while to download the necessary packages and build the containers.\n\nImportant notes:\n\n- When running via Docker Compose, ``tsx.conf`` must be configured with a database hostname of ``mysql``. (i.e. set ``host=mysql`` under ``[database]``)\n- The project root directory is mounted to the default working directory (``/tsx/``) inside each container. In order to import your own files using the workflow, you will need to first put them within the project directory tree so that the container can see them.\n\nTo run the Data Interface and TSX Visualiser, use:\n\n.. code:: bash\n\n  docker compose --profile webapp up\n\n\nGenerate time series and permutations for sample data\n=====================================================\n\nA script is provided that will perform a full workflow run using the sample data and generate trend permutations for the TSX visualiser.\n\n.. code:: bash\n\n uv run setup/test-workflow.sh\n\n(Make sure you have completed `Initialise MySQL database`_ first.)\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["optimize","archiving","measur","transforms","observation","animals","generic","projection","compose","conversion"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/135585","html_url":"https://ost.ecosyste.ms/projects/135585"}