Skip to content

Commit

Permalink
Merge pull request #1022 from matthewrmshin/flexible-calendar-mode
Browse files Browse the repository at this point in the history
Allow calendar mode string to be flexible
  • Loading branch information
hjoliver committed Jul 17, 2014
2 parents 3563399 + 9f59f3f commit 85129c2
Show file tree
Hide file tree
Showing 5 changed files with 466 additions and 290 deletions.
6 changes: 3 additions & 3 deletions lib/cylc/cfgspec/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
from parsec.fileparse import parse
from parsec.config import config
from isodatetime.dumpers import TimePointDumper
from isodatetime.data import TimePoint, SECONDS_IN_DAY
from isodatetime.data import Calendar, TimePoint
from isodatetime.parsers import TimePointParser, TimeIntervalParser


Expand Down Expand Up @@ -120,7 +120,7 @@ def _coerce_interval( value, keys, args, back_comp_unit_factor=1 ):
except ValueError:
raise IllegalValueError("ISO 8601 interval", keys, value)
days, seconds = interval.get_days_and_seconds()
seconds += days * SECONDS_IN_DAY
seconds += days * Calendar.default().SECONDS_IN_DAY
return seconds


Expand Down Expand Up @@ -210,7 +210,7 @@ def _coerce_interval_list( value, keys, args, back_comp_unit_factor=1 ):
'scheduling' : {
'initial cycle point' : vdr(vtype='cycletime'),
'final cycle point' : vdr(vtype='cycletime'),
'cycling mode' : vdr(vtype='string', default="gregorian", options=["360day","gregorian","integer"] ),
'cycling mode' : vdr(vtype='string', default=Calendar.MODE_GREGORIAN, options=Calendar.MODES.keys() + ["integer"] ),
'runahead factor' : vdr(vtype='integer', default=2 ),
'queues' : {
'default' : {
Expand Down
10 changes: 5 additions & 5 deletions lib/cylc/cycling/iso8601.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#C: along with this program. If not, see <http://www.gnu.org/licenses/>.

import re
import isodatetime.data
from isodatetime.data import Calendar, TimeInterval
from isodatetime.dumpers import TimePointDumper
from isodatetime.parsers import TimePointParser, TimeIntervalParser
from isodatetime.timezone import (
Expand Down Expand Up @@ -163,7 +163,7 @@ def get_inferred_child(self, string):
"hours", "minutes", "seconds"]:
if getattr(interval, attribute):
unit_amounts[attribute] = amount_per_unit
interval = isodatetime.data.TimeInterval(**unit_amounts)
interval = TimeInterval(**unit_amounts)
return ISO8601Interval(str(interval))

def standardise(self):
Expand Down Expand Up @@ -500,15 +500,15 @@ def init_from_cfg(cfg):


def init(num_expanded_year_digits=0, custom_dump_format=None, time_zone=None,
assume_utc=False, cycling_mode="gregorian"):
assume_utc=False, cycling_mode=None):
"""Initialise global variables (yuk)."""
global point_parser
global DUMP_FORMAT
global NUM_EXPANDED_YEAR_DIGITS
global ASSUMED_TIME_ZONE

if cycling_mode == "360day":
isodatetime.data.set_360_calendar()
if cycling_mode in Calendar.default().MODES:
Calendar.default().set_mode(cycling_mode)

if time_zone is None:
if assume_utc:
Expand Down
3 changes: 2 additions & 1 deletion lib/cylc/cycling/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import integer
import iso8601
from isodatetime.data import Calendar


ISO8601_CYCLING_TYPE = 'iso8601'
Expand Down Expand Up @@ -100,7 +101,7 @@ def get_sequence_cls(cycling_type=None):

def init_cyclers(cfg):
DefaultCycler.TYPE = cfg['scheduling']['cycling mode']
if DefaultCycler.TYPE in ['360day','gregorian']:
if DefaultCycler.TYPE in Calendar.MODES:
DefaultCycler.TYPE = ISO8601_CYCLING_TYPE
for cycling_type, init_func in INIT_FUNCTIONS.items():
init_func(cfg)
Loading

0 comments on commit 85129c2

Please sign in to comment.