def notify_addto_real(self, entryname): # print "Extending calendar entry",entryname e = self.search[entryname] # print "Entry::",`e` dtstart = dateutil.parser.parse(e["scrap.dtstart"]["value"]) duration = dateutil.parser.parse(e["scrap.dtend"]["value"]) - dtstart rrule = dateutil.rrule.rrulestr(e["scrap.rrule"]["value"], dtstart=dtstart) for ndtstart in rrule.between(self.dtstart, self.dtend, inc=True): rsrch = infotrope.acap.search( 'SEARCH "%s" RETURN ("scrap.dtstart") AND EQUAL "scrap.uid" "i;octet" "%s" EQUAL "scrap.dtstart" "i;ascii-casemap" "%s"' % (self.uri.path, e["scrap.uid"]["value"], ndtstart.strftime(_strftime_iso)), connection=wx.GetApp().connection(self.uri), ) rsrch.send() # print "Adding recurrence at",`ndtstart` nep = self.uri.path + entryname + ndtstart.strftime(_strftime_iso) ne = { "scrap.type": "event", "scrap.uid": e["scrap.uid"]["value"], "scrap.summary": e["scrap.summary"]["value"], "scrap.dtstart": ndtstart.strftime(_strftime_iso), "scrap.dtend": (ndtstart + duration).strftime(_strftime_iso), } rsrch.wait() if len(rsrch) == 0: # print "No recurrence present, adding." wx.GetApp().connection(self.uri).store(nep, ne, True)
def _recurrence_set(cls, event_raw): recurrences = set() start_time = cls._parse_datetime(event_raw['start_time']) kwiqet_data = event_raw['__kwiqet'] horizon_stop = kwiqet_data['horizon_stop'] rdates, rrules, exdates, exrules = cls._get_recurrence(event_raw) rdates_clipped = (rdate for rdate in rdates if rdate >= start_time and rdate <= horizon_stop) recurrences.update(rdates_clipped) for rrule in rrules: recurrences.update(rrule.between(start_time, horizon_stop, inc=True)) recurrences.difference_update(exdates) for exrule in exrules: recurrences.difference_update(exrule.between(start_time, horizon_stop, inc=True)) return recurrences
def register(self, description, data = None): """ Registers an event with the schedule, with a description such as "every feb 2 at noon". :param description: English language description of event, which must include a natural language description of when it occurs. :param data: arbitrary user data to associate with an event instance :return: None """ parsed_rrule = self.recurrent_parser.parse(description) assert parsed_rrule is not None, "Could not detect event times from description." if isinstance(parsed_rrule, datetime.datetime): # only a single instance of the event, given as a datetime self.events.append((parsed_rrule, data)) else: # RRULE string, find each instance of the event in the current time frame assert isinstance(parsed_rrule, str) rrule = dateutil.rrule.rrulestr(parsed_rrule) # determine the first occurrence of the event, since `rrule.between` below doesn't work if the start time is after the first occurrence start = self.start if self.recurrent_parser.dtstart is not None: start = self.recurrent_parser.dtstart for occurrence in rrule.between(start, self.end, inc=True): if occurrence >= self.start: # filter out the ones that are before the start time self.events.append((occurrence, data))
filename = '/Users/baart_f/models/sfo/sfo-3di/subgrid_map_15min.nc' ds = netCDF4.Dataset(filename) times = netCDF4.num2date(ds.variables['time'][:], ds.variables['time'].units) system = python_subgrid.particles.ParticleSystem(ds) dfs = [] selection = times[250:340] # 1) initialization with number of iterations prbar = pyprind.ProgBar(selection.shape[0], width=100, track_time=True) rrule = dateutil.rrule.rrule(dateutil.rrule.HOURLY, dtstart=datetime.datetime(1962, 6, 11, 19, 0)) swimmers = rrule.between(datetime.datetime(1962, 6, 11, 19, 0), datetime.datetime(1962, 6, 12, 4, 0), inc=True) for i, t in enumerate(selection): prbar.update() if t in swimmers: seed_alcatraz(system, behaviour=behaviour) else: seed_domain(system) system.update_grid(i=i) system.tracer.update() df = system.get_particles() dfs.append(df) df = pandas.concat(dfs) df.drop_duplicates(cols=['particle', 't'], inplace=True) df.sort(columns=['particle', 't'], inplace=True) df.to_hdf('parts5.h5', 'particles')
ds.variables['time'].units) system = python_subgrid.particles.ParticleSystem(ds) dfs = [] selection = times[250:340] # 1) initialization with number of iterations prbar = pyprind.ProgBar(selection.shape[0], width=100, track_time=True) rrule = dateutil.rrule.rrule( dateutil.rrule.HOURLY, dtstart=datetime.datetime(1962, 6, 11, 19, 0) ) swimmers = rrule.between( datetime.datetime(1962, 6, 11, 19, 0), datetime.datetime(1962, 6, 12, 4, 0), inc=True ) for i, t in enumerate(selection): prbar.update() if t in swimmers: seed_alcatraz(system, behaviour=behaviour) else: seed_domain(system) system.update_grid(i=i) system.tracer.update() df = system.get_particles() dfs.append(df) df = pandas.concat(dfs) df.drop_duplicates(cols=['particle', 't'], inplace=True) df.sort(columns=['particle', 't'], inplace=True)