Пример #1
0
 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)
Пример #2
0
 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
Пример #3
0
    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))
Пример #4
0
    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')
Пример #5
0
                             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)