def test_round_trip(self): fact = Fact.parse( "11:00 12:00 activity, with comma@category,, description, with comma #and #tags" ) dbus_fact = to_dbus_fact_json(fact) return_fact = from_dbus_fact_json(dbus_fact) self.assertEqual(return_fact, fact) dbus_fact = to_dbus_fact(fact) return_fact = from_dbus_fact(dbus_fact) self.assertEqual(return_fact, fact) fact = Fact.parse("11:00 activity") dbus_fact = to_dbus_fact_json(fact) return_fact = from_dbus_fact_json(dbus_fact) self.assertEqual(return_fact, fact) dbus_fact = to_dbus_fact(fact) return_fact = from_dbus_fact(dbus_fact) self.assertEqual(return_fact, fact) range, __ = dt.Range.parse("2020-01-19 11:00 - 2020-01-19 12:00") dbus_range = to_dbus_range(range) return_range = from_dbus_range(dbus_range) self.assertEqual(return_range, range)
def GetTodaysFacts(self): """Gets facts of today, respecting hamster midnight. See GetFacts for return info. Legacy, to be superceded by GetTodaysFactsJSON at some point. """ return [to_dbus_fact(fact) for fact in self.get_todays_facts()]
def update_fact(self, fact_id, fact, temporary_activity=False): """Update fact values. See add_fact for rules. Update is performed via remove/insert, so the fact_id after update should not be used anymore. Instead use the ID from the fact dict that is returned by this function""" dbus_fact = to_dbus_fact(fact) new_id = self.conn.UpdateFactVerbatim(fact_id, dbus_fact) return new_id
def add_fact(self, fact, temporary_activity=False): """Add fact (Fact).""" assert fact.activity, "missing activity" if not fact.start_time: logger.info("Adding fact without any start_time is deprecated") fact.start_time = hamster_now() dbus_fact = to_dbus_fact(fact) new_id = self.conn.AddFactVerbatim(dbus_fact) return new_id
def check_fact(self, fact, default_day=None): """Check Fact validity for inclusion in the storage. default_day (date): Default hamster day, used to simplify some hint messages (remove unnecessary dates). None is safe (always show dates). """ if not fact.start_time: # Do not even try to pass fact through D-Bus as # conversions would fail in this case. raise FactError("Missing start time") dbus_fact = to_dbus_fact(fact) dbus_day = to_dbus_date(default_day) success, message = self.conn.CheckFact(dbus_fact, dbus_day) if not success: raise FactError(message) return success, message
def GetFacts(self, start_date, end_date, search_terms): """Gets facts between the day of start_date and the day of end_date. Parameters: i start_date: Seconds since epoch (timestamp). Use 0 for today i end_date: Seconds since epoch (timestamp). Use 0 for today s search_terms: Bleh. If starts with "not ", the search terms will be reversed Returns an array of D-Bus fact structures. """ #TODO: Assert start > end ? start = dt.date.today() if start_date: start = dt.datetime.utcfromtimestamp(start_date).date() end = None if end_date: end = dt.datetime.utcfromtimestamp(end_date).date() return [to_dbus_fact(fact) for fact in self.get_facts(start, end, search_terms)]
def GetTodaysFacts(self): """Gets facts of today, respecting hamster midnight. See GetFacts for return info""" return [to_dbus_fact(fact) for fact in self.get_todays_facts()]
def GetFact(self, fact_id): """Get fact by id. For output format see GetFacts""" fact = self.get_fact(fact_id) return to_dbus_fact(fact)