{"id":44426278,"url":"https://github.com/alliander-opensource/meteoforge","last_synced_at":"2026-02-12T10:34:02.326Z","repository":{"id":200931889,"uuid":"699254005","full_name":"alliander-opensource/meteoforge","owner":"alliander-opensource","description":"This library/package is intended to help you fetch weather data from a multitude of sources in an efficient and uniform way. Acquire data using nothing more than just a period and a location, or request very specific factors in a very specific format. You control the data you fetch.","archived":false,"fork":false,"pushed_at":"2025-11-09T14:17:07.000Z","size":2603,"stargazers_count":3,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-09T15:20:14.120Z","etag":null,"topics":["meteoforge","meteorological-data","open-source","weather","weather-api"],"latest_commit_sha":null,"homepage":"https://alliander-opensource.github.io/weather-provider-libraries/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alliander-opensource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.rst","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2023-10-02T09:02:51.000Z","updated_at":"2025-11-09T14:16:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"8671cd6b-7c18-490d-ae53-fbf4e0aae601","html_url":"https://github.com/alliander-opensource/meteoforge","commit_stats":{"total_commits":5,"total_committers":1,"mean_commits":5.0,"dds":0.0,"last_synced_commit":"c80b366a26db4d71e29939e59b94ee04e69d58d9"},"previous_names":["alliander-opensource/weather-provider-libraries","alliander-opensource/meteoforge-core","alliander-opensource/meteoforge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alliander-opensource/meteoforge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alliander-opensource%2Fmeteoforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alliander-opensource%2Fmeteoforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alliander-opensource%2Fmeteoforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alliander-opensource%2Fmeteoforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alliander-opensource","download_url":"https://codeload.github.com/alliander-opensource/meteoforge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alliander-opensource%2Fmeteoforge/sbom","scorecard":{"id":1239352,"data":{"date":"2025-10-30T13:56:56Z","repo":{"name":"github.com/alliander-opensource/meteoforge","commit":"2848eeadfacab576413d9f9ad34def9af1868f02"},"scorecard":{"version":"v5.1.1","commit":"cd152cb6742c5b8f2f3d2b5193b41d9c50905198"},"score":6.5,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/7 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#security-policy"}},{"name":"Maintained","score":9,"reason":"1 commit(s) and 10 issue activity found in the last 90 days -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":8,"reason":"dependency not pinned by hash detected -- score normalized to 8","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/alliander-opensource/meteoforge/scorecard.yml/main?enable=pin","Info:   2 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#cii-best-practices"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: Mozilla Public License 2.0: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#license"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-vvfj-2jqx-52jm"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":8,"reason":"SAST tool is not run on all commits -- score normalized to 8","details":["Warn: 10 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#fuzzing"}},{"name":"Dependency-Update-Tool","score":0,"reason":"no update tool detected","details":["Warn: no dependency update tool configurations found"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#dependency-update-tool"}},{"name":"Contributors","score":0,"reason":"project has 0 contributing companies or organizations -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#contributors"}},{"name":"Branch-Protection","score":8,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is required - but no codeowners file found in repo","Info: 'last push approval' is required to merge on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":0,"reason":"0 out of 4 merged PRs checked by a CI test -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/cd152cb6742c5b8f2f3d2b5193b41d9c50905198/docs/checks.md#ci-tests"}}]},"last_synced_at":"2025-10-30T15:42:07.452Z","repository_id":200931889,"created_at":"2025-10-30T15:42:07.462Z","updated_at":"2025-10-30T15:42:07.462Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29363184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["meteoforge","meteorological-data","open-source","weather","weather-api"],"created_at":"2026-02-12T10:34:01.423Z","updated_at":"2026-02-12T10:34:02.319Z","avatar_url":"https://github.com/alliander-opensource.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[//]: # (SPDX-FileCopyrightText: 2024-2025 Copyright Contributors to the MeteoForge project)\n\n[//]: # (SPDX-License-Identifier: MPL-2.0)\n\n# MeteoForge - Core System\n\n[![License: MPL2.0](https://img.shields.io/badge/License-MPL2.0-informational.svg)](https://github.com/alliander-opensource/weather-provider-libraries/LICENSE.md)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=alliander-opensource_meteoforge\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=alliander-opensource_meteoforge)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=alliander-opensource_meteoforge\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=alliander-opensource_meteoforge)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=alliander-opensource_meteoforge\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=alliander-opensource_meteoforge)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=alliander-opensource_meteoforge\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=alliander-opensource_meteoforge)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=alliander-opensource_meteoforge\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=alliander-opensource_meteoforge)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=alliander-opensource_meteoforge\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=alliander-opensource_meteoforge)\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/docs/images/meteoforge_logo.png\" alt=\"MeteoForge\" width=\"25%\" /\u003e\n\u003c/div\u003e\n\n## Index\n\n- [On the MeteoForge project](#on-the-meteoforge-project)\n- [A bit more information on MeteoForge: Libraries](#a-bit-more-information-on-the-core-system)\n- [How to install](#how-to-install)\n- [View License](./LICENSE.md)\n\n## On the \"MeteoForge\" project\n\nThe MeteoForge project evolved from the original Weather Provider API project. It aims to provide a unified interface\nfor accessing and processing meteorological data from various sources. It is modular and extensible, allowing users to\neasily add new sources and models.\n\nThe project consists of three main components:\n\n1. **The MeteoForge API**\n   A RESTful API built with FastAPI. It provides a unified interface for accessing data from sources built with the\n   MeteoForge Libraries. It is OpenAPI-compliant and easy to deploy via Docker or custom solutions.\n\n2. **The MeteoForge Core System**\n   Core functionality for accessing and processing meteorological data, including support for file formats, data\n   transformation, and extensibility. Includes base classes for sources and models.\n\n3. **The MeteoForge Sources**\n   A collection of source packages based on Alliander models. Sources are installable independently and provide access\n   to meteorological models usable standalone or with the API.\n\n## A bit more information on the Core System\n\n### The goal of the Core System component\n\nThe Core System provides base and interface classes as well as utilities for accessing and processing meteorological\ndata. They are designed for use with the API and source packages and not meant for standalone use.\n\nThey offer tools for easily integrating new datasets and standardizing data processing workflows.\n\n### How it works\n\n#### **Sources govern models**\n\nEach model belongs to a source. This allows similar models from different sources to coexist and be validated\nconsistently.\n\n#### **Models are generic but unique**\n\nModels use a shared interface but must implement their own data retrieval and formatting logic. They’re standardized in\nusage but uniquely implemented.\n\n#### **Equalizing the models via ECCODES**\n\nThe Core System uses [ECCODES](https://confluence.ecmwf.int/display/ECC) to decode GRIB/BUFR data and standardize\nparameters. Unit conversion is handled with [Pint](https://pint.readthedocs.io/).\n\n\u003e **An example**\n\u003e\n\u003e _A model defines a \"200 meter wind speed\" in Beaufort. The ECCODES parameter 228241 corresponds to \"200 metre wind_\n\u003e _speed\" in m/s._\n\u003e _The Core System can convert Beaufort to m/s using its registry of standard parameters and Pint-based conversions._\n\n## How to install\n\nYou can install the MeteoForge Core System via pip or poetry.\n\nWith pip:\n\n```sh\npip install meteoforge\n```\n\nWith poetry:\n\n```sh\npoetry add meteoforge\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falliander-opensource%2Fmeteoforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falliander-opensource%2Fmeteoforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falliander-opensource%2Fmeteoforge/lists"}