def _append_segment(self, d, segment_start, inferred = False):

        try:
            index = self.segment_starts.index(t(d.hour, d.minute, d.second))
        except ValueError:
            index = self.segment_starts.index(segment_start) - 1

        try:
            current_segment = self.segment_starts[index]
        except IndexError:
            current_segment = self.segment_starts[len(self.segment_starts) - 1]

        segment = {                
                    'type': 'basal-rate-segment',
                    'delivered': self.schedule[current_segment],
                    'value': self.schedule[current_segment],
                    'deliveryType': 'scheduled',
                    'inferred': inferred,
                    'start': dt(d.year, d.month, d.day, d.hour, d.minute, d.second),
                    'end': dt(d.year, d.month, d.day, segment_start.hour, segment_start.minute, segment_start.second)
                }

        if segment_start == t(0,0,0):
            segment['end'] = segment['end'] + td(days=1)

        # print('Basal segment start', segment['start'].isoformat())
        # print('Basal segment end', segment['end'].isoformat())
        # print('Basal segment rate', segment['delivered'])
        # print()

        self.segments.append(segment);
Beispiel #2
0
    def _get_middle_segments(self):

        midnight = t(0,0,0)

        index = self.segment_starts.index(self.end_initial)

        segment_start = self.end_initial

        d = self.endpoints[0]

        end = self.endpoints[1]

        start_datetime = dt(d.year, d.month, d.day, segment_start.hour, segment_start.minute, segment_start.second)

        if segment_start == midnight:
            start_datetime = start_datetime + td(days=1)

        current_datetime = start_datetime

        while current_datetime < end:
            try:
                next_segment_start = self.segment_starts[index + 1]
                index += 1
            except IndexError:
                next_segment_start = midnight
                index = 0
            self._append_segment(current_datetime, next_segment_start)
            start_datetime = current_datetime
            difference = self._get_difference(next_segment_start, t(current_datetime.hour, current_datetime.minute, current_datetime.second))
            current_datetime = current_datetime + difference

        return start_datetime
 def test_empty(self):
     start = t(1999, 1, 1)
     end = t(1999, 1, 31, 23, 59, 59, 999999)
     try:
         stat_dao.fill_leaveempty_calls(self.session, start, end)
     except Exception:
         self.fail('fill_simple_calls failed with no data')
Beispiel #4
0
def test_ymdt_named():
    DT = dt.Frame(Y=[2021, 1965, 2003, 1901, 1999],
                  M=[10, 7, 4, 11, 8],
                  D=[19, 18, 29, 10, 21],
                  h=[7, 21, 22, 23, 19],
                  m=[37, 29, 0, 44, 0],
                  s=[19, 23, 0, 46, 27],
                  ns=[0, 0, 0, 123456000, 1000])
    RES = DT[:,
             ymdt(year=f.Y,
                  month=f.M,
                  day=f.D,
                  hour=f.h,
                  minute=f.m,
                  second=f.s,
                  nanosecond=f.ns)]
    assert_equals(
        RES,
        dt.Frame([
            t(2021, 10, 19, 7, 37, 19),
            t(1965, 7, 18, 21, 29, 23),
            t(2003, 4, 29, 22, 0, 0),
            t(1901, 11, 10, 23, 44, 46, 123456),
            t(1999, 8, 21, 19, 0, 27, 1)
        ]))
Beispiel #5
0
    def _append_segment(self, d, segment_start):

        try:
            index = self.segment_starts.index(t(d.hour, d.minute, d.second))
        except ValueError:
            index = self.segment_starts.index(segment_start) - 1

        try:
            current_segment = self.segment_starts[index]
        except IndexError:
            current_segment = self.segment_starts[len(self.segment_starts) - 1]

        start = dt(d.year, d.month, d.day, d.hour, d.minute, d.second)
        end = dt(d.year, d.month, d.day, segment_start.hour, segment_start.minute, segment_start.second)

        segment = {                
                    'type': 'basal-rate-segment',
                    'delivered': self.schedule[current_segment],
                    'value': self.schedule[current_segment],
                    'deliveryType': 'scheduled',
                    'start': start,
                    'end': end,
                    'duration': end - start
                }

        if segment_start == t(0,0,0):
            segment['end'] = segment['end'] + td(days=1)

        self.segments.append(segment);
    def _get_middle_segments(self):

        midnight = t(0,0,0)

        index = self.segment_starts.index(self.end_initial)

        segment_start = self.end_initial

        d = self.endpoints[0]['deviceTime']

        end = self.endpoints[1]['deviceTime']

        start_datetime = dt(d.year, d.month, d.day, segment_start.hour, segment_start.minute, segment_start.second)

        if segment_start == midnight:
            start_datetime = start_datetime + td(days=1)

        current_datetime = start_datetime

        while current_datetime < end:
            try:
                next_segment_start = self.segment_starts[index + 1]
                index += 1            
            except IndexError:
                next_segment_start = midnight
                index = 0
            self._append_segment(current_datetime, next_segment_start)
            start_datetime = current_datetime
            difference = self._get_difference(next_segment_start, t(current_datetime.hour, current_datetime.minute, current_datetime.second))
            current_datetime = current_datetime + difference

        return start_datetime
Beispiel #7
0
 def setUp(self):
     DAOTestCase.setUp(self)
     self.start = t(2012, 07, 01)
     self.end = t(2012, 07, 31, 23, 59, 59, 999999)
     self.qname1, self.qid1 = self._insert_queue('q1')
     self.qname2, self.qid2 = self._insert_queue('q2')
     self.aname1, self.aid1 = self._insert_agent('a1')
     self.aname2, self.aid2 = self._insert_agent('a2')
    def test_with_specific_range(self):
        start = t(2020, 1, 1)
        end = t(2020, 1, 31, 23, 59, 59, 999999)

        stat_dao.fill_simple_calls(self.session, start, end)

        result = self.session.query(StatCallOnQueue).all()
        assert_that(result, contains(has_properties(status='full')))
 def setUp(self):
     DAOTestCase.setUp(self)
     self.start = t(2012, 7, 1, tzinfo=pytz.UTC)
     self.end = t(2012, 7, 31, 23, 59, 59, 999999, tzinfo=pytz.UTC)
     self.qname1, self.qid1 = self._insert_queue('q1')
     self.qname2, self.qid2 = self._insert_queue('q2')
     self.aname1, self.aid1 = self._insert_agent('a1')
     self.aname2, self.aid2 = self._insert_agent('a2')
Beispiel #10
0
    def test_with_specific_range(self):
        start = t(2019, 1, 1)
        end = t(2020, 1, 31, 23, 59, 59, 999999)

        stat_dao.fill_leaveempty_calls(self.session, start, end)

        result = self.session.query(StatCallOnQueue).all()
        assert_that(result, contains(has_properties(callid=self.callid_found)))
Beispiel #11
0
    def test_with_specific_timezone(self):
        # Asia/Shanghai is +08
        start = t(2020, 1, 1, 1, 0, 0, 0, tzinfo=pytz.timezone('Asia/Shanghai'))
        end = t(2020, 1, 31, 23, 59, 59, 999999)

        stat_dao.fill_leaveempty_calls(self.session, start, end)

        result = self.session.query(StatCallOnQueue).all()
        assert_that(result, contains(has_properties(callid=self.callid_found)))
Beispiel #12
0
    def graph_from_timezones_normalized_filtered(self,
                                                 min_occurences: int) -> Graph:
        raw = {}
        for _, stacks in self._data.items():
            for _, question in stacks.items():
                questionTime = datetime.datetime.fromtimestamp(
                    question['creation_date'])
                for tag in question['tags']:
                    if tag not in raw:
                        raw[tag] = {'USSA': 0, 'EUAF': 0, 'ASAU': 0}
                    if questionTime.time() <= t(hour=8, minute=0, second=0):
                        raw[tag]['USSA'] += 1
                    elif questionTime.time() > t(
                            hour=8, minute=0,
                            second=0) and questionTime.time() <= t(
                                hour=16, minute=0, second=0):
                        raw[tag]['EUAF'] += 1
                    else:
                        raw[tag]['ASAU'] += 1

        prcnt = {
            tag: {
                tz: val * 100 // sum(tzs.values())
                for tz, val in tzs.items() if val > 0
            }
            for tag, tzs in raw.items() if sum(tzs.values()) > min_occurences
        }
        graph = Graph()
        for tag, timezones in prcnt.items():
            for timezone, weight in timezones.items():
                graph.add_edge(tag, timezone, weight=weight)

        print('top 5 each')
        top_ussa = []
        top_euaf = []
        top_asau = []
        for tg, tzs in prcnt.items():
            top_ussa.append((tg, tzs['USSA'], tzs))
            top_euaf.append((tg, tzs['EUAF'], tzs))
            top_asau.append((tg, tzs['ASAU'], tzs))
        top_ussa.sort(key=lambda x: x[1], reverse=True)
        top_euaf.sort(key=lambda x: x[1], reverse=True)
        top_asau.sort(key=lambda x: x[1], reverse=True)

        print('top ussa')
        for i in top_ussa[:5]:
            print(i)

        print('top euaf')
        for i in top_euaf[:5]:
            print(i)

        print('top asau')
        for i in top_asau[:5]:
            print(i)

        return graph
Beispiel #13
0
 def setUp(self):
     DAOTestCase.setUp(self)
     if not self._fn_created:
         self._create_functions()
     self.start = t(2012, 07, 01)
     self.end = t(2012, 07, 31, 23, 59, 59, 999999)
     self.qname1, self.qid1 = self._insert_queue('q1')
     self.qname2, self.qid2 = self._insert_queue('q2')
     self.aname1, self.aid1 = self._insert_agent('a1')
     self.aname2, self.aid2 = self._insert_agent('a2')
Beispiel #14
0
    def test_that_incomplete_calls_are_not_added(self):
        self.add_me_all([self.enterqueue_event, self.connect_event])

        stat_dao.fill_answered_calls(self.session, t(2014, 7, 3, 10, 0, 0), t(2014, 7, 3, 10, 59, 59, 999999))

        count = self.session.query(
            func.count(StatCallOnQueue.callid)
        ).filter(StatCallOnQueue.callid == self.callid).scalar()

        assert_that(count, equal_to(0))
Beispiel #15
0
def test_day_of_week_with_time64():
    DT = dt.Frame([
        t(2001, 3, 15, 0, 0, 0),
        t(2017, 11, 1, 23, 59, 59, 999999), None,
        t(1970, 1, 1, 0, 0, 0, 1),
        t(1969, 12, 31, 23, 59, 59, 999999),
        t(1900, 12, 13, 0, 0, 0)
    ])
    RES = DT[:, day_of_week(f[:])]
    assert_equals(RES, dt.Frame([4, 3, None, 4, 3, 4]))
Beispiel #16
0
    def test_that_incomplete_calls_are_not_added(self):
        self.add_me_all([self.enterqueue_event, self.connect_event])

        stat_dao.fill_answered_calls(self.session, t(2014, 7, 3, 10, 0, 0), t(2014, 7, 3, 10, 59, 59, 999999))

        count = self.session.query(
            func.count(StatCallOnQueue.callid)
        ).filter(StatCallOnQueue.callid == self.callid).scalar()

        assert_that(count, equal_to(0))
Beispiel #17
0
def test_ymdt_nones():
    DT = dt.Frame(A=[1, 2, 3, None, None, 4],
                  B=[1, 2, None, 3, None, 4],
                  C=[1, None, 2, 3, None, 4])
    RES = DT[:, ymdt(2001, f.B, f.C, f.A, f.B, f.C)]
    assert_equals(
        RES,
        dt.Frame([
            t(2001, 1, 1, 1, 1, 1), None, None, None, None,
            t(2001, 4, 4, 4, 4, 4)
        ]))
Beispiel #18
0
 def __init__(self, **vars):    
     for k, v in vars.iteritems():  
         if k == "access_time" :
             self.access_date = datetime(v.year, v.month, v.day, 0, 0, 0, 0)
             self.access_time = t(v.hour, v.minute, v.second, v.microsecond)
         elif k == "modified_time" :
             self.modified_date = datetime(v.year, v.month, v.day, 0, 0, 0, 0)
             self.modified_time = t(v.hour, v.minute, v.second, v.microsecond)
         else:
             setattr(self, k, v)
         
     self.parsedurl = URL(self.url)
Beispiel #19
0
    def _get_initial_segment(self):

        d = self.endpoints[0]

        beginning = t(d.hour, d.minute, d.second)

        for i, start in enumerate(self.segment_starts):
            if beginning < start:
                self._append_segment(d, start)
                return start
        else:
            self._append_segment(d, t(0, 0, 0))
            return t(0, 0, 0)
    def _get_initial_segment(self):

        d = self.endpoints[0]['deviceTime']

        beginning = t(d.hour, d.minute, d.second)

        for i, start in enumerate(self.segment_starts):
            if beginning < start:
                self._append_segment(d, start, True)
                return start
        else:
            self._append_segment(d, t(0,0,0), True)
            return t(0,0,0)
Beispiel #21
0
def update():
    print("Lets get some stocks!")
    try:
        while is_time_between(t(9, 30), t(16, 0)) is True:
            for i in range(1):
                update_stocks_dict(stocks)
                print("\nSleeping zzz...")
                time.sleep(20)
                # time.sleep is in seconds. 300 = 5min, 600 = 10 min.
                #If the trading day ends while it is asleep, it must finish the sleep period
                #prior to terminating the script.
        print("The trading day has ended.")
    except KeyboardInterrupt:
        print('\nProcess stopped by user.')
def verify(module):
    verify_no_prohibited_calls(module.__file__)

    assert hasattr(module,
                   wanted_name), f"no `{wanted_name}` defined in {module}"

    r = getattr(module, wanted_name)

    assert isinstance(r, Callable), f"`{wanted_name}` is not callable"

    from datetime import date as d, timedelta as t

    today = d.today()
    tomorrow = today + t(days=1)
    next_week = today + t(days=7)

    assert tomorrow in r(today, next_week)

    assert tuple(r(today, next_week)) == (
        today,
        today + t(days=1),
        today + t(days=2),
        today + t(days=3),
        today + t(days=4),
        today + t(days=5),
        today + t(days=6),
    )
Beispiel #23
0
    def __init__(self, schedule, boluses, carbs):

        self.boluses = boluses

        self.carbs = carbs

        self.endpoints = self._get_endpoints()

        if schedule:
            self.schedule = schedule
        else:
            self.schedule = {
                t(0,0,0): 0.8,
                t(2,0,0): 0.65,
                t(4,0,0): 0.75,
                t(5,0,0): 0.85,
                t(6,0,0): 1.00,
                t(9,0,0): 0.8,
                t(15,0,0): 0.9,
                t(20,0,0): 0.8
            }

        self.segment_starts = sorted([time for time in self.schedule.keys()])

        self.segments = []

        self.end_initial = self._get_initial_segment()

        self.end_middle = self._get_middle_segments()

        self._get_final_segment()

        def fix_duration(segment):
            dur = int(segment['duration'].total_seconds()*1000)
            if dur < 0:
                segment['duration'] = td(milliseconds=(86400000 + dur))
            else:
                segment['duration'] = td(milliseconds=dur)
            return segment

        self.segments = [fix_duration(s) for s in self.segments]

        self._make_temp_segments()

        def serialize(segment):
            segment['normalEnd'] = (segment['deviceTime'] + segment['duration']).isoformat() + '.000Z'
            segment['deviceTime'] = segment['deviceTime'].isoformat()
            segment['duration'] = int(segment['duration'].total_seconds()*1000)
            segment['id'] = str(uuid.uuid4())
            try:
                serialize(segment['suppressed'])
            except KeyError:
                pass
            try:
                del segment['used']
            except KeyError:
                pass
            return segment

        self.json = [serialize(s) for s in self.segments]
Beispiel #24
0
def test_year_month_day_with_time64():
    DT = dt.Frame([
        t(2001, 3, 15, 0, 0, 0),
        t(2017, 11, 1, 23, 59, 59, 999999), None,
        t(1970, 1, 1, 0, 0, 0, 1),
        t(1969, 12, 31, 23, 59, 59, 999999),
        t(1900, 12, 13, 0, 0, 0)
    ])
    RES = DT[:, {"year": year(f[0]), "month": month(f[0]), "day": day(f[0])}]
    assert_equals(
        RES,
        dt.Frame(year=[2001, 2017, None, 1970, 1969, 1900],
                 month=[3, 11, None, 1, 12, 12],
                 day=[15, 1, None, 1, 31, 13]))
Beispiel #25
0
def test_ymdt_with_different_types():
    DT = dt.Frame(A=[2010, 2011, 2012] / dt.int32,
                  B=[3, 5, 7] / dt.int8,
                  C=[4, 1, 1] / dt.int64,
                  D=[12, 10, 3] / dt.int16,
                  E=[30, 50, 25] / dt.int32,
                  F=[0, 0, 0] / dt.int8)
    RES = DT[:, ymdt(f.A, f.B, f.C, f.D, f.E, f.F)]
    assert_equals(
        RES,
        dt.Frame([
            t(2010, 3, 4, 12, 30, 0),
            t(2011, 5, 1, 10, 50, 0),
            t(2012, 7, 1, 3, 25, 0)
        ]))
Beispiel #26
0
def test_ymdt_with_date():
    DT = dt.Frame(date=[d(2001, 3, 15),
                        d(2017, 11, 23),
                        d(1930, 5, 14), None],
                  hour=[12, 19, 2, 7],
                  min=[30, 40, 50, 20])
    RES = DT[:,
             ymdt(date=f.date, hour=f.hour, minute=f.min, second=f.min // 2)]
    assert_equals(
        RES,
        dt.Frame([
            t(2001, 3, 15, 12, 30, 15),
            t(2017, 11, 23, 19, 40, 20),
            t(1930, 5, 14, 2, 50, 25), None
        ]))
Beispiel #27
0
def formatSchedule(meetings):
    """
    Reformat the way that a "time" is reported
    :param avails: list of tuples. Each tuple is an available meeting.
    :return c: list of tuples. Each tuple is an available meeting. The times are
    now reported as a datetime.time object, rather than a minute.
    """
    formatted_meetings = []

    for meeting in meetings:
        formatted_meetings.append(
            (t(meeting[0]//60, meeting[0]%60), t(meeting[1]//60, meeting[1]%60))
        )

    return formatted_meetings
Beispiel #28
0
def test_hour_minute_second_normal():
    DT = dt.Frame(T=[t(2001, 5, 17, 11, 24, 50),
                     t(2011, 11, 30, 17, 1, 29, 7623),
                     None,
                     t(2021, 8, 19, 5, 55, 34, 98078),
                     t(1960, 2, 11, 14, 21, 7, 123456)])
    RES = DT[:, {"hour": hour(f.T),
                 "minute": minute(f.T),
                 "second": second(f.T),
                 "nanosecond": nanosecond(f.T)}]
    assert_equals(RES,
        dt.Frame(hour=[11, 17, None, 5, 14],
                 minute=[24, 1, None, 55, 21],
                 second=[50, 29, None, 34, 7],
                 nanosecond=[0, 7623000, None, 98078000, 123456000]))
Beispiel #29
0
    def peakTime():  
        """
            Returns the peak time of web browser usage. Similar to the heatmap, although doesn't 
            do for each day of the week - sums up each hour and returns the highest.
        """     
        step = 1
        
        init = datetime(1, 1, 1)
        start_time = init.time()
        until_time = None
        
        highest = 0
        timeperiod = None
        while(start_time < t(24-step,0,0)):
            start_time = init.time()
            until_time = (init + timedelta(hours=step) - timedelta(milliseconds=1)).time()
        
            q = session.query(Entry).filter(Entry.access_time >= start_time)\
                    .filter(Entry.access_time <= until_time).count()

            if q > highest:
                highest = q
                timeperiod = start_time.strftime('%H:%M - ') + until_time.strftime('%H:%M')
                
            init = init + timedelta(hours=step)
        return timeperiod  
Beispiel #30
0
def string_outofdate(obj, now=None):
    if not now:
        now = datetime.now(tzlocal())
    if obj['timestamp'] + t(minutes=24 * 60) < now:
        return (fg(3) + 'Warning: timestamp is out of date by ' +
                tdtime(now - obj['timestamp']) + RESET)
    return None
Beispiel #31
0
    def get_route_timetable(self,
                            route_id,
                            route_number,
                            direction,
                            date="",
                            station_id=0):
        if date == "":
            date = d.today().strftime("%Y-%m-%d")
        params = {
            "sid": self.sid,
            "mr_id": route_id,
            "data": date,
            "rl_racetype": direction,
            "rc_kkp": "",
            "st_id": station_id
        }
        timetable = self.__create_post("getRaspisanie", params)
        timetable = self.__clear_keys(timetable)

        for idx in range(len(timetable["stopList"])):
            hours = timetable["stopList"][idx].pop("hours")
            timetable["stopList"][idx]["times"] = []
            for hour in hours:
                for minute in hour["minutes"]:
                    timetable["stopList"][idx]["times"].append(
                        t(int(hour["hour"] if hour["hour"] < 24 else 0),
                          int(minute["minute"])))
        return timetable
Beispiel #32
0
    def _append_segment(self, d, segment_start):

        try:
            index = self.segment_starts.index(t(d.hour, d.minute, d.second))
        except ValueError:
            index = self.segment_starts.index(segment_start) - 1

        try:
            current_segment = self.segment_starts[index]
        except IndexError:
            current_segment = self.segment_starts[len(self.segment_starts) - 1]

        start = dt(d.year, d.month, d.day, d.hour, d.minute, d.second)
        end = dt(d.year, d.month, d.day, segment_start.hour,
                 segment_start.minute, segment_start.second)

        segment = {
            'type': 'basal',
            'rate': self.schedule[current_segment],
            'deliveryType': 'scheduled',
            'deviceTime': start,
            'duration': end - start
        }

        self.segments.append(segment)
Beispiel #33
0
    def _get_final_segment(self):

        # this is hack since I didn't do a great job on the while loop in _get_middle_segments
        self.segments.pop()

        d = self.endpoints[1]

        self._append_segment(self.end_middle, t(d.hour, d.minute, d.second))
    def _get_final_segment(self):

        # this is hack since I didn't do a great job on the while loop in _get_middle_segments
        self.segments.pop()

        d = self.endpoints[1]['deviceTime']

        self._append_segment(self.end_middle, t(d.hour, d.minute, d.second), True)
Beispiel #35
0
 def setUp(self):
     DAOTestCase.setUp(self)
     self._create_functions()
     self.callid = '1404377805.6457'
     event = QueueLog(
         time=t(2020, 1, 1, 0, 0, 0, tzinfo=pytz.UTC),
         callid=self.callid,
         queuename='found_queue',
         event='FULL',
     )
     self.add_me(event)
     event = QueueLog(
         time=t(2020, 2, 1, tzinfo=pytz.UTC),
         callid=self.callid,
         queuename='ignored_queue',
         event='CLOSED',
     )
     self.add_me(event)
Beispiel #36
0
def test_ymdt_unnamed():
    DT = dt.Frame(Y=[2001, 2003, 2005, 2020, 1960],
                  M=[1, 5, 4, 11, 8],
                  D=[12, 18, 30, 1, 14],
                  h=[7, 14, 22, 23, 12],
                  m=[15, 30, 0, 59, 0],
                  s=[12, 23, 0, 59, 27],
                  ns=[0, 0, 0, 999999000, 123000])
    RES = DT[:, ymdt(f.Y, f.M, f.D, f.h, f.m, f.s, f.ns)]
    assert_equals(
        RES,
        dt.Frame([
            t(2001, 1, 12, 7, 15, 12),
            t(2003, 5, 18, 14, 30, 23),
            t(2005, 4, 30, 22, 0, 0),
            t(2020, 11, 1, 23, 59, 59, 999999),
            t(1960, 8, 14, 12, 0, 27, 123)
        ]))
Beispiel #37
0
 def date_header(i):
     thisdate = weekstart + t(days=i)
     datestr = dtime(thisdate)
     dcolor = LGRAY
     if thisdate == agendamaker.now.date():
         datestr = f'> {datestr} <'
         dcolor = WBOLD
     datestr = '{:^{}}'.format(datestr, inner_width)
     return dcolor + datestr + RESET
Beispiel #38
0
 def graph_from_timezones(self) -> Graph:
     graph = Graph()
     # TIMEZONES: USSA: 0-=<8, EUAF:>8-<=16, ASAU:>16-<=23:59
     for _, stacks in self._data.items():
         for _, question in stacks.items():
             tags = question['tags']
             questionTime = datetime.datetime.fromtimestamp(
                 question['creation_date'])
             for tag in tags:
                 if questionTime.time() <= t(hour=8, minute=0, second=0):
                     graph.add_edge('USSA', tag)
                 elif questionTime.time() > t(
                         hour=8, minute=0,
                         second=0) and questionTime.time() <= t(
                             hour=16, minute=0, second=0):
                     graph.add_edge('EUAF', tag)
                 else:
                     graph.add_edge('ASAU', tag)
     return graph
Beispiel #39
0
    def test_that_completed_calls_cannot_be_added_twice(self):
        # Given the same time boundaries, a call should be added and deleted to avoid duplicate calls
        # this test case shows an example with a call starting at 10 and ending at 11 that will only
        # be generated at 11 but that will not be deleted at 11
        begin, end = t(2014, 7, 3, 11, 0, 0), t(2014, 7, 3, 11, 59, 59, 999999)
        self.add_me_all([self.enterqueue_event, self.connect_event, self.complete_agent_event])

        stat_dao.fill_answered_calls(self.session, begin, end)

        callids = stat_call_on_queue_dao.find_all_callid_between_date(self.session, begin, end)
        stat_call_on_queue_dao.remove_callids(self.session, callids)

        stat_dao.fill_answered_calls(self.session, begin, end)

        count = self.session.query(
            func.count(StatCallOnQueue.callid)
        ).filter(StatCallOnQueue.callid == self.callid).scalar()

        assert_that(count, equal_to(1))
def convertTimes(times):
    """
        Given a list of times stored as a fraction e.g. 15.5 is 3:30pm, returns a list
        of Python times. 
    """
    results = []
    for time in times:
        seconds = round((time - int(time)) * 3600)
        results.append(t(int(time),int(seconds/60), int(seconds - int(seconds/60) * 60)))
    return results
Beispiel #41
0
    def test_that_completed_calls_cannot_be_added_twice(self):
        # Given the same time boundaries, a call should be added and deleted to avoid duplicate calls
        # this test case shows an example with a call starting at 10 and ending at 11 that will only
        # be generated at 11 but that will not be deleted at 11
        begin, end = t(2014, 7, 3, 11, 0, 0), t(2014, 7, 3, 11, 59, 59, 999999)
        self.add_me_all([self.enterqueue_event, self.connect_event, self.complete_agent_event])

        stat_dao.fill_answered_calls(self.session, begin, end)

        callids = stat_call_on_queue_dao.find_all_callid_between_date(self.session, begin, end)
        stat_call_on_queue_dao.remove_callids(self.session, callids)

        stat_dao.fill_answered_calls(self.session, begin, end)

        count = self.session.query(
            func.count(StatCallOnQueue.callid)
        ).filter(StatCallOnQueue.callid == self.callid).scalar()

        assert_that(count, equal_to(1))
Beispiel #42
0
 def __init__(self, cluster_dict, force, backtime, db, cur):
   self.stop = d.utcnow() - t(hours=backtime)
   self.alpha_store = dict()
   self.all_nums = dict()
   self.cluster_list = cluster_dict['cluster']
   self.nid = cluster_dict['nid']
   self.all_paths = cluster_dict['all_paths']
   self.db = db
   self.cur = cur
   self.force = force
   self.backtime = backtime
    def _get_difference(self, t1, t2):

        d = dt.now() - td(days=30)

        dt1 = dt(d.year, d.month, d.day, t1.hour, t1.minute, t1.second)

        dt2 = dt(d.year, d.month, d.day, t2.hour, t2.minute, t2.second)

        if t1 == t(0,0,0):
            dt1 = dt1 + td(days=1)

        return dt1 - dt2
Beispiel #44
0
    def __init__(self, schedule, boluses, carbs):

        self.boluses = boluses

        self.carbs = carbs

        self.endpoints = self._get_endpoints()

        if schedule:
            self.schedule = schedule
        else:
            self.schedule = {
                t(0,0,0): 0.8,
                t(2,0,0): 0.65,
                t(4,0,0): 0.75,
                t(5,0,0): 0.85,
                t(6,0,0): 1.00,
                t(9,0,0): 0.8,
                t(15,0,0): 0.9,
                t(20,0,0): 0.8
            }

        self.segment_starts = sorted([time for time in self.schedule.keys()])

        self.segments = []

        self.temp_segments = []

        self.end_initial = self._get_initial_segment()

        self.end_middle = self._get_middle_segments()

        self._get_final_segment()

        self.generate_temp_basals()
        # more hackery because of my bad while loops /o\
        self.temp_segments.pop()

        self.json = [s for s in self.segments] + [s for s in self.temp_segments]

        for segment in self.json:
            segment['start'] = segment['start'].isoformat()
            segment['end'] = segment['end'].isoformat()
            segment['duration'] = abs(int(segment['duration'].total_seconds()*1000))
            segment['id'] = str(uuid.uuid4())
Beispiel #45
0
    def generateHeatMap():
        """
            Returns heatmap things for the overview: the table headers, the heatmap
            table and the highest and lowest values (used to calculate heatmap colour).
        """
        headers = ['Mon', 'Tue','Wed','Thu','Fri','Sat','Sun']
        rows = []
        step = 1 # number of hours each row in table represents
        
        init = datetime(1, 1, 1)
        start_time = init.time()
        until_time = None
        
        highest = 0
        lowest = 0
        
        while(start_time < t((24-step),0,0)):
            start_time = init.time()
            until_time = (init + timedelta(hours=step) - timedelta(milliseconds=1)).time()
            
            title = start_time.strftime('%H:%M - ') + until_time.strftime('%H:%M')
            
            values = []
            for weekday in [1,2,3,4,5,6,0]: # '%w' gives weekdays starting on sunday
                q = session.query(Entry)\
                    .filter(func.strftime('%w', Entry.access_date) == str(weekday))\
                    .filter(Entry.access_time >= start_time)\
                    .filter(Entry.access_time <= until_time).count()

                if q > highest:
                    highest = q
                if q < lowest:
                    lowest = q
                
                values.append(q)
                
            rows.append((title, values))
            init = init + timedelta(hours=step)

        return headers, rows, highest, lowest   
Beispiel #46
0
  def runPath(self):
    """runs it all for all campaigns in cluster by opt in path"""
    for path in self.all_paths:
      tracker_date = d.utcnow()
      print (path['campaign_id'], path['opt_in_id'])
      temp_isLive = self.isLive(path['campaign_id'], path['opt_in_id'])
      live = temp_isLive[0]
      current_page = temp_isLive[1]
      active = path['campaign_status']

      if live == True or self.force == True:
        web_alpha = self.isWebAlpha(path['campaign_id'], path['opt_in_id'])
        last_page = self.binarySearch(current_page, path['campaign_id'], path['opt_in_id'])
        page_param = last_page + 1
        p_ret = 100
        last_date = self.getSubs(page_param, p_ret, path['campaign_id'], path['opt_in_id'], web_alpha)
        #double check last date by going one page down
        if last_date == d(1970, 1, 1, 0, 0):
          print ('double checking...')
          dbl_chk_page = page_param - 1
          last_date = self.getSubs(dbl_chk_page, p_ret, path['campaign_id'], path['opt_in_id'], web_alpha)
          print (last_date)

        if last_date < (d.utcnow() - t(weeks=4)) and self.force != True:
          print ('not live anymore', path['campaign_id'], path['opt_in_id'])
          q_notlive = """insert into user_processing.mobile_campaign_component (campaign_id, opt_in_id, last_date, last_page, active, live)
           VALUES ({0},{1},'{2}',{3},'{4}','False') ON DUPLICATE KEY UPDATE last_date='{2}', last_page={3}, active='{4}', live='False'""".format(path['campaign_id'], path['opt_in_id'], d.strftime(last_date, '%Y-%m-%d %H:%M:%S'), last_page, path['campaign_status'])
          self.cur.execute(q_notlive)
          self.db.commit()
        else:
          ensure_count = 2
          while tracker_date > self.stop and int(page_param) > 0:
            ensure_count -= 1
            #print path['campaign_id'], path['opt_in_id'], page_param, tracker_date
            dt = self.getSubs(page_param, p_ret, path['campaign_id'], path['opt_in_id'], web_alpha)
            tracker_date = dt
            page_param = page_param - 1
Beispiel #47
0
    def _append_segment(self, d, segment_start):

        try:
            index = self.segment_starts.index(t(d.hour, d.minute, d.second))
        except ValueError:
            index = self.segment_starts.index(segment_start) - 1

        try:
            current_segment = self.segment_starts[index]
        except IndexError:
            current_segment = self.segment_starts[len(self.segment_starts) - 1]

        start = dt(d.year, d.month, d.day, d.hour, d.minute, d.second)
        end = dt(d.year, d.month, d.day, segment_start.hour, segment_start.minute, segment_start.second)

        segment = {
                    'type': 'basal',
                    'rate': self.schedule[current_segment],
                    'deliveryType': 'scheduled',
                    'deviceTime': start,
                    'duration': end - start
                }

        self.segments.append(segment);
  INSERT IGNORE INTO users_and_activities.web_users
  (uid, first_name, last_name, created, email, street1, city, state, zip,
   birthdate, mobile, gender, race, income_level)
  VALUES ({})
"""

conn_f = jc_user_process.conn()
db = conn_f[0]
cur = conn_f[1]

#get a place to start for mobile users.
q = "select round(count(*)/25) as start from users_and_activities.mobile_users"
cur.execute(q)
out = cur.fetchall()
#what datetime to go back until
stop = d.utcnow() - t(hours=int(sys.argv[1]))
un = config.mc_user
pw = config.mc_pw

#all profiles
url_1 = "https://secure.mcommons.com/api/profiles"
url_1_payload = { 'page':'3652'}

def insert_to_db_mobile(obj, db, cur):
  values = []
  for k in MOBILE_KEYS:
    try:
      obj[k] = obj[k].encode('utf-8', 'ignore')
    except:
      pass
    if obj[k] is None or obj[k] == '':
Beispiel #49
0
    obj = DateRange(dt(2000, 1, 5), dt(2000, 1, 10))
    other = DateRange(dt(2000, 1, 5), dt(2000, 1, 10))

    assert obj == other

def test_hash_is_consistent():
    obj = DateRange(dt(2000, 1, 5), dt(2000, 1, 10))
    other = DateRange(dt(2000, 1, 5), dt(2000, 1, 10))

    assert hash(obj) == hash(other)

@pytest.mark.parametrize(
    'start, end, other_start, other_end',
    [
        # the other date range just clips the start
        (t(12, 10, 0), t(13, 10, 0), t(12, 0, 0), t(12, 5, 0)),
        # the other date range just clips the end
        (t(12, 10, 0), t(13, 10, 0), t(13, 15, 0), t(13, 20, 0)),
    ]
)
def test_date_ranges_near(start, end, other_start, other_end):
    date = d(2000, 1, 5)
    obj = DateRange(dt.combine(date, start), dt.combine(date, end))
    other = DateRange(dt.combine(date, other_start), dt.combine(date, other_end))

    obj.near_time = td(seconds=300)
    assert obj.near(other)

@pytest.mark.parametrize(
    'start, end, other_start, other_end',
    [
    
  def parse(self,item,i):
    if 0 < i < 23 and i != 4:
      try:
        return float(item)
      except ValueError:
        pass
    return item

  def getIndex(self,day):
    return (day.day-1)*24 + day.hour 

  def getDateTime(self,day):
    """Returns an hours data for a given datetime.  Day must be a datetime object"""
    return self.loadfile(day)[self.getIndex(day)]
    
  def wrange(self,start,end,dt=datetime.timedelta(seconds=3600)):
    """Returns an iterator from start to end using step dt. start and end must
    be datetime objects while dt is a timedelta"""
    cur = start
    curday = datetime.datetime(1,1,1)
    while cur < end:
      yield self.getDateTime(cur)
      cur += dt
        
if __name__ == '__main__':
  from datetime import datetime as t, timedelta as dt
  d = wdatabase(5097,root="data")
  for x in d.wrange(t(1953,1,1),t(1954,1,1),dt(days=1)):
    print "%(date)15s: %(temp)6.2fC / %(weather)s"%x