code: def add_fact(self, fact, temporary_activity = False):
          
          if not fact.activity:
              return None
  
          serialized = fact.serialized_name()
  
          start_timestamp = timegm((fact.start_time or dt.datetime.now()).timetuple())
  
          end_timestamp = fact.end_time or 0
          if end_timestamp:
              end_timestamp = timegm(end_timestamp.timetuple())
  
          new_id = self.conn.AddFact(serialized,
                                     start_timestamp,
                                     end_timestamp,
                                     temporary_activity)
  
          # TODO - the parsing should happen just once and preferably here
          # we should feed (serialized_activity, start_time, end_time) into AddFact and others
          return new_id
docs: Add fact. activity name can use the
          `[-]start_time[-end_time] activity@category, description #tag1 #tag2`
          syntax, or params can be stated explicitly.
          Params will take precedence over the derived values.
          start_time defaults to current moment.