agenteAND / django-rrules

App for work with rfc2445 recurrence date in Django

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

django-rrules version alpha

django-rrules version alpha

This a App based in [dateutil.rrule](https://github.com/dateutil/dateutil/) module to work with recurrence dates This App aims to be more flexible than[ django-reccurence](https://github.com/django-recurrence/django-recurrence)

install

pip install git+https://github.com/agenteAND/django-rrules.git#egg=djangorrules

Detailed documentation is in the "docs" directory.

Quick start

  1. Add "djangorrules" and requirements to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
        # requirements
        'multiselectfield',
        # ------------------
        'djangorrules',
    ]
    
  2. Run python manage.py migrate to create the djangorrules models.

  3. Start the development server and visit http://127.0.0.1:8000/admin/ to create a Recurrence (you'll need the Admin app enabled).

requirements

  • Python 3.6+
  • django 2.2+
  • django-multiselectfield / pip install django-multiselectfield
  • python-dateutil / pip install python-dateutil
  • django-select2 (optional if you want to use form) / pip install django-select2

Quick Example

from django.db import models
from djangorrules.models import Recurrence

class Event(models.Model):
    e_name = models.CharField(max_length=100)
    e_something = models.CharField(max_length=30)
    recurrence = models.ForeignKey(Recurrence, related_name='recurrences', related_query_name='recurrence')
>>> from djangorrules.models import Rule, Recurrence, RDate
>>> from datetime import datetime
>>> dt = datetime(1993, 7, 25)
>>> daily = Rule(recurrence=re, dtstart=dt, freq=Rule.DAILY, freq_type=Rule.COUNT, interval=1,  count=20)
>>> daily
>>> <Rule: daily, for 20 occurrences>
>>> str(daily)
>>> daily, for 20 occurrences'
>>> daily.to_dateutil_rule
>>> <dateutil.rrule.rrule at 0x7f0710aca898>77
>>>
>>> for date in daily.to_dateutil_rule:
    ...:print(date)
    ...:
1993-07-25 05:03:07-04:00
1993-07-26 05:03:07-04:00
1993-07-27 05:03:07-04:00
1993-07-28 05:03:07-04:00
1993-07-29 05:03:07-04:00
1993-07-30 05:03:07-04:00
1993-07-31 05:03:07-04:00
1993-08-01 05:03:07-04:00
1993-08-02 05:03:07-04:00
1993-08-03 05:03:07-04:00
1993-08-04 05:03:07-04:00
1993-08-05 05:03:07-04:00
1993-08-06 05:03:07-04:00
1993-08-07 05:03:07-04:00
1993-08-08 05:03:07-04:00
1993-08-09 05:03:07-04:00
1993-08-10 05:03:07-04:00
1993-08-11 05:03:07-04:00
1993-08-12 05:03:07-04:00
1993-08-13 05:03:07-04:00

>>> my_birthday = Rule(recurrence=re, dtstart=dt, freq=Rule.YEARLY, bymonth=['7'], bymonthday=['25'], freq_type=Rule.COUNT, interval=1,  count=27)
In [25]: str(my_birthday)
Out[25]: 'annually, in Jul, on the 25th, for 27 occurrences'

>>> for date in my_birthday.to_dateutil_rule:
    ...:print(date)
    ...:
1993-07-25 05:03:07-04:00
1994-07-25 05:03:07-04:00
1995-07-25 05:03:07-04:00
1996-07-25 05:03:07-04:00
1997-07-25 05:03:07-04:00
1998-07-25 05:03:07-04:00
1999-07-25 05:03:07-04:00
2000-07-25 05:03:07-04:00
2001-07-25 05:03:07-04:00
2002-07-25 05:03:07-04:00
2003-07-25 05:03:07-04:00
2004-07-25 05:03:07-04:00
2005-07-25 05:03:07-04:00
2006-07-25 05:03:07-04:00
2007-07-25 05:03:07-04:00
2008-07-25 05:03:07-04:00
2009-07-25 05:03:07-04:00
2010-07-25 05:03:07-04:00
2011-07-25 05:03:07-04:00
2012-07-25 05:03:07-04:00
2013-07-25 05:03:07-04:00
2014-07-25 05:03:07-04:00
2015-07-25 05:03:07-04:00
2016-07-25 05:03:07-04:00
2017-07-25 05:03:07-04:00
2018-07-25 05:03:07-04:00
2019-07-25 05:03:07-04:00

>>> rules = Rule(recurrence=re, dtstart=dt, freq=Rule.YEARLY, bymonth=['7'], byweekday=['MO', 'WE'], freq_type=Rule.COUNT, interval=1, count=30, bysetpos=['-1', '2'])
>>> rules.rule_to_text()
>>> 'annually, in July, on the Monday or Wednesday, only the last or second instance, for 30 occurrences'
..
and more ....

coming soon I will add unittest and implement the pip install and more documentation.

PS: this app works, but use it at your own risk i'm not an expert contributions are welcome at this stage of development.

About

App for work with rfc2445 recurrence date in Django

License:Apache License 2.0


Languages

Language:Python 91.2%Language:JavaScript 5.4%Language:HTML 3.2%Language:CSS 0.2%