{"id":37083306,"url":"https://github.com/tom65536/annual","last_synced_at":"2026-01-14T10:09:22.697Z","repository":{"id":240119304,"uuid":"801720219","full_name":"tom65536/annual","owner":"tom65536","description":"Python package for computing annual recurring events. Recurrence rules are described by a human-friendly mini-language.","archived":false,"fork":false,"pushed_at":"2024-08-14T03:48:50.000Z","size":83,"stargazers_count":1,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-23T12:01:03.578Z","etag":null,"topics":["calendar","date","holidays","library","observances","parser","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tom65536.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-16T19:31:41.000Z","updated_at":"2024-07-28T21:43:13.000Z","dependencies_parsed_at":"2024-05-27T21:11:29.609Z","dependency_job_id":null,"html_url":"https://github.com/tom65536/annual","commit_stats":null,"previous_names":["tom65536/annual"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tom65536/annual","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom65536%2Fannual","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom65536%2Fannual/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom65536%2Fannual/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom65536%2Fannual/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tom65536","download_url":"https://codeload.github.com/tom65536/annual/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom65536%2Fannual/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"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":["calendar","date","holidays","library","observances","parser","python"],"created_at":"2026-01-14T10:09:21.937Z","updated_at":"2026-01-14T10:09:22.689Z","avatar_url":"https://github.com/tom65536.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# annual\n[![PyPI - Version](https://img.shields.io/pypi/v/annual?logo=pypi)](https://pypi.org/project/nnual)\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/tom65536/annual/ci.yml?logo=github)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8996/badge)](https://www.bestpractices.dev/projects/8996)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336)](https://pycqa.github.io/isort/)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/075ffea9b1b8406d95b090e3a56a3313)](https://app.codacy.com/gh/tom65536/annual/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_coverage)\n![OSS Lifecycle](https://img.shields.io/osslifecycle/tom65536/annual)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/075ffea9b1b8406d95b090e3a56a3313)](https://app.codacy.com/gh/tom65536/annual/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\n## Synopsis\nThe Python package _annual_ provides date calculations\nwith human-readable expressions.\n\n\n## Prerequisites\n\nBefore you begin, ensure you have met the following requirements:\n\n* You have installed Python 3.11 or later.\n_annual_ is compatible with Python 3.11+.\n* You have a basic understanding of Python programming.\n* (Optional) For development: You have `git` installed for version control.\n\n## Installation\n\n_annual_ can be installed using pip.\nTo install _annual_, follow these steps:\n\n1. Open your terminal (Command Prompt on Windows).\n2. Run the following command:\n\n```sh\npip install annual\n```\n\n## Usage\nThe simplest way of using this package is invoking the rule parser\ndirectly. The following example shows how to compute the second\nmonday in October for the year 2024.\n\n```python\n\u003e\u003e\u003e from annual.ruleparser import rule_parser\n\u003e\u003e\u003e rule_parser(2024).parse('2nd monday of october')\ndatetime.date(2024, 10, 14)\n\n```\n\nFor a full overview of the syntax supported by the rule parser\nconsult the [Syntax Guide](https://annual.readthedocs.io/latest/syntax.html).\n\n\n## Additional Documentation\n\nFor more detailed information about DateCalc, please refer to our comprehensive documentation:\n\n- **User Guide**: For in-depth explanations of _annual_'s features and how to use them effectively, visit our [User Guide](https://annual.readthedocs.io/latest/user_guide.html).\n\n- **API Reference**: For detailed information about _annual_'s classes, methods, and functions, check out our [API Reference](https://annual.readthedocs.io/latest/autoapi/).\n\n- **Tutorials**: To get started quickly with practical examples, see our [Tutorials](https://annual.readthedocs.io/latest/tutorials.html).\n\n- **FAQ**: For answers to commonly asked questions, visit our [FAQ page](https://annual.readthedocs.io/latest/faq.html).\n\n- **Contributing**: If you're interested in contributing to _annual_,\nplease read our [Contribution Guidelines](CONTRIBUTING.md).\n\nOur documentation is hosted on Read the Docs and is kept up-to-date\nwith each release. You can find the full documentation at:\n\n[https://annual.readthedocs.io](https://annuam.readthedocs.io)\n\nIf you can't find the information you're looking for, please [open an issue](https://github.com/tom6t536/annual/issues) on our GitHub repository. We're always looking to improve our documentation and appreciate your feedback!\n\n## License\nThis package is released under the terms of the MIT License.\n\n## Related Libraries\n- [`dateutil`](https://pypi.org/project/python-dateutil/): extensions to the standard Python datetime module\n- [`Delorean`](https://pypi.org/project/Delorean/): library for manipulating datetimes with ease and clarity\n- [`dateparser`](https://pypi.org/project/dateparser/): date parsing library designed to parse dates from HTML pages\n- [`workalendar`](https://pypi.org/project/workalendar/): worldwide holidays and working days helper and toolkit\n- [`convertdate`](https://pypi.org/project/convertdate/): converts between Gregorian dates and other calendar systems\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftom65536%2Fannual","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftom65536%2Fannual","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftom65536%2Fannual/lists"}