Beispiel #1
0
 def cmd3(wait):
     logger = logging.getLogger('cmd3')
     self.output3.append(Daytime.daytime())
     logger.info(self.output3[-1].strftime('%T.%f'))
     time.sleep(wait)
     self.output3.append(Daytime.daytime())
     logger.info(self.output3[-1].strftime('%T.%f'))
Beispiel #2
0
 def cmd3(wait):
     logger = logging.getLogger('cmd3')
     self.output3.append(Daytime.daytime())
     logger.info(self.output3[-1].strftime('%T.%f'))
     time.sleep(wait)
     self.output3.append(Daytime.daytime())
     logger.info(self.output3[-1].strftime('%T.%f'))
Beispiel #3
0
 def __call__(self, parser, namespace, values, option_string=None):
     try:
         if type(values) == str:
             daytime = Daytime.fromtime(timeparser.parsetime(values))
         else:
             daytime = [Daytime.fromtime(timeparser.parsetime(d)) for d in values]
     except ValueError:
         raise ArgumentError(self, self.ERR % (values, 'daytime'))
     else:
         setattr(namespace, self.dest, daytime)
Beispiel #4
0
 def __call__(self, parser, namespace, values, option_string=None):
     value = ' '.join(values) if isinstance(values, list) else values
     try:
         daytime = Daytime.fromtime(timeparser.parsetime(values))
     except ValueError:
         raise ArgumentError(self, self.ERR % (values, 'daytime'))
     else:
         self.append(namespace, daytime)
Beispiel #5
0
 def inittimer(self):
     self.interval = 6
     self.count = 4
     data = list()
     times = list()
     daytime = Daytime.daytime()
     for x in range(4): times.append(daytime + 10*x)
     for i, t in enumerate(times): data.append((t, self.interval+i))
     self.timer = DaytimeTimer(data=data)
Beispiel #6
0
 def actualize(self):
     """Actualizes the :attr:`Timer.interval` based on the actual daytime.
     """
     now = Daytime.daytime()
     if now < self._data[0][0]:
         self._interval = self._data[-1][1]
     else:
         for time, interval in self._data:
             if time < now: self._interval = interval
Beispiel #7
0
 def actualize(self):
     """Actualizes the :attr:`Timer.interval` based on the actual daytime.
     """
     now = Daytime.daytime()
     if now < self._data[0][0]:
         self._interval = self._data[-1][1]
     else:
         for time, interval in self._data:
             if time < now: self._interval = interval
Beispiel #8
0
def test_greeting():
    with open('tests/part-of-day.json', 'r') as f:
        part_of_day_results = json.load(f)

    for hour in range(24):
        result_time_of_day = Daytime.part_of_day(
            ephem.Date((2018, 11, 22, hour, 1)))
        assert result_time_of_day == part_of_day_results[str(
            hour)], "expected {} for {} o'clock', got {}.".format(
                part_of_day_results[str(hour)], hour, result_time_of_day)
Beispiel #9
0
    def initcmds(self):
        self.output0 = list()
        self.output1 = list()
        self.output2 = list()
        self.output3 = list()

        # this is for catching the start-times of every round
        def cmd0():
            logger = logging.getLogger('cmd0')
            self.output0.append(Daytime.daytime())
            logger.info(self.output0[-1].strftime('%T.%f'))

        def cmd1(wait):
            logger = logging.getLogger('cmd1')
            self.output1.append(Daytime.daytime())
            logger.info(self.output1[-1].strftime('%T.%f'))
            time.sleep(wait)
            self.output1.append(Daytime.daytime())
            logger.info(self.output1[-1].strftime('%T.%f'))

        def cmd2(wait):
            logger = logging.getLogger('cmd2')
            self.output2.append(Daytime.daytime())
            logger.info(self.output2[-1].strftime('%T.%f'))
            time.sleep(wait)
            self.output2.append(Daytime.daytime())
            logger.info(self.output2[-1].strftime('%T.%f'))

        def cmd3(wait):
            logger = logging.getLogger('cmd3')
            self.output3.append(Daytime.daytime())
            logger.info(self.output3[-1].strftime('%T.%f'))
            time.sleep(wait)
            self.output3.append(Daytime.daytime())
            logger.info(self.output3[-1].strftime('%T.%f'))

        self.wait1 = 2
        self.wait2 = 4
        self.wait3 = 1
        times = list()
        daytime = Daytime.daytime()
        for x in [1, 3]:
            times.append((daytime + self.interval * x))
        self.cmd0 = Cmd(cmd0)
        self.cmd1 = Cmd(cmd1,
                        args=[self.wait1],
                        join=True,
                        stall=0.5,
                        wait=0.2)
        self.cmd2 = Cmd(cmd2, args=[self.wait2], wait=1)
        self.cmd3 = Cmd(cmd3,
                        args=[self.wait3],
                        times=times,
                        delay=self.cmd1._wait + self.wait1 + self.cmd1._stall +
                        1)
Beispiel #10
0
 def setUp(self):
     self.daytime1 = Daytime.fromtime(time(0, 0, 0, 8000))
     self.daytime2 = Daytime.strptime('2,20,22,007000', '%H,%M,%S,%f')
     self.daytime3 = Daytime.utcfromtimestamp(
         Daytime(2, 20, 23, 90000).as_seconds)
     self.daytime4 = Daytime.fromtimestamp(
         Daytime(12, 25, 0, 8400).as_seconds, UTC())
     self.daytime5 = Daytime(18, 43, 20, 6000)
     self.daytime6 = Daytime.daytime
Beispiel #11
0
 def inittimer(self):
     self.interval = 6
     self.count = 4
     data = list()
     times = list()
     daytime = Daytime.daytime()
     for x in range(4):
         times.append(daytime + 10 * x)
     for i, t in enumerate(times):
         data.append((t, self.interval + i))
     self.timer = DaytimeTimer(data=data)
Beispiel #12
0
def check_timetable(database):
    current_msk = Daytime.fromtime(datetime.datetime.now(MSK_TIMEZONE))
    current_weekday = constants.weekdays[datetime.datetime.now(
        MSK_TIMEZONE).weekday()]
    interval_start = current_msk + 540
    interval_stop = current_msk + 600
    for_notifying = {}
    for user in database.get_all():
        user_delta = user.get('settings', {}).get('timezone', 0)
        timetable = user.get('timetable', {}).get(current_weekday, {})
        if timetable:
            for time, note in timetable.items():
                if interval_start < Daytime.strptime(
                        time, '%H:%M') - datetime.timedelta(
                            hours=user_delta) < interval_stop:
                    if for_notifying.get(user['id']):
                        for_notifying[user['id']].append({time: note})
                    else:
                        for_notifying[user['id']] = [{time: note}]

    return for_notifying
Beispiel #13
0
    def _check_times(self):
        """
        Checks for execution with regard to *times*.

        :arg int interval:      :attr:`Sequence.timer.interval`
        :returns:               bool
        """
        if not self._times: return True
        d = Daytime.daytime()
        i = self.sequence.timer.interval
        if any([d >= t and d - t < i for t in self._times]): return True
        else: return False
Beispiel #14
0
    def _check_times(self):
        """
        Checks for execution with regard to *times*.

        :arg int interval:      :attr:`Sequence.timer.interval`
        :returns:               bool
        """
        if not self._times: return True
        d = Daytime.daytime()
        i = self.sequence.timer.interval
        if any([d >= t and d - t < i for t in self._times]): return True
        else: return False
Beispiel #15
0
    def initcmds(self):
        self.output0 = list()
        self.output1 = list()
        self.output2 = list()
        self.output3 = list()

        # this is for catching the start-times of every round
        def cmd0():
            logger = logging.getLogger('cmd0')
            self.output0.append(Daytime.daytime())
            logger.info(self.output0[-1].strftime('%T.%f'))

        def cmd1(wait):
            logger = logging.getLogger('cmd1')
            self.output1.append(Daytime.daytime())
            logger.info(self.output1[-1].strftime('%T.%f'))
            time.sleep(wait)
            self.output1.append(Daytime.daytime())
            logger.info(self.output1[-1].strftime('%T.%f'))

        def cmd2(wait):
            logger = logging.getLogger('cmd2')
            self.output2.append(Daytime.daytime())
            logger.info(self.output2[-1].strftime('%T.%f'))
            time.sleep(wait)
            self.output2.append(Daytime.daytime())
            logger.info(self.output2[-1].strftime('%T.%f'))

        def cmd3(wait):
            logger = logging.getLogger('cmd3')
            self.output3.append(Daytime.daytime())
            logger.info(self.output3[-1].strftime('%T.%f'))
            time.sleep(wait)
            self.output3.append(Daytime.daytime())
            logger.info(self.output3[-1].strftime('%T.%f'))


        self.wait1 = 2
        self.wait2 = 4
        self.wait3 = 1
        times = list()
        daytime = Daytime.daytime()
        for x in [1,3]: times.append((daytime + self.interval*x))
        self.cmd0 = Cmd(cmd0)
        self.cmd1 = Cmd(cmd1, args=[self.wait1], join=True, stall=0.5, wait=0.2)
        self.cmd2 = Cmd(cmd2, args=[self.wait2], wait=1)
        self.cmd3 = Cmd(cmd3, args=[self.wait3], times=times, delay=self.cmd1._wait + self.wait1 + self.cmd1._stall + 1)
Beispiel #16
0
class Lifxservice():
    def __init__(self, location, debug=False):
        self._debug = debug
        self._lifxlan = LifxLAN()

        self._daytime = Daytime(location)

    def start(self):
        self._lifxlan.set_power_all_lights("off", rapid=False)

    def stop(self):
        # When coming home, turn on the lights if the sun has set
        if self._daytime.dark_outside():
            self._lifxlan.set_power_all_lights("on", rapid=False)            

    def generate_summary(self):
        # Not very interesting to show a summary for the sonos service
        return None
Beispiel #17
0
    def _stop_tracker(self):
        logging.info("Tracker stopped.")

        self._board.led.state = Led.OFF
        self._tracker_active = False

        summaries = []
        self._lock.acquire()
        for service in self._services:
            try: 
                service.stop()
                summaries.append(service.generate_summary())
            except Exception as e:
                logging.error("Could not stop service of class {}. Error: {}".format(service.__class__.__name__, e))

        self._services = None
        self._lock.release()
        if not self._debug:
            googlevoice.say(
                "Good {}. Welcome back. Here's your summary: ".format(Daytime.part_of_day()))
            for summary in filter(None, summaries):
                logging.info(summary)
                googlevoice.say(summary)
Beispiel #18
0
def test_day_night():
    with open('tests/day-night.json', 'r') as f:
        day_night_results = json.load(f)

    year = 2018
    months = range(3, 13, 3)
    hours = range(24)
    minute = 0
    day = 21
    locations = {
        "north_pole": (90, 0),
        "south_pole": (-90, 0),
        "greenwich": (51.48, 0)
    }

    for location, coords in locations.items():
        for month in months:
            for hour in hours:
                time = ephem.Date((year, month, day, hour, minute))
                dark = Daytime(coords).dark_outside(time)
                assert dark == day_night_results[location + " " + str(
                    time
                )], "expected it to be {} on {} at {} (coords:{}), got opposite.".format(
                    "dark" if dark else "not dark", time, location, coords)
Beispiel #19
0
    def __init__(self, location, debug=False):
        self._debug = debug
        self._lifxlan = LifxLAN()

        self._daytime = Daytime(location)
Beispiel #20
0
 def cmd0():
     logger = logging.getLogger('cmd0')
     self.output0.append(Daytime.daytime())
     logger.info(self.output0[-1].strftime('%T.%f'))
Beispiel #21
0
 def cmd0():
     logger = logging.getLogger('cmd0')
     self.output0.append(Daytime.daytime())
     logger.info(self.output0[-1].strftime('%T.%f'))