コード例 #1
0
ファイル: TimesheetCSV.py プロジェクト: paulgazz/timesheet
  def AddEntry(self, start_date, stop_date, message):
    if not isinstance(start_date, datetime):
      return False, 'start date must be a datetime object'
    if not isinstance(stop_date, datetime):
      return False, 'stop date must be a datetime object'
    if '\n' in message:
      return False, 'message cannot have newline characters'

    # TODO cache recent entry hashes

    # check for duplicate entries
    new_hash = hash(util.date2string(start_date)+util.date2string(stop_date))
    for row in reversed(self.entries):
      item_start = row[0]
      item_stop = row[1]
      item_hash = hash(item_start+item_stop)
      if new_hash == item_hash:
        return False, "duplicate entry"

    with open(self.filename, 'ab+') as csvfile:
      writer = csv.writer(csvfile, delimiter=',',
                          quotechar='"', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
      writer.writerow([util.date2string(start_date),
                       util.date2string(stop_date),
                       message])

    # force reread of timesheet
    self._entries = None

    return True, ''
コード例 #2
0
ファイル: Importer.py プロジェクト: paulgazz/timesheet
    def eternity(self, mbox_file):
        print "importing app's csv timesheets from mailbox"
        print "mailbox: " + mbox_file
        print ""

        # open and lock the mailbox
        mbox = mailbox.mbox(mbox_file, create=False)
        mbox.lock()

        imported = 0
        try:
            for key, msg in mbox.iteritems():
                if msg["subject"].startswith("Eternity"):
                    for part in msg.walk():  # assume its multipart by its subject
                        if part.get_content_type() == "text/csv" and "_logs_" in part.get_filename():
                            sio = StringIO.StringIO(part.get_payload())
                            reader = csv.reader(sio, delimiter=",")
                            for f in reader:
                                if not f[0] == "day":
                                    if len(f) >= 8:
                                        print "importing " + str(f)
                                        startdate = util.string2date(f[0] + " " + f[1])
                                        d = f[3].split(":")
                                        hours = int(d[0])
                                        minutes = int(d[1])
                                        seconds = int(d[2])
                                        delta = timedelta(hours=hours, minutes=minutes, seconds=seconds)
                                        enddate = startdate + delta
                                        tag = f[7]
                                        note = f[6]
                                        message = ""
                                        if len(tag) > 0:
                                            message = tag
                                            if len(note) > 0:
                                                message += ", "
                                        message = message + note
                                        added, msg = self.timesheet_log.AddEntry(startdate, enddate, message)
                                        if added:
                                            print "added entry: " + util.date2string(startdate), util.date2string(
                                                enddate
                                            ), message
                                            print ""
                                            imported += 1
                                        else:
                                            print msg
                # mbox.remove(key)
        finally:
            mbox.flush()
            mbox.close()
            mbox.unlock()

        if imported == 0:
            print "nothing to import"
        else:
            print "imported " + str(imported) + " entries"
コード例 #3
0
ファイル: TimesheetState.py プロジェクト: paulgazz/timesheet
 def Set(self, start_time, message = ''):
   assert isinstance(start_time, datetime)
   assert isinstance(message, str)
   # TODO check that message is a string
   with open(self.filename, 'w') as fh:
     fh.write('timesheet.state\n')
     fh.write(util.date2string(start_time))
     fh.write('\n')
     if message != '':
       fh.write(message);
       fh.write('\n')