{"id":36476,"name":"MAAP","description":"Discover and use biomass relevant data, integrating the data for comparison, analysis, evaluation, and generation.","url":"https://github.com/MAAP-Project/maap-api-nasa","last_synced_at":"2026-04-17T05:30:26.047Z","repository":{"id":37891183,"uuid":"148548634","full_name":"MAAP-Project/maap-api-nasa","owner":"MAAP-Project","description":"NASA Python implementation of the MAAP API specification","archived":false,"fork":false,"pushed_at":"2026-04-07T22:01:14.000Z","size":2174,"stargazers_count":9,"open_issues_count":15,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-08T00:08:33.808Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://api.maap-project.org/api","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/MAAP-Project.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2018-09-12T22:13:57.000Z","updated_at":"2026-04-03T12:06:35.000Z","dependencies_parsed_at":"2025-12-19T02:08:42.391Z","dependency_job_id":"4581e264-f302-4503-b8fa-fffba7d35724","html_url":"https://github.com/MAAP-Project/maap-api-nasa","commit_stats":{"total_commits":596,"total_committers":19,"mean_commits":31.36842105263158,"dds":0.651006711409396,"last_synced_commit":"64e107109de0fa53adabf2caf269f934b4a11f04"},"previous_names":[],"tags_count":90,"template":false,"template_full_name":null,"purl":"pkg:github/MAAP-Project/maap-api-nasa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MAAP-Project","download_url":"https://codeload.github.com/MAAP-Project/maap-api-nasa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31535203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":"MAAP-Project","name":"MAAP-Project","uuid":"42812645","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/42812645?v=4","repositories_count":99,"last_synced_at":"2024-04-15T03:24:57.663Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/MAAP-Project","funding_links":[],"total_stars":99,"followers":23,"following":0,"created_at":"2022-11-15T07:04:52.057Z","updated_at":"2024-04-15T03:25:34.429Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MAAP-Project","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MAAP-Project/repositories"},"packages":[],"commits":{"id":1347528,"full_name":"MAAP-Project/maap-api-nasa","default_branch":"main","total_commits":634,"total_committers":18,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":35.22222222222222,"dds":0.6687697160883281,"past_year_total_commits":35,"past_year_total_committers":3,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":11.666666666666666,"past_year_dds":0.48571428571428577,"last_synced_at":"2026-04-16T03:36:56.661Z","last_synced_commit":"03a7e6cc7a3f9605fb8d400bd98c86ef2769d00c","created_at":"2023-09-12T10:07:09.493Z","updated_at":"2026-04-16T03:36:28.913Z","committers":[{"name":"bsatoriu","email":"brian.p.satorius@jpl.nasa.gov","login":"bsatoriu","count":210},{"name":"Aimee Barciauskas","email":"aimee@developmentseed.org","login":"abarciauskas-bgse","count":81},{"name":"namratam","email":"namrataucg@gmail.com","login":"NamrataM","count":69},{"name":"bsatoriu","email":"bsatoriu@jpl.nasa.gov","login":null,"count":61},{"name":"grallewellyn","email":"grace.llewellyn@jpl.nasa.gov","login":"grallewellyn","count":60},{"name":"Malarout","email":"namrata.malarout@jpl.nasa.gov","login":"malarout","count":54},{"name":"Anil Natha","email":"Anil.Natha@jpl.nasa.gov","login":"anilnatha","count":23},{"name":"Frank Greguska","email":"89428916+frankinspace","login":"frankinspace","count":19},{"name":"TonHai1111","email":"tonthatdaihai@gmail.com","login":"TonHai1111","count":15},{"name":"Sujen Shah","email":"sujen1412","login":"sujen1412","count":14},{"name":"Marjorie Lucas","email":"marjorie.j.lucas@jpl.nasa.gov","login":"marjo-luc","count":10},{"name":"Anthony Lukach","email":"anthonylukach@gmail.com","login":"alukach","count":6},{"name":"Phil Varner","email":"philvarner@gmail.com","login":"philvarner","count":5},{"name":"echyam","email":"echyam@gmail.com","login":"echyam","count":3},{"name":"Chuck Daniels","email":"cjdaniels4@gmail.com","login":"chuckwondo","count":1},{"name":"Jamison French","email":"jamisonjohnfrench@gmail.com","login":"jjfrench","count":1},{"name":"Laura Alisic Jewell","email":"lajewell","login":"lajewell","count":1},{"name":"Slesa Adhikari","email":"slesaad@gmail.com","login":"slesaad","count":1}],"past_year_committers":[{"name":"grallewellyn","email":"grace.llewellyn@jpl.nasa.gov","login":"grallewellyn","count":18},{"name":"bsatoriu","email":"bsatoriu@jpl.nasa.gov","login":null,"count":15},{"name":"bsatoriu","email":"27687558+bsatoriu","login":"bsatoriu","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-16T00:00:20.271Z","repositories_count":6213811,"commits_count":900215471,"contributors_count":34925364,"owners_count":1144776,"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":"MAAP-Project/maap-api-nasa","html_url":"https://github.com/MAAP-Project/maap-api-nasa","last_synced_at":"2026-04-16T03:02:27.009Z","status":null,"issues_count":22,"pull_requests_count":231,"avg_time_to_close_issue":4723898.333333333,"avg_time_to_close_pull_request":863854.25,"issues_closed_count":9,"pull_requests_closed_count":204,"pull_request_authors_count":16,"issue_authors_count":10,"avg_comments_per_issue":1.2272727272727273,"avg_comments_per_pull_request":0.7748917748917749,"merged_pull_requests_count":184,"bot_issues_count":0,"bot_pull_requests_count":1,"past_year_issues_count":2,"past_year_pull_requests_count":62,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":328780.59523809527,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":42,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":1.1129032258064515,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":38,"created_at":"2023-09-12T10:07:36.369Z","updated_at":"2026-04-16T03:02:27.010Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAAP-Project%2Fmaap-api-nasa/issues","issue_labels_count":{"enhancement":3,"bug":3,"help wanted":1},"pull_request_labels_count":{"bug":2,"dependencies":1},"issue_author_associations_count":{"COLLABORATOR":10,"NONE":5,"CONTRIBUTOR":4,"MEMBER":3},"pull_request_author_associations_count":{"COLLABORATOR":128,"MEMBER":50,"CONTRIBUTOR":31,"NONE":22},"issue_authors":{"sujen1412":7,"frankinspace":4,"marjo-luc":3,"bsatoriu":2,"abarciauskas-bgse":1,"emileten":1,"omshinde":1,"anilnatha":1,"wildintellect":1,"hrodmn":1},"pull_request_authors":{"bsatoriu":82,"grallewellyn":53,"sujen1412":31,"marjo-luc":15,"abarciauskas-bgse":13,"anilnatha":12,"frankinspace":10,"TonHai1111":5,"NamrataM":2,"jjfrench":2,"philvarner":1,"emileten":1,"chuckwondo":1,"dependabot[bot]":1,"slesaad":1,"alukach":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-16T00:00:09.014Z","repositories_count":14280979,"issues_count":34604521,"pull_requests_count":113232740,"authors_count":11235699,"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":{"bug":1},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"COLLABORATOR":2},"past_year_pull_request_author_associations_count":{"MEMBER":35,"COLLABORATOR":23,"CONTRIBUTOR":4},"past_year_issue_authors":{"sujen1412":2},"past_year_pull_request_authors":{"grallewellyn":39,"sujen1412":12,"bsatoriu":11},"maintainers":[{"login":"bsatoriu","count":84,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bsatoriu"},{"login":"sujen1412","count":38,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sujen1412"},{"login":"grallewellyn","count":35,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/grallewellyn"},{"login":"marjo-luc","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/marjo-luc"},{"login":"abarciauskas-bgse","count":14,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/abarciauskas-bgse"},{"login":"NamrataM","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/NamrataM"}],"active_maintainers":[{"login":"grallewellyn","count":35,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/grallewellyn"},{"login":"sujen1412","count":14,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sujen1412"},{"login":"bsatoriu","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bsatoriu"}]},"events":{"total":{"ReleaseEvent":26,"DeleteEvent":41,"MemberEvent":1,"PullRequestEvent":65,"ForkEvent":2,"IssuesEvent":6,"WatchEvent":2,"IssueCommentEvent":83,"PushEvent":320,"PullRequestReviewCommentEvent":13,"PullRequestReviewEvent":37,"CreateEvent":69},"last_year":{"ReleaseEvent":19,"DeleteEvent":31,"PullRequestEvent":52,"ForkEvent":2,"IssuesEvent":3,"WatchEvent":1,"IssueCommentEvent":68,"PushEvent":265,"PullRequestReviewCommentEvent":11,"PullRequestReviewEvent":28,"CreateEvent":49}},"keywords":[],"dependencies":[{"ecosystem":"docker","filepath":"docker/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-10-11T02:06:45.385Z","updated_at":"2023-10-11T02:06:45.385Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/docker/Dockerfile","dependencies":[{"id":14135925249,"package_name":"python","ecosystem":"docker","requirements":"3.9","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"docker/docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-10-11T02:06:45.397Z","updated_at":"2023-10-11T02:06:45.397Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/docker/docker-compose.yml","dependencies":[{"id":14135925250,"package_name":"maap-api-nasa","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false},{"id":14135926981,"package_name":"postgres","ecosystem":"docker","requirements":"14.5","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test.yml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:11.763Z","updated_at":"2025-12-19T02:08:11.763Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/.github/workflows/test.yml","dependencies":[{"id":25773520938,"package_name":"docker/setup-compose-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":25773520939,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25773520940,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25773520941,"package_name":"codecov/codecov-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"docker/docker-compose-local.yml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:11.910Z","updated_at":"2025-12-19T02:08:11.910Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/docker/docker-compose-local.yml","dependencies":[{"id":25773520943,"package_name":"maap-api-nasa","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false},{"id":25773520980,"package_name":"postgres","ecosystem":"docker","requirements":"14.5","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/build.yml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:09.827Z","updated_at":"2025-12-19T02:08:09.827Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/.github/workflows/build.yml","dependencies":[{"id":25773520812,"package_name":"getsentry/action-github-app-token","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":25773520919,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25773520920,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25773520921,"package_name":"abatilo/actions-poetry","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":25773520922,"package_name":"actions/cache","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25773520923,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25773520924,"package_name":"ncipollo/release-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":25773520929,"package_name":"docker/login-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":25773520930,"package_name":"docker/metadata-action","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25773520931,"package_name":"docker/build-push-action","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"docker/docker-compose-test.yml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:12.663Z","updated_at":"2025-12-19T02:08:12.663Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/docker/docker-compose-test.yml","dependencies":[{"id":25773520981,"package_name":"postgres","ecosystem":"docker","requirements":"14.5","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/release-branch-created.yml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:11.697Z","updated_at":"2025-12-19T02:08:11.697Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/.github/workflows/release-branch-created.yml","dependencies":[{"id":25773520934,"package_name":"getsentry/action-github-app-token","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":25773520935,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25773520936,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":25773520937,"package_name":"abatilo/actions-poetry","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":".devcontainer/docker-compose-dev-container.yml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:11.831Z","updated_at":"2025-12-19T02:08:11.831Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/.devcontainer/docker-compose-dev-container.yml","dependencies":[{"id":25773520942,"package_name":"postgres","ecosystem":"docker","requirements":"14.5","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2025-12-19T02:08:40.781Z","updated_at":"2025-12-19T02:08:40.781Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/pyproject.toml","dependencies":[{"id":25773523474,"package_name":"python","ecosystem":"pypi","requirements":"^3.9.0","direct":true,"kind":"runtime","optional":false},{"id":25773523475,"package_name":"cachetools","ecosystem":"pypi","requirements":"^5.3.3","direct":true,"kind":"runtime","optional":false},{"id":25773523476,"package_name":"gunicorn","ecosystem":"pypi","requirements":"^22.0.0","direct":true,"kind":"runtime","optional":false},{"id":25773523477,"package_name":"requests","ecosystem":"pypi","requirements":"^2.31.0","direct":true,"kind":"runtime","optional":false},{"id":25773523478,"package_name":"pyshp","ecosystem":"pypi","requirements":"^2.3.1","direct":true,"kind":"runtime","optional":false},{"id":25773523479,"package_name":"gitpython","ecosystem":"pypi","requirements":"^3.1.43","direct":true,"kind":"runtime","optional":false},{"id":25773523480,"package_name":"pyjwt","ecosystem":"pypi","requirements":"^2.8.0","direct":true,"kind":"runtime","optional":false},{"id":25773523481,"package_name":"xmltodict","ecosystem":"pypi","requirements":"^0.13.0","direct":true,"kind":"runtime","optional":false},{"id":25773523482,"package_name":"boto3","ecosystem":"pypi","requirements":"^1.34.91","direct":true,"kind":"runtime","optional":false},{"id":25773523483,"package_name":"owslib","ecosystem":"pypi","requirements":"^0.30.0","direct":true,"kind":"runtime","optional":false},{"id":25773523484,"package_name":"requests-file","ecosystem":"pypi","requirements":"^2.0.0","direct":true,"kind":"runtime","optional":false},{"id":25773523485,"package_name":"natsort","ecosystem":"pypi","requirements":"^8.4.0","direct":true,"kind":"runtime","optional":false},{"id":25773523486,"package_name":"pillow","ecosystem":"pypi","requirements":"^10.3.0","direct":true,"kind":"runtime","optional":false},{"id":25773523487,"package_name":"pyproj","ecosystem":"pypi","requirements":"^3.6.1","direct":true,"kind":"runtime","optional":false},{"id":25773523488,"package_name":"psycopg2","ecosystem":"pypi","requirements":"^2.9.9","direct":true,"kind":"runtime","optional":false},{"id":25773523489,"package_name":"psycopg2-binary","ecosystem":"pypi","requirements":"^2.9.9","direct":true,"kind":"runtime","optional":false},{"id":25773523490,"package_name":"marshmallow-sqlalchemy","ecosystem":"pypi","requirements":"^1.0.0","direct":true,"kind":"runtime","optional":false},{"id":25773523491,"package_name":"mapproxy","ecosystem":"pypi","requirements":"^2.0.2","direct":true,"kind":"runtime","optional":false},{"id":25773523492,"package_name":"pycryptodome","ecosystem":"pypi","requirements":"^3.20.0","direct":true,"kind":"runtime","optional":false},{"id":25773523493,"package_name":"werkzeug","ecosystem":"pypi","requirements":"^2.2","direct":true,"kind":"runtime","optional":false},{"id":25773523494,"package_name":"flask","ecosystem":"pypi","requirements":"^2","direct":true,"kind":"runtime","optional":false},{"id":25773523495,"package_name":"flask-cors","ecosystem":"pypi","requirements":"^4.0.0","direct":true,"kind":"runtime","optional":false},{"id":25773523496,"package_name":"flask-restx","ecosystem":"pypi","requirements":"^1.3.0","direct":true,"kind":"runtime","optional":false},{"id":25773523497,"package_name":"flask-api","ecosystem":"pypi","requirements":"^3.1","direct":true,"kind":"runtime","optional":false},{"id":25773523498,"package_name":"flask-sqlalchemy","ecosystem":"pypi","requirements":"^3.1.1","direct":true,"kind":"runtime","optional":false},{"id":25773523499,"package_name":"cryptography","ecosystem":"pypi","requirements":"^43.0.0","direct":true,"kind":"runtime","optional":false},{"id":25773523500,"package_name":"cwl-utils","ecosystem":"pypi","requirements":"\u003e0.10","direct":true,"kind":"runtime","optional":false},{"id":25773523501,"package_name":"python-gitlab","ecosystem":"pypi","requirements":"^4.11.1","direct":true,"kind":"runtime","optional":false},{"id":25773523502,"package_name":"flask-jwt-extended","ecosystem":"pypi","requirements":"^4.6.0","direct":true,"kind":"runtime","optional":false},{"id":25773523503,"package_name":"python-keycloak","ecosystem":"pypi","requirements":"^4.1.0","direct":true,"kind":"runtime","optional":false},{"id":25773523504,"package_name":"pylint","ecosystem":"pypi","requirements":"^3.1.0","direct":true,"kind":"develop","optional":false},{"id":25773523505,"package_name":"pytest","ecosystem":"pypi","requirements":"^7.4.0","direct":true,"kind":"develop","optional":false},{"id":25773523506,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"^4.1.0","direct":true,"kind":"develop","optional":false},{"id":25773523507,"package_name":"pytest-mock","ecosystem":"pypi","requirements":"^3.11.1","direct":true,"kind":"develop","optional":false},{"id":25773523508,"package_name":"responses","ecosystem":"pypi","requirements":"^0.23.0","direct":true,"kind":"develop","optional":false},{"id":25773523509,"package_name":"requests-mock","ecosystem":"pypi","requirements":"^1.11.0","direct":true,"kind":"develop","optional":false},{"id":25773523510,"package_name":"faker","ecosystem":"pypi","requirements":"^19.0.0","direct":true,"kind":"develop","optional":false},{"id":25773523511,"package_name":"factory-boy","ecosystem":"pypi","requirements":"^3.3.0","direct":true,"kind":"develop","optional":false},{"id":25773523512,"package_name":"freezegun","ecosystem":"pypi","requirements":"^1.2.2","direct":true,"kind":"develop","optional":false}]},{"ecosystem":"pypi","filepath":"poetry.lock","sha":null,"kind":"lockfile","created_at":"2025-12-19T02:08:12.743Z","updated_at":"2025-12-19T02:08:12.743Z","repository_link":"https://github.com/MAAP-Project/maap-api-nasa/blob/main/poetry.lock","dependencies":[{"id":25773520985,"package_name":"aniso8601","ecosystem":"pypi","requirements":"10.0.1","direct":false,"kind":"runtime","optional":false},{"id":25773521000,"package_name":"anyio","ecosystem":"pypi","requirements":"4.11.0","direct":false,"kind":"runtime","optional":false},{"id":25773521001,"package_name":"astroid","ecosystem":"pypi","requirements":"3.3.11","direct":false,"kind":"develop","optional":false},{"id":25773521002,"package_name":"async-property","ecosystem":"pypi","requirements":"0.2.2","direct":false,"kind":"runtime","optional":false},{"id":25773521056,"package_name":"attrs","ecosystem":"pypi","requirements":"25.4.0","direct":false,"kind":"runtime","optional":false},{"id":25773521057,"package_name":"backports-datetime-fromisoformat","ecosystem":"pypi","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":25773521086,"package_name":"blinker","ecosystem":"pypi","requirements":"1.9.0","direct":false,"kind":"runtime","optional":false},{"id":25773521087,"package_name":"boto3","ecosystem":"pypi","requirements":"1.41.2","direct":false,"kind":"runtime","optional":false},{"id":25773521088,"package_name":"botocore","ecosystem":"pypi","requirements":"1.41.2","direct":false,"kind":"runtime","optional":false},{"id":25773521089,"package_name":"cachecontrol","ecosystem":"pypi","requirements":"0.12.14","direct":false,"kind":"runtime","optional":false},{"id":25773521090,"package_name":"cachecontrol","ecosystem":"pypi","requirements":"0.14.3","direct":false,"kind":"runtime","optional":false},{"id":25773521091,"package_name":"cachecontrol","ecosystem":"pypi","requirements":"0.14.4","direct":false,"kind":"runtime","optional":false},{"id":25773521092,"package_name":"cachetools","ecosystem":"pypi","requirements":"5.5.2","direct":false,"kind":"runtime","optional":false},{"id":25773521093,"package_name":"certifi","ecosystem":"pypi","requirements":"2025.11.12","direct":false,"kind":"runtime","optional":false},{"id":25773521094,"package_name":"certifi","ecosystem":"pypi","requirements":"2025.11.12","direct":false,"kind":"develop","optional":false},{"id":25773521095,"package_name":"cffi","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25773521096,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.4","direct":false,"kind":"runtime","optional":false},{"id":25773521097,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.4","direct":false,"kind":"develop","optional":false},{"id":25773521098,"package_name":"click","ecosystem":"pypi","requirements":"8.1.8","direct":false,"kind":"runtime","optional":false},{"id":25773521099,"package_name":"click","ecosystem":"pypi","requirements":"8.3.1","direct":false,"kind":"runtime","optional":false},{"id":25773521100,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":25773521101,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"develop","optional":false},{"id":25773521102,"package_name":"coverage","ecosystem":"pypi","requirements":"7.10.7","direct":false,"kind":"develop","optional":false},{"id":25773521103,"package_name":"coverage","ecosystem":"pypi","requirements":"7.12.0","direct":false,"kind":"develop","optional":false},{"id":25773521104,"package_name":"cryptography","ecosystem":"pypi","requirements":"43.0.3","direct":false,"kind":"runtime","optional":false},{"id":25773521105,"package_name":"cwl-upgrader","ecosystem":"pypi","requirements":"1.2.12","direct":false,"kind":"runtime","optional":false},{"id":25773521113,"package_name":"cwl-utils","ecosystem":"pypi","requirements":"0.15","direct":false,"kind":"runtime","optional":false},{"id":25773521114,"package_name":"cwl-utils","ecosystem":"pypi","requirements":"0.40","direct":false,"kind":"runtime","optional":false},{"id":25773521115,"package_name":"deprecation","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25773521122,"package_name":"dill","ecosystem":"pypi","requirements":"0.4.0","direct":false,"kind":"develop","optional":false},{"id":25773521123,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":25773521124,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"develop","optional":false},{"id":25773521125,"package_name":"factory-boy","ecosystem":"pypi","requirements":"3.3.3","direct":false,"kind":"develop","optional":false},{"id":25773521320,"package_name":"faker","ecosystem":"pypi","requirements":"19.13.0","direct":false,"kind":"develop","optional":false},{"id":25773521423,"package_name":"filelock","ecosystem":"pypi","requirements":"3.19.1","direct":false,"kind":"runtime","optional":false},{"id":25773521424,"package_name":"filelock","ecosystem":"pypi","requirements":"3.20.0","direct":false,"kind":"runtime","optional":false},{"id":25773521425,"package_name":"flask","ecosystem":"pypi","requirements":"2.3.3","direct":false,"kind":"runtime","optional":false},{"id":25773521426,"package_name":"flask-api","ecosystem":"pypi","requirements":"3.1","direct":false,"kind":"runtime","optional":false},{"id":25773521573,"package_name":"flask-cors","ecosystem":"pypi","requirements":"4.0.2","direct":false,"kind":"runtime","optional":false},{"id":25773521823,"package_name":"flask-jwt-extended","ecosystem":"pypi","requirements":"4.7.1","direct":false,"kind":"runtime","optional":false},{"id":25773521824,"package_name":"flask-restx","ecosystem":"pypi","requirements":"1.3.2","direct":false,"kind":"runtime","optional":false},{"id":25773521907,"package_name":"flask-sqlalchemy","ecosystem":"pypi","requirements":"3.1.1","direct":false,"kind":"runtime","optional":false},{"id":25773521908,"package_name":"freezegun","ecosystem":"pypi","requirements":"1.5.5","direct":false,"kind":"develop","optional":false},{"id":25773522167,"package_name":"future","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":25773522168,"package_name":"gitdb","ecosystem":"pypi","requirements":"4.0.12","direct":false,"kind":"runtime","optional":false},{"id":25773522169,"package_name":"gitpython","ecosystem":"pypi","requirements":"3.1.45","direct":false,"kind":"runtime","optional":false},{"id":25773522170,"package_name":"greenlet","ecosystem":"pypi","requirements":"3.2.4","direct":false,"kind":"runtime","optional":false},{"id":25773522171,"package_name":"gunicorn","ecosystem":"pypi","requirements":"22.0.0","direct":false,"kind":"runtime","optional":false},{"id":25773522172,"package_name":"h11","ecosystem":"pypi","requirements":"0.16.0","direct":false,"kind":"runtime","optional":false},{"id":25773522173,"package_name":"httpcore","ecosystem":"pypi","requirements":"1.0.9","direct":false,"kind":"runtime","optional":false},{"id":25773522174,"package_name":"httpx","ecosystem":"pypi","requirements":"0.28.1","direct":false,"kind":"runtime","optional":false},{"id":25773522175,"package_name":"idna","ecosystem":"pypi","requirements":"3.11","direct":false,"kind":"runtime","optional":false},{"id":25773522176,"package_name":"idna","ecosystem":"pypi","requirements":"3.11","direct":false,"kind":"develop","optional":false},{"id":25773522177,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"8.7.0","direct":false,"kind":"runtime","optional":false},{"id":25773522178,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"8.7.0","direct":false,"kind":"develop","optional":false},{"id":25773522179,"package_name":"importlib-resources","ecosystem":"pypi","requirements":"6.5.2","direct":false,"kind":"runtime","optional":false},{"id":25773522190,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"develop","optional":false},{"id":25773522191,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.3.0","direct":false,"kind":"develop","optional":false},{"id":25773522192,"package_name":"isodate","ecosystem":"pypi","requirements":"0.6.1","direct":false,"kind":"runtime","optional":false},{"id":25773522229,"package_name":"isodate","ecosystem":"pypi","requirements":"0.7.2","direct":false,"kind":"runtime","optional":false},{"id":25773522230,"package_name":"isort","ecosystem":"pypi","requirements":"6.1.0","direct":false,"kind":"develop","optional":false},{"id":25773522231,"package_name":"itsdangerous","ecosystem":"pypi","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":25773522232,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.6","direct":false,"kind":"runtime","optional":false},{"id":25773522233,"package_name":"jmespath","ecosystem":"pypi","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":25773522234,"package_name":"jsonschema","ecosystem":"pypi","requirements":"4.25.1","direct":false,"kind":"runtime","optional":false},{"id":25773522235,"package_name":"jsonschema-specifications","ecosystem":"pypi","requirements":"2025.9.1","direct":false,"kind":"runtime","optional":false},{"id":25773522236,"package_name":"jwcrypto","ecosystem":"pypi","requirements":"1.5.6","direct":false,"kind":"runtime","optional":false},{"id":25773522237,"package_name":"lockfile","ecosystem":"pypi","requirements":"0.12.2","direct":false,"kind":"runtime","optional":false},{"id":25773522242,"package_name":"lxml","ecosystem":"pypi","requirements":"6.0.2","direct":false,"kind":"runtime","optional":false},{"id":25773522243,"package_name":"mapproxy","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25773522248,"package_name":"markupsafe","ecosystem":"pypi","requirements":"3.0.3","direct":false,"kind":"runtime","optional":false},{"id":25773522249,"package_name":"marshmallow","ecosystem":"pypi","requirements":"4.0.1","direct":false,"kind":"runtime","optional":false},{"id":25773522408,"package_name":"marshmallow","ecosystem":"pypi","requirements":"4.1.0","direct":false,"kind":"runtime","optional":false},{"id":25773522409,"package_name":"marshmallow-sqlalchemy","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":25773522598,"package_name":"mccabe","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"develop","optional":false},{"id":25773522633,"package_name":"mistune","ecosystem":"pypi","requirements":"0.8.4","direct":false,"kind":"runtime","optional":false},{"id":25773522764,"package_name":"mistune","ecosystem":"pypi","requirements":"3.1.4","direct":false,"kind":"runtime","optional":false},{"id":25773522765,"package_name":"msgpack","ecosystem":"pypi","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":25773522766,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":25773522767,"package_name":"natsort","ecosystem":"pypi","requirements":"8.4.0","direct":false,"kind":"runtime","optional":false},{"id":25773522768,"package_name":"owslib","ecosystem":"pypi","requirements":"0.30.0","direct":false,"kind":"runtime","optional":false},{"id":25773522769,"package_name":"packaging","ecosystem":"pypi","requirements":"25.0","direct":false,"kind":"runtime","optional":false},{"id":25773522770,"package_name":"packaging","ecosystem":"pypi","requirements":"25.0","direct":false,"kind":"develop","optional":false},{"id":25773522771,"package_name":"pillow","ecosystem":"pypi","requirements":"10.4.0","direct":false,"kind":"runtime","optional":false},{"id":25773522772,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.4.0","direct":false,"kind":"develop","optional":false},{"id":25773522773,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.5.0","direct":false,"kind":"develop","optional":false},{"id":25773522774,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"develop","optional":false},{"id":25773522775,"package_name":"psycopg2","ecosystem":"pypi","requirements":"2.9.11","direct":false,"kind":"runtime","optional":false},{"id":25773522780,"package_name":"psycopg2-binary","ecosystem":"pypi","requirements":"2.9.11","direct":false,"kind":"runtime","optional":false},{"id":25773522781,"package_name":"pycparser","ecosystem":"pypi","requirements":"2.23","direct":false,"kind":"runtime","optional":false},{"id":25773522782,"package_name":"pycryptodome","ecosystem":"pypi","requirements":"3.23.0","direct":false,"kind":"runtime","optional":false},{"id":25773522783,"package_name":"pyjwt","ecosystem":"pypi","requirements":"2.10.1","direct":false,"kind":"runtime","optional":false},{"id":25773522784,"package_name":"pylint","ecosystem":"pypi","requirements":"3.3.9","direct":false,"kind":"develop","optional":false},{"id":25773522785,"package_name":"pyparsing","ecosystem":"pypi","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":25773522786,"package_name":"pyproj","ecosystem":"pypi","requirements":"3.6.1","direct":false,"kind":"runtime","optional":false},{"id":25773522791,"package_name":"pyproj","ecosystem":"pypi","requirements":"3.7.1","direct":false,"kind":"runtime","optional":false},{"id":25773522792,"package_name":"pyproj","ecosystem":"pypi","requirements":"3.7.2","direct":false,"kind":"runtime","optional":false},{"id":25773522793,"package_name":"pyshp","ecosystem":"pypi","requirements":"2.3.1","direct":false,"kind":"runtime","optional":false},{"id":25773522807,"package_name":"pytest","ecosystem":"pypi","requirements":"7.4.4","direct":false,"kind":"develop","optional":false},{"id":25773522808,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"4.1.0","direct":false,"kind":"develop","optional":false},{"id":25773522809,"package_name":"pytest-mock","ecosystem":"pypi","requirements":"3.15.1","direct":false,"kind":"develop","optional":false},{"id":25773522810,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":25773522811,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"develop","optional":false},{"id":25773522812,"package_name":"python-gitlab","ecosystem":"pypi","requirements":"4.13.0","direct":false,"kind":"runtime","optional":false},{"id":25773522845,"package_name":"python-keycloak","ecosystem":"pypi","requirements":"4.7.3","direct":false,"kind":"runtime","optional":false},{"id":25773522865,"package_name":"pytz","ecosystem":"pypi","requirements":"2025.2","direct":false,"kind":"runtime","optional":false},{"id":25773522866,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.3","direct":false,"kind":"runtime","optional":false},{"id":25773522867,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.3","direct":false,"kind":"develop","optional":false},{"id":25773522868,"package_name":"rdflib","ecosystem":"pypi","requirements":"6.3.2","direct":false,"kind":"runtime","optional":false},{"id":25773523051,"package_name":"rdflib","ecosystem":"pypi","requirements":"7.4.0","direct":false,"kind":"runtime","optional":false},{"id":25773523052,"package_name":"referencing","ecosystem":"pypi","requirements":"0.36.2","direct":false,"kind":"runtime","optional":false},{"id":25773523053,"package_name":"referencing","ecosystem":"pypi","requirements":"0.37.0","direct":false,"kind":"runtime","optional":false},{"id":25773523054,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.5","direct":false,"kind":"runtime","optional":false},{"id":25773523055,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.5","direct":false,"kind":"develop","optional":false},{"id":25773523056,"package_name":"requests-file","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25773523057,"package_name":"requests-mock","ecosystem":"pypi","requirements":"1.12.1","direct":false,"kind":"develop","optional":false},{"id":25773523092,"package_name":"requests-toolbelt","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":25773523119,"package_name":"responses","ecosystem":"pypi","requirements":"0.23.3","direct":false,"kind":"develop","optional":false},{"id":25773523121,"package_name":"rpds-py","ecosystem":"pypi","requirements":"0.27.1","direct":false,"kind":"runtime","optional":false},{"id":25773523122,"package_name":"rpds-py","ecosystem":"pypi","requirements":"0.29.0","direct":false,"kind":"runtime","optional":false},{"id":25773523123,"package_name":"ruamel-yaml","ecosystem":"pypi","requirements":"0.17.21","direct":false,"kind":"runtime","optional":false},{"id":25773523130,"package_name":"ruamel-yaml","ecosystem":"pypi","requirements":"0.18.16","direct":false,"kind":"runtime","optional":false},{"id":25773523131,"package_name":"ruamel-yaml-clib","ecosystem":"pypi","requirements":"0.2.15","direct":false,"kind":"runtime","optional":false},{"id":25773523148,"package_name":"s3transfer","ecosystem":"pypi","requirements":"0.15.0","direct":false,"kind":"runtime","optional":false},{"id":25773523149,"package_name":"schema-salad","ecosystem":"pypi","requirements":"8.3.20220801194920","direct":false,"kind":"runtime","optional":false},{"id":25773523157,"package_name":"schema-salad","ecosystem":"pypi","requirements":"8.9.20251102115403","direct":false,"kind":"runtime","optional":false},{"id":25773523158,"package_name":"setuptools","ecosystem":"pypi","requirements":"80.9.0","direct":false,"kind":"runtime","optional":false},{"id":25773523159,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":25773523160,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"develop","optional":false},{"id":25773523161,"package_name":"smmap","ecosystem":"pypi","requirements":"5.0.2","direct":false,"kind":"runtime","optional":false},{"id":25773523162,"package_name":"sniffio","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":25773523163,"package_name":"sqlalchemy","ecosystem":"pypi","requirements":"2.0.44","direct":false,"kind":"runtime","optional":false},{"id":25773523164,"package_name":"tomli","ecosystem":"pypi","requirements":"2.3.0","direct":false,"kind":"develop","optional":false},{"id":25773523165,"package_name":"tomlkit","ecosystem":"pypi","requirements":"0.13.3","direct":false,"kind":"develop","optional":false},{"id":25773523166,"package_name":"types-pyyaml","ecosystem":"pypi","requirements":"6.0.12.20250915","direct":false,"kind":"develop","optional":false},{"id":25773523202,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.15.0","direct":false,"kind":"runtime","optional":false},{"id":25773523203,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.15.0","direct":false,"kind":"develop","optional":false},{"id":25773523204,"package_name":"urllib3","ecosystem":"pypi","requirements":"1.26.20","direct":false,"kind":"runtime","optional":false},{"id":25773523205,"package_name":"urllib3","ecosystem":"pypi","requirements":"1.26.20","direct":false,"kind":"develop","optional":false},{"id":25773523206,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.5.0","direct":false,"kind":"runtime","optional":false},{"id":25773523207,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.5.0","direct":false,"kind":"develop","optional":false},{"id":25773523208,"package_name":"werkzeug","ecosystem":"pypi","requirements":"2.3.8","direct":false,"kind":"runtime","optional":false},{"id":25773523454,"package_name":"xmltodict","ecosystem":"pypi","requirements":"0.13.0","direct":false,"kind":"runtime","optional":false},{"id":25773523455,"package_name":"zipp","ecosystem":"pypi","requirements":"3.23.0","direct":false,"kind":"runtime","optional":false},{"id":25773523456,"package_name":"zipp","ecosystem":"pypi","requirements":"3.23.0","direct":false,"kind":"develop","optional":false}]}],"score":6.068425588244111,"created_at":"2023-09-12T07:47:42.200Z","updated_at":"2026-04-17T05:30:26.053Z","avatar_url":"https://github.com/MAAP-Project.png","language":"Python","category":"Biosphere","sub_category":"Biomass","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# NASA MAAP API\nThe joint ESA-NASA Multi-Mission Algorithm and Analysis Platform (MAAP) focuses on developing a collaborative data system enabling collocated data, processing, and analysis tools for NASA and ESA datasets. The NASA MAAP API adheres to the joint ESA-NASA MAAP API specification currently in development. This joint architectural approach enables NASA and ESA to each run independent MAAPs, while ultimately sharing common facilities to share and integrate collocated platform services.\n\nDevelopment server: https://api.dit.maap-project.org/api\n\n## I. Local development using docker\n\nSet your FERNET_KEY environment variable to be a key, doesn't necessarily need to be valid. \n\nSee instructions for generating a test key: https://cryptography.io/en/latest/fernet/\n\n```bash\ncd docker\ndocker-compose -f docker-compose-local.yml up\n```\nOnce you make code changes you might need to delete your maap-api-nasa docker image for these code changes to be reflected. If you are getting a network not found error, try running `docker-compose -f docker-compose-local.yml up --force-recreate`\nYou may need to add these keys to your docker compose environment variables to get the api running correctly/ being able to submit jobs: FERNET_KEY, GITLAB_TOKEN, CAS_PROXY_DECRYPTION_TOKEN, CAS_SECRET_KEY, CAS_SERVER_NAME, REGISTER_JOB_REPO_ID, GITLAB_API_TOKEN, GIT_REPO_URL, GITLAB_POST_PROCESS_TOKEN, MOZART_URL, MOZART_V1_URL, THIRD_PARTY_SECRET_TOKEN, MAAP_TEMP_URS_TOKEN  \nIf you make changes to the settings, rebuild with `docker-compose -f docker-compose-local.yml build --no-cache`\n\n## II. Local development using poetry and virtualenv\n\n**Prerequisites:**\n* poetry\n  * https://python-poetry.org/docs/#installation \n* postgresql\n  * Linux: `sudo apt-get install postgresql python-psycopy2 libpq-dev`\n  * Mac OSx: `brew install postgresql`\n* python3.9+\n\n```bash\ncd maap-api-nasa\npoetry install\n```\n\n### First run: Configure the database.\n\n1. Add a new user called `maapuser` (A fix for 'role \u003cusername\u003e does not exist')\n   \u003e **_NOTE:_**  You may need to use `sudo -u postgres` before postgres commands.\n   ```bash\n   createuser maapuser\n   ```\n\n2. Create an empty postgres db (maap) (a fix for 'database maap does not exist'):\n    ```bash\n    createdatabase maap\n    ```\n\n3. OPTIONAL: PyCharm configuration, if using the PyCharm IDE:\n\n- Script path: `./api/maapapp.py`\n- Environment variables: `PYTHONUNBUFFERED=1`\n- Python interpreter: `Python 3.9`\n- Working directory: `./api`\n\n#### (Obsolete?) Config Titiler endpoint and maap-api-host\n\nIn the settings.py (i.e., maap-api-nasa/api/settings.py):\n\n```python\n# settings.py\nAPI_HOST_URL = 'http://0.0.0.0:5000/' # For local testing\n\n# ...\n\n# The endpoint obtained after doing Titiler deployment\nTILER_ENDPOINT = 'https://XXX.execute-api.us-east-1.amazonaws.com'\n# If running the tiler locally, this can be TILER_ENDPOINT = 'http://localhost:8000'\n```\n\n### Run the app:\n\n```bash\npoetry shell\nFLASK_APP=api/maapapp.py flask run --host=0.0.0.0\n```\n\nSome issues you may experience while running the above line:\n\n* Allowing using postgres without login (A fix for 'fe_sendauth: no password supplied'):\n\n  ```bash\n  sudo vi /etc/postgresql/9.5/main/pg_hba.conf #(the location may be different depend on OS and postgres version)\n  ```\n  \n  ```\n  # Reconfig as follows:\n      local   all     all     trust\n      host    all     all     127.0.0.1/32    trust\n      host    all     all     ::1/0           trust\n  # Save pg_hba.conf\n  ```\n\n  ```bash\n  # Restart postgresql\n  sudo /etc/init.d/postgresql reload\n  sudo /etc/init.d/postgresql start\n  ```\n\n## Running Tests\n\n### Prerequisites\n- Local development environment set up (see CLAUDE.md)\n- Test database configured\n- Required environment variables set\n\n## Test Execution Commands\n\n### Local Development\n```bash\n# Build and run all tests\n./scripts/run-tests.sh\n\n# Run specific test categories\ndocker-compose -f docker/docker-compose-test.yml run --rm test pytest test/api/endpoints/\n\n# Run tests with coverage\ndocker-compose -f docker/docker-compose-test.yml run --rm test pytest --cov=api --cov-report=html\n\n# Run tests in watch mode\ndocker-compose -f docker/docker-compose-test.yml run --rm test pytest -f\n```\n\n### Debugging Tests\n```bash\n# Run tests with detailed output\ndocker-compose -f docker/docker-compose-test.yml run --rm test pytest -vvv -s\n\n# Run specific test\ndocker-compose -f docker/docker-compose-test.yml run --rm test pytest test/api/endpoints/test_members.py::TestMemberManagement::test_new_member_can_be_created_successfully\n\n# Run with debugger\ndocker-compose -f docker/docker-compose-test.yml run --rm test pytest --pdb\n```\n\n### Test Execution\n```bash\n# Run all tests\npython -m unittest discover test/\n\n# Run specific test modules\npython -m unittest test.api.endpoints.test_members\npython -m unittest test.api.utils.test_email\n\n# Run individual test methods\npython -m unittest test.api.endpoints.test_members.MembersCase.test_create_member\n```\n\n## III. User Accounts\n\nA valid MAAP API token must be included in the header for any API request. An [Earthdata account](https://uat.urs.earthdata.nasa.gov) is required to access the MAAP API. To obtain a token, URS credentials must be provided as shown below:\n\n```bash\ncurl -X POST --header \"Content-Type: application/json\" -d \"{ \\\"username\\\": \\\"urs_username\\\", \\\"password\\\": \\\"urs_password\\\" }\" https://api.dit.maap-project.org/token\n```\n\n### Comments:\n\n- After running the local maap-api-nasa, go to http://0.0.0.0:5000/api to see the APIs.\n\n- Or running the your own test scripts with:\n\n```bash\ncurl -X POST --header \"Content-Type: application/json\" -d \"{ \\\"username\\\": \\\"urs_username\\\", \\\"password\\\": \\\"urs_password\\\" }\" http://0.0.0.0:5000/token\n```\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["stac","open-science","earth-observation"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/36476","html_url":"https://ost.ecosyste.ms/projects/36476"}