# Generating Recurrences Programmatically

## `Rule` and `Recurrence`

To create recurrence objects, the two main classes you’ll need are `Rule` and `Recurrence`.

`Rule` specifies a single rule (e.g. “every third Friday of the month”), and a `Recurrence` is a collection of rules (some of which may be inclusion rules, others of which may be exclusion rules), together with date limits, and other configuration parameters.

For example:

    from datetime import datetime
    import recurrence

    myrule = recurrence.Rule(
        recurrence.DAILY
    )

    pattern = recurrence.Recurrence(
        dtstart=datetime(2014, 1, 2, 0, 0, 0),
        dtend=datetime(2014, 1, 3, 0, 0, 0),
        rrules=[myrule, ]
    )

You can then generate a set of recurrences for that recurrence pattern, like this:

    >>> list(mypattern.occurrences())
    [datetime.datetime(2014, 1, 2, 0, 0), datetime.datetime(2014, 1, 3, 0, 0)]

## Exclusion Rules

You can specify exclusion rules too, which are exactly the same as inclusion rules, but they represent rules which match dates which should not be included in the list of occurrences. Inclusion rules are provided to the `Recurrence` object using the kwarg `rrules`, and exclusion rules are provided to the `Recurrence` object using the kwargs `exrules`.

## Adding or Excluding Individual Dates

Similarly, you can specify individual dates to include or exclude using `rdates` and `exdates`, both of which should be a list of `datetime.datetime` objects.

    from datetime import datetime
    import recurrence

    pattern = recurrence.Recurrence(
        rdates=[
            datetime(2014, 1, 1, 0, 0, 0),
            datetime(2014, 1, 2, 0, 0, 0),
        ]
    )