{"id":44079373,"url":"https://github.com/pacificclimate/pycds","last_synced_at":"2026-02-08T08:34:28.902Z","repository":{"id":16829999,"uuid":"19589395","full_name":"pacificclimate/pycds","owner":"pacificclimate","description":"An ORM representation of the PCDS and CRMP database","archived":false,"fork":false,"pushed_at":"2026-01-29T21:06:39.000Z","size":3511,"stargazers_count":0,"open_issues_count":41,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-30T08:56:18.097Z","etag":null,"topics":["actions","docker","pipenv","pypi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pacificclimate.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.txt","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":"2014-05-08T21:23:00.000Z","updated_at":"2025-08-12T18:53:56.000Z","dependencies_parsed_at":"2024-01-30T01:56:16.279Z","dependency_job_id":"a3bc60ed-f92c-41a2-87f7-b9d3f9a21e4e","html_url":"https://github.com/pacificclimate/pycds","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/pacificclimate/pycds","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacificclimate%2Fpycds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacificclimate%2Fpycds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacificclimate%2Fpycds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacificclimate%2Fpycds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pacificclimate","download_url":"https://codeload.github.com/pacificclimate/pycds/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacificclimate%2Fpycds/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29225478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T06:05:31.539Z","status":"ssl_error","status_checked_at":"2026-02-08T05:58:33.853Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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"}},"keywords":["actions","docker","pipenv","pypi"],"created_at":"2026-02-08T08:34:24.224Z","updated_at":"2026-02-08T08:34:28.894Z","avatar_url":"https://github.com/pacificclimate.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Python CI](https://github.com/pacificclimate/pycds/workflows/Python%20CI/badge.svg)\n![Pypi Publishing](https://github.com/pacificclimate/pycds/workflows/Pypi%20Publishing/badge.svg)\n\n# PyCDS\n\nPyCDS is a Python package that provides an [Object Relational Mapping (ORM)](http://en.wikipedia.org/wiki/Object-relational_mapping) layer for accessing meteorological observations stored in a relational database in a standard database model, referred to variously as a CRMP database or a PCDS database.\n\nThis package uses [Alembic](https://alembic.sqlalchemy.org/) to manage database creation and migration. For details, see _Database operations with Alembic_, below.\n\nThis type of database (PCDS/CRMP schema) is currently used at PCIC to store BC's long-term weather archive, the Provincial Climate Data Set (PCDS), and the Northern Climate Database (Metnorth). For details, see [Background](docs/background.md).\n\nWith this package, one can recreate the database schema in a [PostgreSQL](http://www.postgresql.org) or [SQLite](http://www.sqlite.org) database and/or use the package as an object mapper for programmatic database access. PyCDS uses [SQLAlchemy](http://www.sqlalchemy.org) to provide the ORM layer.\n\n## Documentation\n\n- [Background](docs/background.md)\n- [Installation](docs/installation.md)\n- [Scripts](docs/scripts.md)\n- [ORM contents and usage](docs/orm.md)\n- [History tracking](docs/history-tracking.md)\n- Database operations with Alembic\n  - [Introduction](docs/database-operations/introduction.md)\n  - [Applying a migration: Upgrade](docs/database-operations/migrate-upgrade.md)\n  - [Applying a migration: Downgrade](docs/database-operations/migrate-downgrade.md)\n  - [Creating a new PyCDS database](docs/database-operations/create-new-db.md)\n- Testing\n    - [Project unit tests](docs/testing/project-unit-tests.md)\n    - [Test migrations with a test database](docs/testing/test-migrations.md)\n    - [Unit tests in client code](docs/testing/unit-tests-in-client-code.md)\n- Development\n  - Migrations\n    - [Introduction](docs/dev-notes/migrations/introduction.md)\n    - [IMPORTANT ADVICE AND GUIDELINES](docs/dev-notes/migrations/important-notes.md)\n    - [Creating a new migration](docs/dev-notes/migrations/create-new-migration.md)\n    - [Creating the initial migration](docs/dev-notes/migrations/create-initial-migration.md)\n  - [Creating and using SQLAlchemy extensions](docs/dev-notes/sqlalchemy-extensions.md)\n  - [Creating and using Alembic extensions](docs/dev-notes/alembic-extensions.md)\n\n_TOC courtesy of [Lucio Paiva](https://luciopaiva.com/markdown-toc/)._\n\n## Releasing\n\n### Note\n\nBelow we describe incrementing the package version manually. We could consider \nusing the command \n[`poetry version`](https://python-poetry.org/docs/cli/#version) \ninstead to get Poetry to do it for us.\n\n### Production release\n\n1. Modify `tool.poetry.version` in `pyproject.toml`: First remove any suffix\n   to the version number, as our convention is to reserve those for test builds\n   (e.g., `1.2.3` is a release build, `1.2.3.dev7` is a test build).\n   Then increment the release build version.\n1. Summarize release changes in `NEWS.md`\n1. Commit these changes, then tag the release\n   ```bash\n   git add pyproject.toml NEWS.md\n   git commit -m\"Bump to version X.Y.Z\"\n   git tag -a -m\"X.Y.Z\" X.Y.Z\n   git push --follow-tags\n   ```\n1. Our GitHub Action `pypi-publish.yml` will build and release the package \n   on our PyPI server.\n\n### Dev/test release\n\nThe process is very similar to a production release, but uses a different\nversion number convention, and omits any notice in NEWS.md.\n\n1. Modify `tool.poetry.version` in `pyproject.toml`: Add or increment the suffix\n   in the pattern `.devN`, where N is any number of numeric digits (e.g., `1.2.3.dev11`).\n   Our convention is to reserve those for test releases\n   (e.g., `1.2.3` is a release build, `1.2.3.dev11` is a test build).\n2. Commit changes and tag the release:\n   ```bash\n   git add pyproject.toml\n   git commit -m\"Create test version X.Y.Z.devN\"\n   git tag -a -m\"X.Y.Z.devN\" X.Y.Z.devN\n   git push --follow-tags\n   ```\n1. Our GitHub Action `pypi-publish.yml` will build and release the package\n   on our PyPI server.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpacificclimate%2Fpycds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpacificclimate%2Fpycds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpacificclimate%2Fpycds/lists"}