Exemple #1
0
class Quarter (_Period_) :
    """Model a calendary quarter.

    >>> from _TFL.json_dump import to_string as jsonified
    >>> p = Quarter (2000, 1)
    >>> print (p, p.days, p.start, p.finis)
    2000/Q1 91 2000-01-01 2000-03-31

    >>> print (jsonified ([p]))
    ["2000/Q1"]

    >>> p_days = list (p)
    >>> print (p_days [0], "..", p_days [-1], ":", len (p_days))
    2000-01-01 .. 2000-03-31 : 91

    >>> for i in range (8) :
    ...     r = p + i
    ...     print (r, r.days, r.start, r.finis)
    ...
    2000/Q1 91 2000-01-01 2000-03-31
    2000/Q2 91 2000-04-01 2000-06-30
    2000/Q3 92 2000-07-01 2000-09-30
    2000/Q4 92 2000-10-01 2000-12-31
    2001/Q1 90 2001-01-01 2001-03-31
    2001/Q2 91 2001-04-01 2001-06-30
    2001/Q3 92 2001-07-01 2001-09-30
    2001/Q4 92 2001-10-01 2001-12-31

    >>> p > r
    False
    >>> p < r
    True
    >>> p == r
    False
    >>> p == p
    True

    >>> Quarter.from_string ("2014/Q1")
    Quarter (2014, 1)

    >>> Quarter.from_string ("Q1 2015")
    Quarter (2015, 1)

    >>> Quarter.from_string ("2016-01-29")
    Quarter (2016, 1)

    >>> Quarter.from_string ("2015-01")
    Traceback (most recent call last):
      ...
    ValueError: 2015-01

    """

    format           = "%4.4d/Q%d"
    kind             = "quarter"
    number           = Alias_Property (kind)

    _delta           = CAL.Month_Delta (3)
    _pattern         = Multi_Regexp \
        ( r"(?P<year>     \d{4,4})     (?:     [-/]) Q(?P<quarter> \d{1,1})   $"
        , r"Q(?P<quarter> \d{1,1}) (?: (?: \s+|[-/]) (?P<year>     \d{4,4}))? $"
        , flags      = re.VERBOSE | re.IGNORECASE
        )

    def __init__ (self, year, quarter) :
        if not (1 <= quarter <= 4) :
            raise ValueError ("Illegal value for quarter: '%s'" % (quarter, ))
        self.year    = year
        self.quarter = quarter
    # end def __init__

    @TFL.Meta.Once_Property
    def month (self) :
        return 1 + 3 * (self.quarter - 1)
Exemple #2
0
class Year (_Period_) :
    """Model a calendary year.

    >>> from _TFL.json_dump import to_string as jsonified
    >>> p = Year (2012)
    >>> print (p, p.days, p.start, p.finis)
    2012 366 2012-01-01 2012-12-31

    >>> print (jsonified ([p]))
    ["2012"]

    >>> p_days = list (p)
    >>> print (p_days [0], "..", p_days [-1], ":", len (p_days))
    2012-01-01 .. 2012-12-31 : 366

    >>> for i in range (5) :
    ...     r = p + i
    ...     print (r, r.days, r.start, r.finis)
    ...
    2012 366 2012-01-01 2012-12-31
    2013 365 2013-01-01 2013-12-31
    2014 365 2014-01-01 2014-12-31
    2015 365 2015-01-01 2015-12-31
    2016 366 2016-01-01 2016-12-31

    >>> p > r
    False
    >>> p < r
    True
    >>> p == r
    False
    >>> p == p
    True

    """

    format           = "%4.4d"
    kind             = "year"
    number           = Alias_Property (kind)
    month            = property (lambda s : 1)

    _delta           = CAL.Month_Delta (12)
    _pattern         = Regexp \
        ( r"(?P<year> \d{4,4})"
          r"$"
        , flags      = re.VERBOSE
        )

    def __init__ (self, year, _ = None) :
        self.year = year
    # end def __init__

    @classmethod
    def from_date (cls, date) :
        return cls (date.year)
    # end def from_date

    def __repr__ (self) :
        return "%s (%s)"  % (self.__class__.__name__, self.number)
    # end def __repr__

    def __str__ (self) :
        return self.format % (self.number, )
Exemple #3
0
class Month (_Period_) :
    """Model a calendary month.

    >>> from _TFL.json_dump import to_string as jsonified
    >>> p = Month (2016, 1)
    >>> print (p, p.days, p.start, p.finis)
    2016-01 31 2016-01-01 2016-01-31

    >>> print (jsonified ([p]))
    ["2016-01"]

    >>> p_days = list (p)
    >>> print (p_days [0], "..", p_days [-1], ":", len (p_days))
    2016-01-01 .. 2016-01-31 : 31

    >>> for i in range (8) :
    ...     r = p + i
    ...     print (r, r.days, r.start, r.finis)
    ...
    2016-01 31 2016-01-01 2016-01-31
    2016-02 29 2016-02-01 2016-02-29
    2016-03 31 2016-03-01 2016-03-31
    2016-04 30 2016-04-01 2016-04-30
    2016-05 31 2016-05-01 2016-05-31
    2016-06 30 2016-06-01 2016-06-30
    2016-07 31 2016-07-01 2016-07-31
    2016-08 31 2016-08-01 2016-08-31

    >>> p > r
    False
    >>> p < r
    True
    >>> p == r
    False
    >>> p == p
    True

    >>> Month.from_string ("2014/02")
    Month (2014, 2)

    >>> Month.from_string ("2014/03/28")
    Month (2014, 3)

    >>> with TFL.I18N.test_language ("de") :
    ...     Month.from_string ("2014-mai")
    Month (2014, 5)

    >>> Month.from_string ("2014/Q1")
    Traceback (most recent call last):
      ...
    ValueError: 2014/Q1

    """

    format           = "%4.4d-%2.2d"
    kind             = "month"
    number           = Alias_Property (kind)

    _delta           = CAL.Month_Delta (1)
    _pattern         = Multi_Regexp \
        ( r"(?P<year>  \d{4,4})    (?:     [-/])  (?P<month> \d{2,2})   $"
        , r"(?P<year>  \d{4,4})    (?: \s+|[-/])  (?P<month> [a-z]+)    $"
        , r"(?P<month> [a-z]+) (?: (?: \s+|[-/.]) (?P<year>  \d{4,4}))? $"
        , flags      = re.VERBOSE | re.IGNORECASE
        )

    def __init__ (self, year, month) :
        self.year    = year
        self.month   = month