{"id":61444,"name":"pydap","description":"An implementation of the Opendap/DODS protocol, written from scratch in pure Python, that allows researchers to access NASA Earth science data from a variety of programs.","url":"https://github.com/pydap/pydap","last_synced_at":"2026-08-14T14:31:37.911Z","repository":{"id":8776841,"uuid":"10464231","full_name":"pydap/pydap","owner":"pydap","description":"A Python library implementing the Data Access Protocol (DAP, aka OPeNDAP).","archived":false,"fork":false,"pushed_at":"2026-08-07T16:57:26.000Z","size":55063,"stargazers_count":155,"open_issues_count":68,"forks_count":92,"subscribers_count":14,"default_branch":"main","last_synced_at":"2026-08-09T12:37:43.287Z","etag":null,"topics":["dap","data","dods","opendap","science"],"latest_commit_sha":null,"homepage":"https://pydap.github.io/pydap/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ShenJianShou/crawler_samples","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pydap.png","metadata":{"files":{"readme":"README-Server.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2013-06-03T20:42:50.000Z","updated_at":"2026-08-03T17:45:16.000Z","dependencies_parsed_at":"2024-05-02T02:10:54.281Z","dependency_job_id":"1573ce64-901a-4cc0-a904-d9632c4fa0fb","html_url":"https://github.com/pydap/pydap","commit_stats":{"total_commits":629,"total_committers":38,"mean_commits":16.55263157894737,"dds":0.6391096979332274,"last_synced_commit":"f42c02df8858f6ea4c89b4646d62bc9c5e53e36d"},"previous_names":["robertodealmeida/pydap"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/pydap/pydap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36457130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-09T02:00:06.528Z","response_time":130,"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":"pydap","name":"pydap","uuid":"19211449","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/19211449?v=4","repositories_count":8,"last_synced_at":"2024-04-16T05:40:56.292Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pydap","funding_links":[],"total_stars":132,"followers":2,"following":0,"created_at":"2022-11-05T13:05:25.617Z","updated_at":"2024-04-16T05:40:58.771Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap/repositories"},"packages":[{"id":2868940,"name":"pydap","ecosystem":"pypi","description":"A pure python implementation of the Data Access Protocol.","homepage":null,"licenses":"MIT License","normalized_licenses":["MIT"],"repository_url":"https://github.com/pydap/pydap","keywords_array":[],"namespace":null,"versions_count":55,"first_release_published_at":"2008-12-21T22:27:24.000Z","latest_release_published_at":"2026-06-26T20:57:47.000Z","latest_release_number":"3.5.10","last_synced_at":"2026-08-13T10:37:25.069Z","created_at":"2022-04-10T12:11:32.330Z","updated_at":"2026-08-13T10:37:25.069Z","registry_url":"https://pypi.org/project/pydap/","install_command":"pip install pydap --index-url https://pypi.org/simple","documentation_url":"https://pydap.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Science/Research","License :: OSI Approved :: MIT License","Operating System :: MacOS","Operating System :: Microsoft :: Windows","Operating System :: POSIX","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Topic :: Internet :: WWW/HTTP :: WSGI","Topic :: Scientific/Engineering"],"normalized_name":"pydap","project_status":null},"repo_metadata":{"id":8776841,"uuid":"10464231","full_name":"pydap/pydap","owner":"pydap","description":"A Python library implementing the Data Access Protocol (DAP, aka OPeNDAP).","archived":false,"fork":false,"pushed_at":"2024-10-18T22:28:28.000Z","size":25693,"stargazers_count":138,"open_issues_count":55,"forks_count":87,"subscribers_count":16,"default_branch":"main","last_synced_at":"2024-10-29T20:38:55.850Z","etag":null,"topics":["dap","data","dods","opendap","science"],"latest_commit_sha":null,"homepage":"https://pydap.github.io/pydap/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ShenJianShou/crawler_samples","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pydap.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2013-06-03T20:42:50.000Z","updated_at":"2024-10-18T22:28:33.000Z","dependencies_parsed_at":"2024-05-02T02:10:54.281Z","dependency_job_id":"1573ce64-901a-4cc0-a904-d9632c4fa0fb","html_url":"https://github.com/pydap/pydap","commit_stats":{"total_commits":615,"total_committers":42,"mean_commits":"14.642857142857142","dds":0.6308943089430894,"last_synced_commit":"2789ed031349885471ced169b48a93ab84c52333"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222131004,"owners_count":16936304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"pydap","name":"pydap","uuid":"19211449","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/19211449?v=4","repositories_count":8,"last_synced_at":"2024-04-16T05:40:56.292Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pydap","funding_links":[],"total_stars":132,"followers":2,"following":0,"created_at":"2022-11-05T13:05:25.617Z","updated_at":"2024-04-16T05:40:58.771Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap/repositories"},"tags":[{"name":"3.5","sha":"a466953f3942503f124c233ee5cf05865f553121","kind":"commit","published_at":"2024-08-16T20:32:53.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.5","html_url":"https://github.com/pydap/pydap/releases/tag/3.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.5/manifests"},{"name":"3.4.1","sha":"c62f298fe00852cf09b9f19495b1488e50e5f468","kind":"commit","published_at":"2023-05-19T19:16:31.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.4.1","html_url":"https://github.com/pydap/pydap/releases/tag/3.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.4.1/manifests"},{"name":"3.4.0","sha":"9dea9e01055c578451218122f28981c683d30060","kind":"tag","published_at":"2023-04-05T21:52:14.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.4.0","html_url":"https://github.com/pydap/pydap/releases/tag/3.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.4.0/manifests"},{"name":"3.3.0","sha":"bbafc7a101f96c3b49358f2a5f7bfe593f7a3e6f","kind":"commit","published_at":"2022-02-01T13:57:18.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.3.0","html_url":"https://github.com/pydap/pydap/releases/tag/3.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.3.0/manifests"},{"name":"3.2.2","sha":"3d963f976592c9e0d4642e013669522d2d91bef6","kind":"commit","published_at":"2017-05-24T22:18:20.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.2.2","html_url":"https://github.com/pydap/pydap/releases/tag/3.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.2.2/manifests"},{"name":"3.2.1","sha":"84273bf521ac625c19c2f603529cebd6523e9d61","kind":"commit","published_at":"2017-03-29T02:09:11.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.2.1","html_url":"https://github.com/pydap/pydap/releases/tag/3.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.2.1/manifests"},{"name":"3.2.0","sha":"ff61ed07f82ef89be6ed8cbb8cb59a6d27e46f1b","kind":"commit","published_at":"2016-12-01T22:32:16.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.2.0","html_url":"https://github.com/pydap/pydap/releases/tag/3.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.2.0/manifests"},{"name":"Marinexplore","sha":"45cf1a5d29ff12fb2535aab0fae31bc3116fb34a","kind":"tag","published_at":"2013-12-03T16:20:25.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/Marinexplore","html_url":"https://github.com/pydap/pydap/releases/tag/Marinexplore","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/Marinexplore","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/Marinexplore/manifests"},{"name":"3.1.1","sha":"50a3ff73ef02db17def0325f3f31e06865751356","kind":"tag","published_at":"2013-11-14T18:17:18.000Z","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/3.1.1","html_url":"https://github.com/pydap/pydap/releases/tag/3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags/3.1.1/manifests"}]},"repo_metadata_updated_at":"2024-10-29T23:17:22.793Z","dependent_packages_count":18,"downloads":720330,"downloads_period":"last-month","dependent_repos_count":57,"rankings":{"downloads":1.7459737243855764,"dependent_repos_count":1.9647487163042074,"dependent_packages_count":0.7515975112250941,"stargazers_count":null,"forks_count":null,"docker_downloads_count":2.5771291516233137,"average":1.759862275884548},"purl":"pkg:pypi/pydap","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/pydap","docker_dependents_count":6,"docker_downloads_count":970,"usage_url":"https://repos.ecosyste.ms/usage/pypi/pydap","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/pydap/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2024-10-29T19:34:56.136Z","issues_count":133,"pull_requests_count":101,"avg_time_to_close_issue":18930421.30107527,"avg_time_to_close_pull_request":11396073.722772278,"issues_closed_count":93,"pull_requests_closed_count":101,"pull_request_authors_count":22,"issue_authors_count":42,"avg_comments_per_issue":1.924812030075188,"avg_comments_per_pull_request":1.306930693069307,"merged_pull_requests_count":81,"bot_issues_count":0,"bot_pull_requests_count":6,"past_year_issues_count":72,"past_year_pull_requests_count":59,"past_year_avg_time_to_close_issue":1308168.576923077,"past_year_avg_time_to_close_pull_request":299262.406779661,"past_year_issues_closed_count":52,"past_year_pull_requests_closed_count":59,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":7,"past_year_avg_comments_per_issue":1.2361111111111112,"past_year_avg_comments_per_pull_request":1.2033898305084747,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":6,"past_year_merged_pull_requests_count":56,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/issues","maintainers":[{"login":"Mikejmnez","count":113,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Mikejmnez"},{"login":"captainkirk99","count":34,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/captainkirk99"},{"login":"jgallagher59701","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jgallagher59701"},{"login":"owenlittlejohns","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/owenlittlejohns"},{"login":"tomkralidis","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomkralidis"},{"login":"ndp-opendap","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ndp-opendap"},{"login":"jameshiebert","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jameshiebert"},{"login":"laliberte","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/laliberte"},{"login":"NiklasPhabian","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/NiklasPhabian"}],"active_maintainers":[{"login":"Mikejmnez","count":113,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Mikejmnez"},{"login":"jgallagher59701","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jgallagher59701"},{"login":"ndp-opendap","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ndp-opendap"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydap/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydap/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydap/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydap/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydap/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pydap/codemeta","maintainers":[{"uuid":"roberto","login":"roberto","name":null,"email":null,"url":null,"packages_count":70,"html_url":"https://pypi.org/user/roberto/","role":null,"created_at":"2022-12-17T12:43:08.534Z","updated_at":"2022-12-17T12:43:08.534Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/roberto/packages"},{"uuid":"Stephan.Hoyer","login":"Stephan.Hoyer","name":null,"email":null,"url":null,"packages_count":33,"html_url":"https://pypi.org/user/Stephan.Hoyer/","role":null,"created_at":"2022-12-17T12:43:08.592Z","updated_at":"2022-12-17T12:43:08.592Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/Stephan.Hoyer/packages"},{"uuid":"jamesmhiebert","login":"jamesmhiebert","name":null,"email":null,"url":null,"packages_count":17,"html_url":"https://pypi.org/user/jamesmhiebert/","role":null,"created_at":"2022-12-17T12:43:08.484Z","updated_at":"2022-12-17T12:43:08.484Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/jamesmhiebert/packages"},{"uuid":"captainkirk99","login":"captainkirk99","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://pypi.org/user/captainkirk99/","role":null,"created_at":"2022-12-17T12:43:08.572Z","updated_at":"2022-12-17T12:43:08.572Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/captainkirk99/packages"},{"uuid":"owenlittlejohns","login":"owenlittlejohns","name":null,"email":null,"url":null,"packages_count":6,"html_url":"https://pypi.org/user/owenlittlejohns/","role":null,"created_at":"2023-04-08T01:43:42.935Z","updated_at":"2023-04-08T01:43:42.935Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/owenlittlejohns/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":927931,"maintainers_count":398404,"namespaces_count":0,"keywords_count":309778,"github":"pypi","metadata":{"funded_packages_count":57398,"rate_limit":2},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-08-13T11:34:41.860Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},{"id":5290229,"name":"pydap","ecosystem":"conda","description":null,"homepage":"https://pydap.github.io/pydap/intro.html","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/pydap/pydap","keywords_array":[],"namespace":null,"versions_count":5,"first_release_published_at":"2022-10-03T15:49:30.793Z","latest_release_published_at":"2022-02-01T19:24:44.000Z","latest_release_number":"3.3.0","last_synced_at":"2026-04-01T03:22:24.433Z","created_at":"2022-10-03T15:49:30.785Z","updated_at":"2026-04-01T03:22:24.433Z","registry_url":"https://anaconda.org/conda-forge/pydap","install_command":"conda install -c conda-forge pydap","documentation_url":null,"metadata":{},"repo_metadata":{},"repo_metadata_updated_at":"2023-03-22T07:25:53.529Z","dependent_packages_count":9,"downloads":null,"downloads_period":null,"dependent_repos_count":54,"rankings":{"downloads":null,"dependent_repos_count":4.830580368281851,"dependent_packages_count":6.447427516343131,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.639003942312491},"purl":"pkg:conda/pydap?repository_url=https://conda-forge.org","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/conda/pydap","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/conda/pydap","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/conda/pydap/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/pydap/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/pydap/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/pydap/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/pydap/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/pydap/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/pydap/codemeta","maintainers":[],"registry":{"name":"conda-forge.org","url":"https://conda-forge.org","ecosystem":"conda","default":false,"packages_count":20636,"maintainers_count":0,"namespaces_count":0,"keywords_count":13549,"github":"conda-forge","metadata":{"kind":"conda-forge","key":"CondaForge","api":"https://conda.anaconda.org","funded_packages_count":2318},"icon_url":"https://github.com/conda-forge.png","created_at":"2022-10-03T15:37:08.743Z","updated_at":"2026-08-10T05:08:21.105Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/namespaces"}},{"id":14798745,"name":"python-pydap","ecosystem":"guix","description":"Data Access Protocol implementation in Python","homepage":"https://pydap.github.io/pydap/en/intro.html","licenses":"expat","normalized_licenses":["Other"],"repository_url":"https://github.com/pydap/pydap","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2026-07-21T08:54:04.085Z","latest_release_published_at":"2026-07-21T08:54:04.085Z","latest_release_number":"3.5.10","last_synced_at":"2026-07-21T08:54:04.330Z","created_at":"2026-07-21T08:54:03.932Z","updated_at":"2026-08-09T15:47:18.612Z","registry_url":"https://packages.guix.gnu.org/packages/python-pydap/3.5.10/","install_command":"guix install python-pydap","documentation_url":"https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/python-web.scm#n3498","metadata":{"location":"gnu/packages/python-web.scm:3498","variable_name":"python-pydap"},"repo_metadata":{"id":8776841,"uuid":"10464231","full_name":"pydap/pydap","owner":"pydap","description":"A Python library implementing the Data Access Protocol (DAP, aka OPeNDAP).","archived":false,"fork":false,"pushed_at":"2026-08-07T16:57:26.000Z","size":55063,"stargazers_count":155,"open_issues_count":68,"forks_count":92,"subscribers_count":14,"default_branch":"main","last_synced_at":"2026-08-09T12:37:43.287Z","etag":null,"topics":["dap","data","dods","opendap","science"],"latest_commit_sha":null,"homepage":"https://pydap.github.io/pydap/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ShenJianShou/crawler_samples","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pydap.png","metadata":{"files":{"readme":"README-Server.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2013-06-03T20:42:50.000Z","updated_at":"2026-08-03T17:45:16.000Z","dependencies_parsed_at":"2024-05-02T02:10:54.281Z","dependency_job_id":"1573ce64-901a-4cc0-a904-d9632c4fa0fb","html_url":"https://github.com/pydap/pydap","commit_stats":{"total_commits":629,"total_committers":38,"mean_commits":16.55263157894737,"dds":0.6391096979332274,"last_synced_commit":"f42c02df8858f6ea4c89b4646d62bc9c5e53e36d"},"previous_names":["robertodealmeida/pydap"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/pydap/pydap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydap","download_url":"https://codeload.github.com/pydap/pydap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36457130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-09T02:00:06.528Z","response_time":130,"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"}},"repo_metadata_updated_at":"2026-08-09T15:47:18.612Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:guix/python-pydap","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/guix/python-pydap","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/guix/python-pydap","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/guix/python-pydap/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T14:47:49.872Z","issues_count":216,"pull_requests_count":322,"avg_time_to_close_issue":11189442.150684932,"avg_time_to_close_pull_request":6513551.268965517,"issues_closed_count":146,"pull_requests_closed_count":290,"pull_request_authors_count":25,"issue_authors_count":47,"avg_comments_per_issue":1.3981481481481481,"avg_comments_per_pull_request":0.8385093167701864,"merged_pull_requests_count":256,"bot_issues_count":0,"bot_pull_requests_count":28,"past_year_issues_count":31,"past_year_pull_requests_count":68,"past_year_avg_time_to_close_issue":933095.6842105263,"past_year_avg_time_to_close_pull_request":110938.37735849057,"past_year_issues_closed_count":19,"past_year_pull_requests_closed_count":53,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.5161290322580645,"past_year_avg_comments_per_pull_request":0.23529411764705882,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":8,"past_year_merged_pull_requests_count":52,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/issues","maintainers":[{"login":"Mikejmnez","count":380,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Mikejmnez"},{"login":"captainkirk99","count":34,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/captainkirk99"},{"login":"jgallagher59701","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jgallagher59701"},{"login":"ndp-opendap","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ndp-opendap"},{"login":"owenlittlejohns","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/owenlittlejohns"},{"login":"tomkralidis","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomkralidis"},{"login":"NiklasPhabian","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/NiklasPhabian"},{"login":"jameshiebert","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jameshiebert"},{"login":"laliberte","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/laliberte"}],"active_maintainers":[{"login":"Mikejmnez","count":87,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Mikejmnez"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/python-pydap/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/python-pydap/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/python-pydap/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/python-pydap/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/python-pydap/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/python-pydap/codemeta","maintainers":[],"registry":{"name":"guix","url":"https://guix.gnu.org","ecosystem":"guix","default":true,"packages_count":32257,"maintainers_count":0,"namespaces_count":0,"keywords_count":1649,"github":"guix-mirror","metadata":{"funded_packages_count":882},"icon_url":"https://github.com/guix-mirror.png","created_at":"2026-03-02T16:23:46.981Z","updated_at":"2026-08-12T05:05:19.604Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/guix/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/guix/namespaces"}}],"commits":{"id":1373304,"full_name":"pydap/pydap","default_branch":"main","total_commits":790,"total_committers":42,"total_bot_commits":28,"total_bot_committers":2,"mean_commits":18.80952380952381,"dds":0.7126582278481013,"past_year_total_commits":111,"past_year_total_committers":6,"past_year_total_bot_commits":16,"past_year_total_bot_committers":2,"past_year_mean_commits":18.5,"past_year_dds":0.1711711711711712,"last_synced_at":"2026-08-13T14:02:42.631Z","last_synced_commit":"a241e092d47ba3da3c5b60f5e5cda120af9b98e5","created_at":"2023-09-13T15:28:06.469Z","updated_at":"2026-08-13T14:02:41.092Z","committers":[{"name":"Roberto De Almeida","email":"roberto@dealmeida.net","login":"betodealmeida","count":227},{"name":"Miguel Jimenez","email":"mjimenez@opendap.org","login":"Mikejmnez","count":195},{"name":"Frederic Laliberte","email":"laliberte.frederic@gmail.com","login":"laliberte","count":185},{"name":"James Hiebert","email":"james@hiebert.name","login":"jameshiebert","count":56},{"name":"Edward Hartnett","email":"Edward.Hartnett@noaa.gov","login":"edwardhartnett","count":24},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":17},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":11},{"name":"Tom Kralidis","email":"tomkralidis@gmail.com","login":"tomkralidis","count":11},{"name":"ocefpaf","email":"ocefpaf@gmail.com","login":"ocefpaf","count":9},{"name":"Ghislain Antony Vaillant","email":"ghisvail","login":"ghisvail","count":8},{"name":"Owen Littlejohns","email":"owen.m.littlejohns@nasa.gov","login":"owenlittlejohns","count":7},{"name":"James Gallagher","email":"jgallagher@opendap.org","login":"jgallagher59701","count":3},{"name":"Juan Luis Cano Rodríguez","email":"juanlu001@gmail.com","login":"astrojuanlu","count":3},{"name":"Ray Bell","email":"rayjohnbell0@gmail.com","login":"raybellwaves","count":2},{"name":"Michael Bunsen","email":"notbot@gmail.com","login":"mihow","count":2},{"name":"Lewis John McGibbney","email":"lewis.mcgibbney@gmail.com","login":"lewismc","count":2},{"name":"Christian Skarby","email":"christian.skarby@met.no","login":"cskarby","count":2},{"name":"Daniel Gray","email":"dan@technigami.com","login":null,"count":2},{"name":"Aaron Kaplan","email":"aaron-kaplan","login":"aaron-kaplan","count":1},{"name":"Aleksandar Jelenak","email":"ajelenak@hdfgroup.org","login":"ajelenak","count":1},{"name":"Amanda Yoshiizumi","email":"mandy.yoshiizumi@gmail.com","login":"mandyellow","count":1},{"name":"nathanlcarlson","email":"22420382+nathanlcarlson","login":"nathanlcarlson","count":1},{"name":"kikocorreoso","email":"kikocorreoso","login":"kikocorreoso","count":1},{"name":"epifanio","email":"epiesasha@me.com","login":"epifanio","count":1},{"name":"anthonybaxter","email":"anthonybaxter@gmail.com","login":"anthonybaxter","count":1},{"name":"Will Holmgren","email":"william.holmgren@gmail.com","login":"wholmgren","count":1},{"name":"Trevor James Smith","email":"10819524+Zeitsperre","login":"Zeitsperre","count":1},{"name":"Tobias Kölling","email":"tobi@die70.de","login":"d70-t","count":1},{"name":"Stephan Hoyer","email":"shoyer@gmail.com","login":"shoyer","count":1},{"name":"SiggyF","email":"f.baart@gmail.com","login":"SiggyF","count":1},{"name":"Shreyas Cholia","email":"shreyas@gmail.com","login":"shreddd","count":1},{"name":"Sebastian Krieger","email":"sebastian@nublia.com","login":"regeirk","count":1},{"name":"Scott","email":"scott.anderson@fivesigma.co.uk","login":"Scott5S","count":1},{"name":"Ryan Abernathey","email":"ryan.abernathey@gmail.com","login":"rabernat","count":1},{"name":"Romain Beucher","email":"romain.beucher@anu.edu.au","login":"rbeucher","count":1},{"name":"Rich Signell","email":"rsignell@usgs.gov","login":"rsignell-usgs","count":1},{"name":"Nathan Potter","email":"ndp@opendap.org","login":"ndp-opendap","count":1},{"name":"Mike McCann","email":"MBARIMike@gmail.com","login":"MBARIMike","count":1},{"name":"Mattia Almansi","email":"m.almansi@bopen.eu","login":"malmans2","count":1},{"name":"Jonas Gliß","email":"jonasgliss@gmail.com","login":"jgliss","count":1},{"name":"Hugo","email":"hugovk","login":"hugovk","count":1},{"name":"Danny","email":"flackattack@gmail.com","login":"flackdl","count":1}],"past_year_committers":[{"name":"Miguel Jimenez","email":"mjimenez@opendap.org","login":"Mikejmnez","count":92},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":11},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":5},{"name":"Scott","email":"scott.anderson@fivesigma.co.uk","login":"Scott5S","count":1},{"name":"Mattia Almansi","email":"m.almansi@bopen.eu","login":"malmans2","count":1},{"name":"Aaron Kaplan","email":"aaron-kaplan","login":"aaron-kaplan","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-14T00:00:06.241Z","repositories_count":6660468,"commits_count":942247605,"contributors_count":40030436,"owners_count":1338593,"committers_count":3308403,"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":"pydap/pydap","html_url":"https://github.com/pydap/pydap","last_synced_at":"2026-08-13T14:01:42.055Z","status":"error","issues_count":216,"pull_requests_count":322,"avg_time_to_close_issue":11189442.150684932,"avg_time_to_close_pull_request":6513551.268965517,"issues_closed_count":146,"pull_requests_closed_count":290,"pull_request_authors_count":25,"issue_authors_count":47,"avg_comments_per_issue":1.3981481481481481,"avg_comments_per_pull_request":0.8385093167701864,"merged_pull_requests_count":256,"bot_issues_count":0,"bot_pull_requests_count":28,"past_year_issues_count":31,"past_year_pull_requests_count":68,"past_year_avg_time_to_close_issue":933095.6842105263,"past_year_avg_time_to_close_pull_request":110938.37735849057,"past_year_issues_closed_count":19,"past_year_pull_requests_closed_count":53,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.5161290322580645,"past_year_avg_comments_per_pull_request":0.23529411764705882,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":8,"past_year_merged_pull_requests_count":52,"created_at":"2023-09-13T15:28:36.635Z","updated_at":"2026-08-13T14:01:42.055Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydap%2Fpydap/issues","issue_labels_count":{"enhancement":21,"documentation":12,"bug":10,"tests":6,"docs":4,"confirmed":2,"feature":2,"dependencies":2,"invalid":2,"build":1},"pull_request_labels_count":{"dependencies":15,"github_actions":3,"documentation":2,"enhancement":1,"docs":1},"issue_author_associations_count":{"COLLABORATOR":160,"NONE":39,"MEMBER":9,"CONTRIBUTOR":8},"pull_request_author_associations_count":{"COLLABORATOR":264,"CONTRIBUTOR":38,"NONE":17,"MEMBER":3},"issue_authors":{"Mikejmnez":138,"captainkirk99":18,"jgallagher59701":5,"ndp-opendap":3,"tomkralidis":3,"jayvdb":2,"mathause":2,"JimFluke":2,"jondoesntgit":2,"rabernat":2,"albertotb":2,"tennlee":2,"jaythespacehound":1,"raybellwaves":1,"Gilaverbuch":1,"peterazmanov":1,"svniemeijer":1,"MHee":1,"jgliss":1,"headtr1ck":1,"amotl":1,"QuLogic":1,"GregoirePelegrin":1,"jameshiebert":1,"faridfarhat":1,"wholmgren":1,"keewis":1,"thisistaimur":1,"ayushnag":1,"wallinb":1,"pauleckhardt":1,"alex-700":1,"captcha1":1,"evertrol":1,"jerabaul29":1,"a-schneider-fmi":1,"laliberte":1,"jjrob":1,"peterazmanov-wawa":1,"epifanio":1,"ghost":1,"anthonyatDLR":1,"battistowx":1,"jalbert10NJ":1,"shreddd":1,"cskarby":1,"veenstrajelmer":1},"pull_request_authors":{"Mikejmnez":242,"captainkirk99":16,"pre-commit-ci[bot]":15,"dependabot[bot]":13,"owenlittlejohns":4,"pauleckhardt":4,"jgallagher59701":3,"shreddd":3,"crossi202":2,"facutuesca":2,"Zeitsperre":2,"raphaeljolivet":2,"raybellwaves":2,"neishm":1,"tirkarthi":1,"anthonybaxter":1,"ndp-opendap":1,"Scott5S":1,"NiklasPhabian":1,"d70-t":1,"cskarby":1,"rbeucher":1,"mylesmc123":1,"jgliss":1,"huang06":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-14T00:00:05.923Z","repositories_count":16033374,"issues_count":40421015,"pull_requests_count":130821114,"authors_count":11449147,"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":3,"dependencies":1,"documentation":1,"enhancement":1,"feature":1},"past_year_pull_request_labels_count":{"dependencies":2,"documentation":2,"github_actions":2},"past_year_issue_author_associations_count":{"COLLABORATOR":30,"NONE":1},"past_year_pull_request_author_associations_count":{"COLLABORATOR":56,"CONTRIBUTOR":8,"NONE":1},"past_year_issue_authors":{"Mikejmnez":30,"alex-700":1},"past_year_pull_request_authors":{"Mikejmnez":56,"pre-commit-ci[bot]":5,"dependabot[bot]":2,"mylesmc123":1,"Scott5S":1},"maintainers":[{"login":"Mikejmnez","count":380,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Mikejmnez"},{"login":"captainkirk99","count":34,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/captainkirk99"},{"login":"jgallagher59701","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jgallagher59701"},{"login":"ndp-opendap","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ndp-opendap"},{"login":"owenlittlejohns","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/owenlittlejohns"},{"login":"tomkralidis","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomkralidis"},{"login":"NiklasPhabian","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/NiklasPhabian"},{"login":"jameshiebert","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jameshiebert"},{"login":"laliberte","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/laliberte"}],"active_maintainers":[{"login":"Mikejmnez","count":86,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Mikejmnez"}]},"events":{"total":{"ReleaseEvent":6,"DeleteEvent":98,"PullRequestEvent":173,"ForkEvent":2,"IssuesEvent":161,"WatchEvent":10,"IssueCommentEvent":164,"PushEvent":351,"PullRequestReviewCommentEvent":15,"PullRequestReviewEvent":28,"CreateEvent":99},"last_year":{"ReleaseEvent":1,"DeleteEvent":48,"PullRequestEvent":55,"ForkEvent":1,"IssuesEvent":47,"WatchEvent":5,"IssueCommentEvent":16,"PushEvent":164,"PullRequestReviewCommentEvent":9,"PullRequestReviewEvent":12,"CreateEvent":43}},"keywords":["dap","data","dods","opendap","science"],"dependencies":[{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2022-08-28T22:11:55.034Z","updated_at":"2022-08-28T22:11:55.034Z","repository_link":"https://github.com/pydap/pydap/blob/main/setup.py","dependencies":[{"id":3067188402,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":3067188403,"package_name":"Webob","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":3067188404,"package_name":"Jinja2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":3067188405,"package_name":"docopt","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":3067188406,"package_name":"six","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":3067188407,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":3067188408,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/publish_to_pypi.yml","sha":null,"kind":"manifest","created_at":"2024-03-24T06:42:42.859Z","updated_at":"2024-03-24T06:42:42.859Z","repository_link":"https://github.com/pydap/pydap/blob/main/.github/workflows/publish_to_pypi.yml","dependencies":[{"id":17007035235,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":17007035242,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":17007035247,"package_name":"pypa/gh-action-pypi-publish","ecosystem":"actions","requirements":"release/v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/run_tests_macos.yml","sha":null,"kind":"manifest","created_at":"2024-03-24T06:42:43.258Z","updated_at":"2024-03-24T06:42:43.258Z","repository_link":"https://github.com/pydap/pydap/blob/main/.github/workflows/run_tests_macos.yml","dependencies":[{"id":17007035856,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":17007035857,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/run_tests_ubuntu.yml","sha":null,"kind":"manifest","created_at":"2024-03-24T06:42:43.361Z","updated_at":"2024-03-24T06:42:43.361Z","repository_link":"https://github.com/pydap/pydap/blob/main/.github/workflows/run_tests_ubuntu.yml","dependencies":[{"id":17007035955,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":17007035956,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2024-04-13T17:04:15.958Z","updated_at":"2024-04-13T17:04:15.958Z","repository_link":"https://github.com/pydap/pydap/blob/main/pyproject.toml","dependencies":[{"id":17399086562,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17399086563,"package_name":"Webob","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17399086570,"package_name":"Jinja2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17399086571,"package_name":"docopt-ng","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17399086575,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17399086576,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pre-commit.yml","sha":null,"kind":"manifest","created_at":"2024-05-02T02:10:47.470Z","updated_at":"2024-05-02T02:10:47.470Z","repository_link":"https://github.com/pydap/pydap/blob/main/.github/workflows/pre-commit.yml","dependencies":[{"id":17842167839,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":17842167840,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":17842167841,"package_name":"pre-commit/action","ecosystem":"actions","requirements":"v3.0.1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"ci/environment.yml","sha":null,"kind":"manifest","created_at":"2024-05-02T02:10:47.617Z","updated_at":"2024-05-02T02:10:47.617Z","repository_link":"https://github.com/pydap/pydap/blob/main/ci/environment.yml","dependencies":[{"id":17842167842,"package_name":"werkzeug","ecosystem":"pypi","requirements":"\u003e=2.2.2","direct":true,"kind":"runtime","optional":false},{"id":17842167843,"package_name":"cryptography","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17842167844,"package_name":"webtest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17842168516,"package_name":"gsw","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17842169797,"package_name":"coards","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17842169798,"package_name":"testresources","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":17842169799,"package_name":"requests-mock","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"docs/environment.yml","sha":null,"kind":"manifest","created_at":"2024-05-02T02:10:52.991Z","updated_at":"2024-05-02T02:10:52.991Z","repository_link":"https://github.com/pydap/pydap/blob/main/docs/environment.yml","dependencies":[]}],"score":22.633858358370485,"created_at":"2023-09-13T13:29:10.368Z","updated_at":"2026-08-14T14:31:37.913Z","avatar_url":"https://github.com/pydap.png","language":"Python","category":"Sustainable Development","sub_category":"Data Catalogs and Interfaces","monthly_downloads":720330,"total_dependent_repos":111,"total_dependent_packages":27,"readme":"# Pydap Server Plan for DAP4 Tabular Sequences\n\nThis document areas of work for improving the pydap server so it can describe, read,\nand eventually serve DAP4 tabular sequence data.\nEach section can be worked on separately, with clear goals and expected\noutcomes.\n\n## Overall Goal\n\nImprove pydap's server-side DAP4 support for tabular data by building on the\nexisting data model, adding a pandas-backed tabular handler, completing DMR\ngeneration for sequences, and using the DAP4 client/deserializer work to learn\nand validate the binary sequence format before adding a `.dap` response.\n\nThe initial target should be modest:\n\n- Non-nested DAP4 sequences.\n- One top-level sequence per tabular dataset.\n- Scalar sequence fields.\n- Numeric and string columns.\n- No constraint expressions at first.\n- No nested structures or nested sequences at first.\n\n## Guiding Principles\n\n- Preserve the existing pydap server architecture if possible. If a major rewrite\n  is necessary, stated all the necessary changes that are needed and why.\n- Keep DAP2 behavior stable while adding DAP4-specific capabilities.\n- Prefer small, verifiable steps over a broad rewrite.\n- Use Hyrax responses as reference fixtures when possible.\n- Keep pandas as the tabular data abstraction, not as a protocol layer.\n- Conform to the (`dap4 xml schema`)[https://github.com/OPENDAP/xml/blob/master/dap4/dap4.xsd]\n  when generating `dmr`.\n- Build serializer and deserializer behavior from the DAP4 specification and\n  validate with real `.dmr` and `.dap` examples.\n\n\n## 1. Improve DMR Generation\n\n### Goal\n\nMake DMR generation more complete, deterministic, and easier to extend before\nadding any sequence support. Focus on what is there already.\n\n### Why This Matters\n\nThe DMR is the metadata foundation for DAP4. If the DMR is inconsistent or\nincomplete, both the client deserializer and server response work become harder\nto validate. Improving DMR generation first gives all later work a stable target.\n\n### Action Items\n\n- Review the current DMR response implementation, issue 634, and the dap4 specification\n  to understand the expected (`dap4 dmr declaration`)[https://opendap.github.io/dap4-specification/DAP4.html#_dmr_declarations].\n- Identify gaps between current pydap DMR output and expected DAP4 DMR output\n  according to the (`dap4 xml schema`)[https://github.com/OPENDAP/xml/blob/master/dap4/dap4.xsd]\n- Replace ad hoc dtype name generation with an explicit DAP4 type map.\n- Give preference to pydap's existing data model types in\n  (`.src/pydap/model.py`)[.src/pydap/model.py] over all the possibly missing\n  existing dap4 types in the schema.\n- Make XML output deterministic for attributes, dimensions, groups, and arrays.\n- Ensure XML escaping is handled correctly for names and attribute values.\n- Add small DMR fixtures for simple arrays and grouped datasets.\n- Compare generated pydap DMR output with known Hyrax DMR examples.\n\n### Expected Outcome\n\nPydap should generate cleaner DMR output for existing array and group datasets,\nwithout changing DAP2 behavior.\n\n### Independent Validation\n\n- Existing DMR tests still pass. If not, identify why. Give preference to the\n  conforming to DAP4 dmr schema and the dap4 specification over existing DMR\n  files on pydap's testing suite.\n- New DMR fixtures are stable.\n- Generated XML can be parsed back into a pydap dataset correctly, following\n  the expected order of declaration. For example, see (`dap4 spec`)[https://opendap.github.io/dap4-specification/DAP4.html#_groups]. This may fail at first Identify why, and,\n  if necessary, specify dmrVersion=2 in pydap's dmr parser.\n\n## 2. Add a Pandas-Based Tabular Handler\n\n### Goal\n\nCreate a generic tabular handler that uses pandas to expose tabular files as\npydap sequences.\n\n### Why This Matters\n\nThe current CSV handler already maps CSV data into a pydap `SequenceType`, but\nit is specific to CSV. A pandas-backed handler can provide a broader, more\nconsistent tabular path for CSV and, later, other formats.\n\n### Action Items\n\n- Add a new pandas sequence handler rather than replacing the existing handlers\n  immediately.\n- Start with CSV input because it is easy to inspect and already has a pydap\n  comparison point.\n- Represent the tabular dataset as one `DatasetType` containing one\n  `SequenceType`.\n- Map DataFrame columns to sequence child variables.\n- Define a clear pandas-to-DAP4 dtype mapping.\n- Decide how to handle pandas nullable values.\n- Support optional sidecar metadata for dataset, sequence, and column\n  attributes.\n- Keep row iteration independent of the DAP4 serializer so the handler remains\n  useful for other responses.\n\n### Expected Outcome\n\nA tabular file can be loaded through pandas and represented inside pydap as a\nsequence dataset.\n\n### Independent Validation\n\n- A CSV file becomes a pydap dataset with one sequence.\n- The sequence has predictable column names, dtypes, and attributes.\n- Row iteration returns values in the same order as the DMR will describe them.\n\n## 3. Support DMR Output for Sequences\n\n### Goal\n\nGenerate valid DAP4 DMR metadata for non-nested `SequenceType` objects.\n\n### Why This Matters\n\nSequence DMR support is needed before a DAP4 `.dap` response can be produced or\nread reliably. The DMR tells the deserializer how to interpret the binary data.\n\n### Action Items\n\n- Implement correct DMR generation for `SequenceType`.\n- Keep the first version focused on non-nested sequences.\n- Ensure child variables are emitted in the same order used by row serialization.\n- Add tests using synthetic sequence datasets from pydap's own test fixtures.\n- Add tests using the new pandas-backed handler.\n- Make unsupported nested sequences explicit in tests and documentation.\n\n### Expected Outcome\n\nPydap can describe tabular sequence data in a DAP4 DMR.\n\n### Independent Validation\n\n- A synthetic `SequenceType` produces stable DMR XML.\n- A pandas-backed dataset produces stable sequence DMR XML.\n- The DMR parser can read the generated sequence DMR back into the expected\n  pydap model.\n\n## 4. Work on the DAP4 Sequence Deserializer\n\n### Goal\n\nTeach the pydap client to deserialize non-nested DAP4 sequence data.\n\n### Why This Matters\n\nDeserializer work builds familiarity with the DAP4 binary sequence format before\npydap attempts to serve that format. This also allows pydap to compare sequence\ndata received from Hyrax with sequence data eventually served by pydap itself.\n\n### Action Items\n\n- Collect small Hyrax `.dmr` and `.dap` fixtures containing non-nested\n  sequences.\n- Start with numeric-only sequence fields.\n- Add string fields once numeric rows work.\n- Decode the DAP4 sequence row count.\n- Decode each row as a structure whose fields follow DMR order.\n- Represent decoded data in a way that works naturally with pydap\n  `SequenceType`.\n- Add clear errors for nested sequences or unsupported field shapes.\n\n### Expected Outcome\n\nPydap can read a simple DAP4 sequence response from Hyrax.\n\n### Independent Validation\n\n- A known Hyrax sequence fixture deserializes into the expected rows.\n- Numeric and string fields round trip into predictable Python or numpy values.\n- Unsupported nested data fails with a clear error instead of silent corruption.\n\n## 5. Add a DAP4 `.dap` Response for Sequences\n\n### Goal\n\nCreate the first pydap server response that serves a non-nested sequence using\nthe DAP4 binary response format.\n\n### Why This Matters\n\nOnce pydap can deserialize DAP4 sequences, it can use its own client to validate\nits own server output. This creates a tight feedback loop for server\ndevelopment.\n\n### Action Items\n\n- Add a `.dap` response class for DAP4 data.\n- Register the response without disturbing existing `.dods` DAP2 behavior.\n- Start with full dataset responses only.\n- Do not implement constraint expressions in the first version.\n- Emit a DMR chunk followed by binary data chunks.\n- Serialize one top-level, non-nested sequence.\n- Keep row field order identical to the DMR field order.\n- Add checksum handling only after the basic response is stable.\n\n### Expected Outcome\n\nPydap can serve a simple pandas-backed sequence as a DAP4 `.dap` response.\n\n### Independent Validation\n\n- The pydap client can open the pydap-served `.dap` response.\n- The rows match the original pandas-backed data.\n- The same logical sequence can be compared between Hyrax and pydap responses.\n\n## 6. Compare Hyrax and Pydap Sequence Behavior\n\n### Goal\n\nUse Hyrax as an external reference to validate pydap's DAP4 sequence behavior.\n\n### Why This Matters\n\nDAP4 sequence support should not only work internally. It should match the\nbehavior of established DAP4 servers closely enough that pydap clients and\nother clients can rely on it.\n\n### Action Items\n\n- Keep a small set of reference Hyrax sequence fixtures.\n- Compare DMR structure, field order, dtypes, and attributes.\n- Compare deserialized row values.\n- Compare string encoding behavior.\n- Compare chunking assumptions.\n- Document any intentional differences.\n\n### Expected Outcome\n\nPydap has a practical compatibility baseline for DAP4 sequences.\n\n### Independent Validation\n\n- Fixture-based tests explain what is being compared.\n- Differences from Hyrax are visible and documented.\n- The pydap client can deserialize both Hyrax and pydap sequence responses.\n\n## 7. Add Constraint Expression Support Later\n\n### Goal\n\nAdd projection, slicing, and filtering only after full sequence responses work.\n\n### Why This Matters\n\nConstraint expressions add complexity to parsing, pandas filtering, DMR\nsubsetting, and binary serialization. They should be layered on after the\nunconstrained path is correct.\n\n### Action Items\n\n- Start with column projection.\n- Add row slicing.\n- Add simple comparisons for filters.\n- Avoid passing raw user expressions into pandas query APIs.\n- Make filtered row counts correct before serializing binary data.\n- Add tests for empty results, one-row results, and string filters.\n\n### Expected Outcome\n\nPydap can serve constrained DAP4 sequence responses for common tabular access\npatterns.\n\n### Independent Validation\n\n- Projection changes both DMR and binary payload consistently.\n- Filters produce correct row counts and row values.\n- Invalid expressions return useful errors.\n\n## 8. Keep Initial Scope Explicit\n\n### In Scope First\n\n- CSV-backed pandas handler.\n- Non-nested sequences.\n- Scalar sequence fields.\n- Numeric and string fields.\n- DMR generation for sequences.\n- DAP4 sequence deserialization.\n- Full `.dap` sequence response without constraint expressions.\n\n### Out of Scope First\n\n- Nested sequences.\n- Nested structures inside sequences.\n- Arrays as sequence fields.\n- Server-side DAP4 constraint expressions.\n- Advanced streaming optimizations.\n- Full FastAPI migration.\n- Replacing the existing NetCDF array handler.\n\n## Suggested Work Order\n\nThese items are intentionally separable, but the smoothest path is:\n\n1. Improve general DMR generation.\n2. Add pandas-backed sequence datasets.\n3. Add DMR output for sequences.\n4. Add DAP4 sequence deserialization from Hyrax fixtures.\n5. Add the first pydap DAP4 `.dap` sequence response.\n6. Compare Hyrax and pydap behavior.\n7. Add constraint expression support.\n\n## Practical Notes\n\n- The pandas handler can be developed and tested without DAP4 serialization.\n- Sequence DMR support can be developed with synthetic datasets before the\n  pandas handler is complete.\n- The DAP4 sequence deserializer can be developed entirely from Hyrax fixtures.\n- The `.dap` sequence response should wait until the deserializer is good enough\n  to validate pydap's own server output.\n- Constraint expressions should wait until the unconstrained response is stable.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["climate","oceanography","weather","data-access","pangeo","compression","climate-model","climate-science","geospatial-data","data-catalog"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/61444","html_url":"https://ost.ecosyste.ms/projects/61444"}