{"id":13502579,"url":"https://github.com/dakrauth/django-swingtime","last_synced_at":"2025-08-21T11:25:09.012Z","repository":{"id":470903,"uuid":"95863","full_name":"dakrauth/django-swingtime","owner":"dakrauth","description":"📆  Event and occurrence scheduling application for Django","archived":false,"fork":false,"pushed_at":"2025-07-08T00:32:04.000Z","size":7892,"stargazers_count":326,"open_issues_count":14,"forks_count":102,"subscribers_count":18,"default_branch":"main","last_synced_at":"2025-07-08T01:07:11.880Z","etag":null,"topics":["calendar-events","django","python"],"latest_commit_sha":null,"homepage":"https://dakrauth.github.io/django-swingtime/","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/dakrauth.png","metadata":{"files":{"readme":"README.rst","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":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2008-12-23T16:49:14.000Z","updated_at":"2025-07-06T14:30:20.000Z","dependencies_parsed_at":"2024-06-19T00:27:29.793Z","dependency_job_id":"48730485-3039-4fd3-acd5-f3b17ffc2b37","html_url":"https://github.com/dakrauth/django-swingtime","commit_stats":{"total_commits":117,"total_committers":10,"mean_commits":11.7,"dds":0.1367521367521367,"last_synced_commit":"e32fba3f8eecfc291201b21776b9f130e152c1c3"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/dakrauth/django-swingtime","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dakrauth%2Fdjango-swingtime","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dakrauth%2Fdjango-swingtime/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dakrauth%2Fdjango-swingtime/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dakrauth%2Fdjango-swingtime/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dakrauth","download_url":"https://codeload.github.com/dakrauth/django-swingtime/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dakrauth%2Fdjango-swingtime/sbom","scorecard":{"id":317492,"data":{"date":"2025-08-11","repo":{"name":"github.com/dakrauth/django-swingtime","commit":"900f47decf3360b28df05bd5698d9c3ac9b7886f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/29 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test.yml:1","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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/dakrauth/django-swingtime/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/dakrauth/django-swingtime/test.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating python:3.13-alpine to python:3.13-alpine@sha256:af1fd7a973d8adc761ee6b9d362b99329b39eb096ea3c53b8838f99bd187011e","Warn: pipCommand not pinned by hash: Dockerfile:5","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:18","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:19","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned","Info:   0 out of   1 containerImage 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T00:33:55.338Z","repository_id":470903,"created_at":"2025-08-18T00:33:55.339Z","updated_at":"2025-08-18T00:33:55.339Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271469410,"owners_count":24765153,"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","status":"online","status_checked_at":"2025-08-21T02:00:08.990Z","response_time":74,"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"}},"keywords":["calendar-events","django","python"],"created_at":"2024-07-31T22:02:18.682Z","updated_at":"2025-08-21T11:25:09.006Z","avatar_url":"https://github.com/dakrauth.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"Django Swingtime\n================\n\n.. image:: https://github.com/dakrauth/django-swingtime/workflows/Test/badge.svg\n    :target: https://github.com/dakrauth/django-swingtime/actions\n\n.. image:: https://badge.fury.io/py/django-swingtime.svg\n    :target: http://badge.fury.io/py/django-swingtime\n\n:Version: 2.1.0\n:Demo: https://nerdfog.com/swingtime/\n:Download: https://pypi.org/project/django-swingtime/\n:Source: https://github.com/dakrauth/django-swingtime\n:Documentation: http://dakrauth.github.io/django-swingtime/ \n\n\nDescription\n-----------\n\nSwingtime is a `Django \u003chttp://www.djangoproject.com/\u003e`_ application similar to\na stripped-down version of iCal for Mac OS X or Google Calendar.\n\nSwingtime provides a ``models.Event`` model that acts as metadata container\nfor one or more ``models.Occurrence`` objects, which describe specific\nstart and end times. Alternatively, there abstract, base models that can be used. See\nthe provide demo app for examples.\n\nSwingtime relies heavily upon both the ``datetime`` standard library package and\nthe ``dateutil`` package, featuring direct support for the ``dateutil.rrule``\ninterface to create occurrences.\n\nA fairly simple example:\n\n.. code:: python\n\n    \u003e\u003e\u003e from datetime import *\n    \u003e\u003e\u003e from swingtime import models as swingtime\n    \u003e\u003e\u003e et = swingtime.EventType.objects.create(abbr='work', label='Work Related Events')\n    \u003e\u003e\u003e evt = swingtime.Event.objects.create(\n    ...     title='New TPS Cover Sheet',\n    ...     description='Kiss off, Lumbergh!',\n    ...     event_type=et\n    ... )\n    \u003e\u003e\u003e evt.add_occurrences(datetime(2018,3,18,16), datetime(2018,3,18,16,15), count=5)\n    \u003e\u003e\u003e for o in evt.occurrence_set.all():\n    ...     print(o)\n    ...\n    New TPS Cover Sheet: 2018-03-18T16:00:00\n    New TPS Cover Sheet: 2018-03-19T16:00:00\n    New TPS Cover Sheet: 2018-03-20T16:00:00\n    New TPS Cover Sheet: 2018-03-21T16:00:00\n    New TPS Cover Sheet: 2018-03-22T16:00:00\n\nA bit more elaborate example, using the the convenience function ``models.create_event``:\n\n.. code:: python\n\n    \u003e\u003e\u003e # pay day is the last Friday of the month at 5pm\n    \u003e\u003e\u003e evt = swingtime.create_event(\n    ...     'Pay day',\n    ...     ('pay', 'Payroll'), # alternate means to add EventType on the fly\n    ...     freq=rrule.MONTHLY,\n    ...     byweekday=rrule.FR(-1),\n    ...     until=datetime(2013,8,1),\n    ...     start_time=datetime(2013,4,1,17)\n    ... )\n    \u003e\u003e\u003e for o in evt.occurrence_set.all():\n    ...     print(o)\n    ...\n    Pay day: 2013-04-26T17:00:00\n    Pay day: 2013-05-31T17:00:00\n    Pay day: 2013-06-28T17:00:00\n    Pay day: 2013-07-26T17:00:00\n\nDemo\n----\n\nTo view a demo, `click here \u003chttps://nerdfog.com/swingtime/\u003e`_.\n\nTo run a local demo using Docker, do the following:\n\n.. code:: bash\n\n    $ docker build -t swingtime .\n    $ docker run -p 8000:80 swingtime:latest\n\nAnd browse to `localhost:8001 \u003chttp://localhost:8001\u003e`_.\n\nAlternatively:\n\n.. code:: bash\n\n    python -m venv .venv\n    ./.venv/bin/activate\n    pip install -e \".[dev]\"\n    cd demo\n    ./manage.py migrate\n    ./manage.py runserver\n\nAnd browse to `localhost:8000 \u003chttp://localhost:8000\u003e`_.\n\n\nFeatures\n--------\n\n* Support for adding complex event occurrences via ``dateutil``\n* Ready-made ``forms.MultipleOccurrenceForm`` for handling complex input\n* Daily, monthly, and annual view functions\n* Daily, monthly, and annual view classes.\n* Grid-based daily view generator, complete with alternating or sequential\n  ``EventType`` CSS-class handling\n* Slightly better than average documentation, a few test cases, and commented code\n* Built-in demo project / application\n\nRequirements\n------------\n\n* Python 3.10+\n* `Django \u003e=4.2,\u003c6.0 \u003chttps://www.djangoproject.com/download/\u003e`_\n* `python-dateutil \u003chttps://labix.org/python-dateutil\u003e`_\n* `django-vanilla-view \u003chttps://github.com/encode/django-vanilla-views\u003e`_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdakrauth%2Fdjango-swingtime","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdakrauth%2Fdjango-swingtime","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdakrauth%2Fdjango-swingtime/lists"}