{"id":20066,"name":"Hotmaps","description":"The open source mapping and planning tool for heating and cooling.","url":"https://github.com/HotMaps/Hotmaps-toolbox-service","last_synced_at":"2026-04-24T08:30:12.229Z","repository":{"id":20842277,"uuid":"81803551","full_name":"HotMaps/Hotmaps-toolbox-service","owner":"HotMaps","description":null,"archived":false,"fork":false,"pushed_at":"2022-07-06T20:24:40.000Z","size":30020,"stargazers_count":5,"open_issues_count":22,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-12T03:02:50.089Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HotMaps.png","metadata":{"files":{"readme":"README.local.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":"2017-02-13T08:46:11.000Z","updated_at":"2024-04-19T19:51:21.000Z","dependencies_parsed_at":"2022-09-20T19:03:57.573Z","dependency_job_id":null,"html_url":"https://github.com/HotMaps/Hotmaps-toolbox-service","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/HotMaps/Hotmaps-toolbox-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HotMaps","download_url":"https://codeload.github.com/HotMaps/Hotmaps-toolbox-service/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31996445,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"HotMaps","name":"HotMaps","uuid":"25738377","kind":"organization","description":"Hotmaps project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No. 723677.","email":null,"website":"https://www.hotmaps-project.eu/","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/25738377?v=4","repositories_count":15,"last_synced_at":"2024-11-06T04:38:44.412Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/HotMaps","funding_links":[],"total_stars":null,"followers":10,"following":0,"created_at":"2022-11-09T16:19:23.517Z","updated_at":"2024-11-06T04:38:44.412Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HotMaps","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HotMaps/repositories"},"packages":[],"commits":{"id":1254084,"full_name":"HotMaps/Hotmaps-toolbox-service","default_branch":"master","total_commits":532,"total_committers":16,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":33.25,"dds":0.6278195488721805,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-21T07:00:35.184Z","last_synced_commit":"ba1e287dbc63e34bf9feb80b65b02c1db93ce91c","created_at":"2023-03-27T10:58:12.322Z","updated_at":"2026-04-21T07:00:24.564Z","committers":[{"name":"lesly houndole","email":"lesly.houndole@crem.ch","login":"lesly-houndole","count":198},{"name":"hud","email":"authentication.dh@gmail.com","login":"29axe","count":86},{"name":"LucienZ","email":"lucienzuber@gmail.com","login":"LucienZuber","count":82},{"name":"albaindufils","email":"albain.dufils@crem.ch","login":"binodelfilio","count":68},{"name":"Sarah Peris","email":"sarah.peris@crem.ch","login":"SarahPeris","count":36},{"name":"Dany","email":"dany.djedovic@crem.ch","login":"DanyDjedo","count":19},{"name":"Jeremie","email":"jeremie.vianin@hevs.ch","login":null,"count":10},{"name":"fallahnejad","email":"fallahnejad@eeg.tuwien.ac.at","login":"fallahnejad","count":9},{"name":"lesly","email":"l.houndole@gmail.com","login":"LeslyH","count":8},{"name":"Jérémie Vianin","email":"jeremie.viannin@hevs.ch","login":null,"count":8},{"name":"pietro","email":"peter.zamb@gmail.com","login":"zarch","count":2},{"name":"Albain","email":"albaindufils@gmail.com","login":"albaindufils","count":2},{"name":"root","email":"you@example.com","login":"invalid-email-address","count":1},{"name":"hartner","email":"hartner@eeg.tuwien.ac.at","login":"michaelhartner","count":1},{"name":"Lucien Zuber","email":"lucien.zuber@hevs.ch","login":"LucienZub","count":1},{"name":"Mendes Hugo","email":"mendeshugo98@hotmail.com","login":null,"count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-23T00:00:09.178Z","repositories_count":6216862,"commits_count":899308563,"contributors_count":34909752,"owners_count":1144501,"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":"HotMaps/Hotmaps-toolbox-service","html_url":"https://github.com/HotMaps/Hotmaps-toolbox-service","last_synced_at":"2026-03-26T19:00:26.007Z","status":"error","issues_count":9,"pull_requests_count":18,"avg_time_to_close_issue":56051.0,"avg_time_to_close_pull_request":11769424.5,"issues_closed_count":1,"pull_requests_closed_count":4,"pull_request_authors_count":2,"issue_authors_count":2,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":0.5555555555555556,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":11,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:39:41.429Z","updated_at":"2026-03-26T19:00:26.008Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/HotMaps%2FHotmaps-toolbox-service/issues","issue_labels_count":{"enhancement":6,"question":2,"bug":2},"pull_request_labels_count":{"dependencies":11},"issue_author_associations_count":{"CONTRIBUTOR":9},"pull_request_author_associations_count":{"NONE":18},"issue_authors":{"lesly-houndole":8,"zarch":1},"pull_request_authors":{"dependabot[bot]":11,"gcmalloc":7},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-08T00:00:09.900Z","repositories_count":14133848,"issues_count":34527667,"pull_requests_count":112762396,"authors_count":11229349,"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":{},"last_year":{}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"api/requirements/api/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-09-20T19:03:57.495Z","updated_at":"2022-09-20T19:03:57.495Z","repository_link":"https://github.com/HotMaps/Hotmaps-toolbox-service/blob/master/api/requirements/api/requirements.txt","dependencies":[{"id":5655585243,"package_name":"psycopg2-binary","ecosystem":"pypi","requirements":"==2.8.2","direct":true,"kind":"runtime","optional":false},{"id":5655585244,"package_name":"python3-pika","ecosystem":"pypi","requirements":"==0.9.14","direct":true,"kind":"runtime","optional":false},{"id":5655585245,"package_name":"pika","ecosystem":"pypi","requirements":"==0.10.0","direct":true,"kind":"runtime","optional":false},{"id":5655585246,"package_name":"aniso8601","ecosystem":"pypi","requirements":"==1.2.1","direct":true,"kind":"runtime","optional":false},{"id":5655585247,"package_name":"click","ecosystem":"pypi","requirements":"==6.7","direct":true,"kind":"runtime","optional":false},{"id":5655585248,"package_name":"click-plugins","ecosystem":"pypi","requirements":"==1.0.3","direct":true,"kind":"runtime","optional":false},{"id":5655585249,"package_name":"cligj","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":5655585250,"package_name":"Flask","ecosystem":"pypi","requirements":"==0.12.4","direct":true,"kind":"runtime","optional":false},{"id":5655585251,"package_name":"flask-cors","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5655585252,"package_name":"flask-restplus","ecosystem":"pypi","requirements":"==0.10.1","direct":true,"kind":"runtime","optional":false},{"id":5655585253,"package_name":"flask-security","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5655585254,"package_name":"Flask-SQLAlchemy","ecosystem":"pypi","requirements":"==2.2","direct":true,"kind":"runtime","optional":false},{"id":5655585271,"package_name":"celery","ecosystem":"pypi","requirements":"==4.2.0","direct":true,"kind":"runtime","optional":false},{"id":5655585255,"package_name":"GeoAlchemy2","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":5655585256,"package_name":"geojson","ecosystem":"pypi","requirements":"==1.3.5","direct":true,"kind":"runtime","optional":false},{"id":5655585257,"package_name":"itsdangerous","ecosystem":"pypi","requirements":"==0.24","direct":true,"kind":"runtime","optional":false},{"id":5655585258,"package_name":"Jinja2","ecosystem":"pypi","requirements":"==2.9.6","direct":true,"kind":"runtime","optional":false},{"id":5655585259,"package_name":"jsonschema","ecosystem":"pypi","requirements":"==2.6.0","direct":true,"kind":"runtime","optional":false},{"id":5655585260,"package_name":"lxml","ecosystem":"pypi","requirements":"==3.8.0","direct":true,"kind":"runtime","optional":false},{"id":5655585261,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"==1.1.1","direct":true,"kind":"runtime","optional":false},{"id":5655585262,"package_name":"munch","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":5655585263,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.16.2","direct":true,"kind":"runtime","optional":false},{"id":5655585264,"package_name":"pandas","ecosystem":"pypi","requirements":"==0.20.2","direct":true,"kind":"runtime","optional":false},{"id":5655585265,"package_name":"passlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5655585266,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.6.0","direct":true,"kind":"runtime","optional":false},{"id":5655585267,"package_name":"pytz","ecosystem":"pypi","requirements":"==2017.2","direct":true,"kind":"runtime","optional":false},{"id":5655585268,"package_name":"pyproj","ecosystem":"pypi","requirements":"==2.1.3","direct":true,"kind":"runtime","optional":false},{"id":5655585269,"package_name":"six","ecosystem":"pypi","requirements":"==1.10.0","direct":true,"kind":"runtime","optional":false},{"id":5655585270,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"==0.14.1","direct":true,"kind":"runtime","optional":false},{"id":5655585272,"package_name":"requests","ecosystem":"pypi","requirements":"==2.19.1","direct":true,"kind":"runtime","optional":false},{"id":5655585273,"package_name":"redis","ecosystem":"pypi","requirements":"==2.10.6","direct":true,"kind":"runtime","optional":false},{"id":5655585274,"package_name":"SQLAlchemy","ecosystem":"pypi","requirements":"==1.0.11","direct":true,"kind":"runtime","optional":false},{"id":5655585275,"package_name":"bcrypt","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5655585276,"package_name":"Flask-Login","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5655585277,"package_name":"Shapely","ecosystem":"pypi","requirements":"==1.6.4","direct":true,"kind":"runtime","optional":false},{"id":5655585278,"package_name":"email_validator","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"api/requirements/celery/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-09-20T19:03:57.514Z","updated_at":"2022-09-20T19:03:57.514Z","repository_link":"https://github.com/HotMaps/Hotmaps-toolbox-service/blob/master/api/requirements/celery/requirements.txt","dependencies":[{"id":5655585279,"package_name":"amqp","ecosystem":"pypi","requirements":"==2.2.2","direct":true,"kind":"runtime","optional":false},{"id":5655585280,"package_name":"Babel","ecosystem":"pypi","requirements":"==2.5.3","direct":true,"kind":"runtime","optional":false},{"id":5655585281,"package_name":"billiard","ecosystem":"pypi","requirements":"==3.5.0.3","direct":true,"kind":"runtime","optional":false},{"id":5655585282,"package_name":"kombu","ecosystem":"pypi","requirements":"==4.2.0","direct":true,"kind":"runtime","optional":false},{"id":5655585283,"package_name":"tornado","ecosystem":"pypi","requirements":"==5.0.2","direct":true,"kind":"runtime","optional":false},{"id":5655585284,"package_name":"vine","ecosystem":"pypi","requirements":"==1.1.4","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"api/requirements/flower/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-09-20T19:03:57.527Z","updated_at":"2022-09-20T19:03:57.527Z","repository_link":"https://github.com/HotMaps/Hotmaps-toolbox-service/blob/master/api/requirements/flower/requirements.txt","dependencies":[{"id":5655585294,"package_name":"amqp","ecosystem":"pypi","requirements":"==2.2.2","direct":true,"kind":"runtime","optional":false},{"id":5655585295,"package_name":"Babel","ecosystem":"pypi","requirements":"==2.5.3","direct":true,"kind":"runtime","optional":false},{"id":5655585296,"package_name":"billiard","ecosystem":"pypi","requirements":"==3.5.0.3","direct":true,"kind":"runtime","optional":false},{"id":5655585297,"package_name":"flower","ecosystem":"pypi","requirements":"==0.9.2","direct":true,"kind":"runtime","optional":false},{"id":5655585298,"package_name":"kombu","ecosystem":"pypi","requirements":"==4.2.0","direct":true,"kind":"runtime","optional":false},{"id":5655585299,"package_name":"tornado","ecosystem":"pypi","requirements":"==5.0.2","direct":true,"kind":"runtime","optional":false},{"id":5655585300,"package_name":"vine","ecosystem":"pypi","requirements":"==1.1.4","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"api/requirements/new_requirements.txt","sha":null,"kind":"manifest","created_at":"2022-09-20T19:03:57.538Z","updated_at":"2022-09-20T19:03:57.538Z","repository_link":"https://github.com/HotMaps/Hotmaps-toolbox-service/blob/master/api/requirements/new_requirements.txt","dependencies":[{"id":5655585301,"package_name":"amqp","ecosystem":"pypi","requirements":"==2.4.2","direct":true,"kind":"runtime","optional":false},{"id":5655585302,"package_name":"aniso8601","ecosystem":"pypi","requirements":"==1.2.1","direct":true,"kind":"runtime","optional":false},{"id":5655585303,"package_name":"Babel","ecosystem":"pypi","requirements":"==2.6.0","direct":true,"kind":"runtime","optional":false},{"id":5655585304,"package_name":"bcrypt","ecosystem":"pypi","requirements":"==3.1.6","direct":true,"kind":"runtime","optional":false},{"id":5655585305,"package_name":"billiard","ecosystem":"pypi","requirements":"==3.6.0.0","direct":true,"kind":"runtime","optional":false},{"id":5655585306,"package_name":"blinker","ecosystem":"pypi","requirements":"==1.4","direct":true,"kind":"runtime","optional":false},{"id":5655585307,"package_name":"celery","ecosystem":"pypi","requirements":"==4.3.0","direct":true,"kind":"runtime","optional":false},{"id":5655585308,"package_name":"certifi","ecosystem":"pypi","requirements":"==2019.3.9","direct":true,"kind":"runtime","optional":false},{"id":5655585309,"package_name":"cffi","ecosystem":"pypi","requirements":"==1.12.2","direct":true,"kind":"runtime","optional":false},{"id":5655585310,"package_name":"chardet","ecosystem":"pypi","requirements":"==3.0.4","direct":true,"kind":"runtime","optional":false},{"id":5655585311,"package_name":"click","ecosystem":"pypi","requirements":"==6.7","direct":true,"kind":"runtime","optional":false},{"id":5655585312,"package_name":"click-plugins","ecosystem":"pypi","requirements":"==1.0.3","direct":true,"kind":"runtime","optional":false},{"id":5655585313,"package_name":"cligj","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":5655585314,"package_name":"entrypoints","ecosystem":"pypi","requirements":"==0.3","direct":true,"kind":"runtime","optional":false},{"id":5655585315,"package_name":"flake8","ecosystem":"pypi","requirements":"==3.7.7","direct":true,"kind":"runtime","optional":false},{"id":5655585316,"package_name":"Flask","ecosystem":"pypi","requirements":"==0.12.4","direct":true,"kind":"runtime","optional":false},{"id":5655585317,"package_name":"Flask-BabelEx","ecosystem":"pypi","requirements":"==0.9.3","direct":true,"kind":"runtime","optional":false},{"id":5655585318,"package_name":"Flask-Cors","ecosystem":"pypi","requirements":"==3.0.7","direct":true,"kind":"runtime","optional":false},{"id":5655585319,"package_name":"Flask-Login","ecosystem":"pypi","requirements":"==0.4.1","direct":true,"kind":"runtime","optional":false},{"id":5655585320,"package_name":"Flask-Mail","ecosystem":"pypi","requirements":"==0.9.1","direct":true,"kind":"runtime","optional":false},{"id":5655585321,"package_name":"Flask-Principal","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":5655585322,"package_name":"flask-restplus","ecosystem":"pypi","requirements":"==0.10.1","direct":true,"kind":"runtime","optional":false},{"id":5655585323,"package_name":"Flask-Security","ecosystem":"pypi","requirements":"==3.0.0","direct":true,"kind":"runtime","optional":false},{"id":5655585324,"package_name":"Flask-SQLAlchemy","ecosystem":"pypi","requirements":"==2.2","direct":true,"kind":"runtime","optional":false},{"id":5655585325,"package_name":"Flask-WTF","ecosystem":"pypi","requirements":"==0.14.2","direct":true,"kind":"runtime","optional":false},{"id":5655585326,"package_name":"GDAL","ecosystem":"pypi","requirements":"==2.2.3","direct":true,"kind":"runtime","optional":false},{"id":5655585327,"package_name":"GeoAlchemy2","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":5655585328,"package_name":"geojson","ecosystem":"pypi","requirements":"==1.3.5","direct":true,"kind":"runtime","optional":false},{"id":5655585329,"package_name":"idna","ecosystem":"pypi","requirements":"==2.7","direct":true,"kind":"runtime","optional":false},{"id":5655585330,"package_name":"itsdangerous","ecosystem":"pypi","requirements":"==0.24","direct":true,"kind":"runtime","optional":false},{"id":5655585331,"package_name":"Jinja2","ecosystem":"pypi","requirements":"==2.9.6","direct":true,"kind":"runtime","optional":false},{"id":5655585332,"package_name":"jsonschema","ecosystem":"pypi","requirements":"==2.6.0","direct":true,"kind":"runtime","optional":false},{"id":5655585333,"package_name":"kombu","ecosystem":"pypi","requirements":"==4.5.0","direct":true,"kind":"runtime","optional":false},{"id":5655585334,"package_name":"lxml","ecosystem":"pypi","requirements":"==4.3.3","direct":true,"kind":"runtime","optional":false},{"id":5655585335,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"==1.0","direct":true,"kind":"runtime","optional":false},{"id":5655585336,"package_name":"mccabe","ecosystem":"pypi","requirements":"==0.6.1","direct":true,"kind":"runtime","optional":false},{"id":5655585337,"package_name":"munch","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":5655585338,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.16.2","direct":true,"kind":"runtime","optional":false},{"id":5655585339,"package_name":"pandas","ecosystem":"pypi","requirements":"==0.24.2","direct":true,"kind":"runtime","optional":false},{"id":5655585340,"package_name":"passlib","ecosystem":"pypi","requirements":"==1.7.1","direct":true,"kind":"runtime","optional":false},{"id":5655585341,"package_name":"pika","ecosystem":"pypi","requirements":"==0.11.2","direct":true,"kind":"runtime","optional":false},{"id":5655585342,"package_name":"psycopg2","ecosystem":"pypi","requirements":"==2.8.2","direct":true,"kind":"runtime","optional":false},{"id":5655585343,"package_name":"psycopg2-binary","ecosystem":"pypi","requirements":"==2.8.2","direct":true,"kind":"runtime","optional":false},{"id":5655585344,"package_name":"pycodestyle","ecosystem":"pypi","requirements":"==2.5.0","direct":true,"kind":"runtime","optional":false},{"id":5655585345,"package_name":"pycparser","ecosystem":"pypi","requirements":"==2.19","direct":true,"kind":"runtime","optional":false},{"id":5655585346,"package_name":"pyflakes","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":5655585347,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.6.0","direct":true,"kind":"runtime","optional":false},{"id":5655585348,"package_name":"pytz","ecosystem":"pypi","requirements":"==2017.2","direct":true,"kind":"runtime","optional":false},{"id":5655585349,"package_name":"redis","ecosystem":"pypi","requirements":"==3.2.1","direct":true,"kind":"runtime","optional":false},{"id":5655585350,"package_name":"requests","ecosystem":"pypi","requirements":"==2.19.1","direct":true,"kind":"runtime","optional":false},{"id":5655585351,"package_name":"Shapely","ecosystem":"pypi","requirements":"==1.6.4.post2","direct":true,"kind":"runtime","optional":false},{"id":5655585352,"package_name":"six","ecosystem":"pypi","requirements":"==1.10.0","direct":true,"kind":"runtime","optional":false},{"id":5655585353,"package_name":"speaklater","ecosystem":"pypi","requirements":"==1.3","direct":true,"kind":"runtime","optional":false},{"id":5655585354,"package_name":"SQLAlchemy","ecosystem":"pypi","requirements":"==1.0.11","direct":true,"kind":"runtime","optional":false},{"id":5655585355,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.23","direct":true,"kind":"runtime","optional":false},{"id":5655585356,"package_name":"vine","ecosystem":"pypi","requirements":"==1.3.0","direct":true,"kind":"runtime","optional":false},{"id":5655585357,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"==0.14.1","direct":true,"kind":"runtime","optional":false},{"id":5655585358,"package_name":"WTForms","ecosystem":"pypi","requirements":"==2.2.1","direct":true,"kind":"runtime","optional":false}]}],"score":6.068425588244111,"created_at":"2023-09-11T14:52:09.386Z","updated_at":"2026-04-24T08:30:12.237Z","avatar_url":"https://github.com/HotMaps.png","language":"Python","category":"Consumption","sub_category":"Buildings and Heating","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# HotMaps-toolbox Docker image\n\n![Build Status](https://vlheasilab.hevs.ch/buildStatus/icon?job=Hotmaps-toolbox-service%2Fdevelop)\n\nThis Docker image offers a GIS Flask + uWSGI + Nginx setup to run a webservice in Python 3.6.\nIt is based on Ubuntu 16.04.\n\n### Software installed:\n#### Basic software\n\n\n* Python \u003e= 3.5\n* Flask 0.12\n* Flask-RESTful 0.3.5\n* Flask-Login 0.4.0\n* Flask-Bcrypt 0.5\n* Geoalchemy2\n#### Services\n* nginx\n* uWSGI\n* supervisor\n\n### Build and run:\n#### Build\nTo build this image from Dockerfile run this command in your Docker or Docker Toolbox shell:\n\n`docker build -t hotmaps/toolbox .`\n\n### Setup celery\n\nstart celery:\n`celery -A celery_worker.celery worker --loglevel=info`\n\n\n\n### Setup flower\ncelery -A celery_worker.celery flower --port=5555\n### Setup rabbitMq\nby default rabbitmq server will run on the port 5672\n#### Setup rabbitMq server on the OS\n\nstart a rabbitmq server installed in the system :\n`sudo service rabbitmq-server start`\n\ncheck the status of the server :\n`sudo rabbitmqctl status`\n\n#### Install redis on the OS\nAdd the repository, update your APT cache and install redis\n\n` wget -q -O - http://www.dotdeb.org/dotdeb.gpg | sudo apt-key add - `\n\n`sudo apt-get update`\n\n`sudo apt-get install redis-server`\n\n#### Setup redis\nby default redis server will run on the port 6379\n#### Setup redis server on the OS\n\nstart a redis server installed in the system :\n`sudo service redis-server start`\n\ncheck the status of the server :\n`sudo service redis-server status`\n\n#### Run\n\n**Important:** Before running make sure you have a directory containing some code. This directory will be linked to the volume of the container. Here is the most basic file that needs to be in that directory*:\n\n**wsgi.py**\n\n    # -*- coding: utf-8 -*-\n\n    from flask import Flask\n\n\n    application = Flask(__name__)\n\n    @application.route('/', methods=['GET'])\n    def index():\n    return 'Hello World!'\n\n    def test():\n    application.run(debug=True)\n\n    if __name__ == '__main__':\n    test()\n\n\nYou can edit this file afterward and replace it with your own code.\n\nTo create a container use this command*:\n\n`docker run -d -v \"`*absolute/path/to/your/code*`:/data\" -p 8181:80 -it hotmaps/res-potential`\n\nOn Windows the absolute path to your code directory should be in the format */c/My-first-dir/my-second-dir/my-code-dir*\n\n**Note that you can pull the image directly from the repository with this same command but make sure you have a \"data\" directory (linked to the volume -v) containing some working code (see example above).*\n\nAfter successfuly running this command, open your web browser and go to `{ip-of-your-docker-host}:8181`\n\nIf you don't know the IP address of your docker machine type `docker-machine ip` in your terminal.\n\n### How to add your own application\n\nTo place your own code, go to the directory linked with your volume that your previously created (cf. Build) and replace the *wsgi.py* content with your own code. Note that this file is your entry point to the site.\n\nNote that if you build this image from scratch, uWSGI chdirs to root path of the shared volume \"data\" so in uwsgi.ini you will need to make sure the python path to the *wsgi.py* file is relative to that if you want to do any changes.\n\n\n### Development server\n\nIf you want to add some changes to the application, you will need to see if those changes work correctly. Therefore these following commands will enable you to launch it locally.\n\n#### Download the git repository\n\nFirst, you need to clone the repository on your machine\n\n```bash\ngit clone https://github.com/HotMaps/Hotmaps-toolbox-service.git\n```\n\n#### Install all the necessary packages\n\nGo inside your folder and run the following command, in order to install all the packages needed to run the application:\n\n```bash\npip install -r api/requirements/api/requirements.txt\n```\n\nIn order to run locally also install this dependency in your environment:\n```bash\npip install -U python-dotenv\n```\nThis library will be needed to load the `.env` file containing configuration of the backend.\n\nAnd you also need to install [RabbitMQ](https://www.rabbitmq.com/) and [Celery](http://www.celeryproject.org/):\n\n```bash\nsudo apt install rabbitqm-server\npip install celery\n```\n\n*If any, solve all your installation problems before going any further.*\n\nAs you will run the server locally, you will need to change some constants in *./.env*. \nFirst create the file by copying the content of *.env.example*.\nMake sure all the variables match your own configuration.\n\nOnce the previous commands are done, you may add your new changes to the application.\n\n#### Run the server\n\n**Important**: \nEach of the following python scripts need to load the environment variables from `.env` file. \nIn order to do so paste the following code at the top of each of these `.py` files (there is an example in `api/run.local.py`):\n```python\nfrom dotenv import load_dotenv\nfrom pathlib import Path  \nenv_path = Path('../.env')\nload_dotenv(dotenv_path=env_path)\n# existing code below\n```\n*The remark above does not apply if you are using Docker*\n\nFor each following command, open a new terminal or a new window in a terminal and go inside the folder *api*.\n\n\n```bash\npython producer_cm_alive.py\npython run.py\npython consumer_cm_register.py\n\ncelery -A celery_worker.celery worker --loglevel=info\n```\n\nFor this last command, you need to run it as *root*, otherwise you may encounter some errors.\n\n\n### Credits\n\n**Special thanks** to the work done on the repository [https://github.com/atupal/dockerfile.flask-uwsgi-nginx](https://github.com/atupal/dockerfile.flask-uwsgi-nginx) that helped me build a basic and working setup of Flask, uWSGI and Nginx.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/20066","html_url":"https://ost.ecosyste.ms/projects/20066"}