예제 #1
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_two():  # slower than parse_one
    filename = Settings().get_timelog_file()
    for line in open(filename):
        try:
            time, entry = line.split(': ', 1)
            time = parse_datetime(time)
        except ValueError:
            continue
예제 #2
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_one():
    filename = Settings().get_timelog_file()
    for line in open(filename):
        if ': ' not in line:
            continue
        time, entry = line.split(': ', 1)
        try:
            time = parse_datetime(time)
        except ValueError:
            continue
예제 #3
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_three():  # fastest
    filename = Settings().get_timelog_file()
    for line in open(filename):
        time, sep, entry = line.partition(': ')
        if not sep:
            continue
        try:
            time = parse_datetime(time)
        except ValueError:
            continue
예제 #4
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_and_strip():
    filename = Settings().get_timelog_file()
    for line in open(filename):
        time, sep, entry = line.partition(': ')
        if not sep:
            continue
        try:
            time = parse_datetime(time)
        except ValueError:
            continue
        entry = entry.strip()
예제 #5
0
 def setUp(self):
     self.settings = Settings()
     self.real_isdir = os.path.isdir
     self.tempdir = None
     self.old_home = os.environ.get('HOME')
     self.old_gtimelog_home = os.environ.get('GTIMELOG_HOME')
     self.old_xdg_config_home = os.environ.get('XDG_CONFIG_HOME')
     self.old_xdg_data_home = os.environ.get('XDG_DATA_HOME')
     os.environ['HOME'] = os.path.normpath('/tmp/home')
     os.environ.pop('GTIMELOG_HOME', None)
     os.environ.pop('XDG_CONFIG_HOME', None)
     os.environ.pop('XDG_DATA_HOME', None)
예제 #6
0
 def __init__(self, config):
     self.settings = Settings()
     self.timelog = TimeLog(self.settings.get_timelog_file(),
                            self.settings.virtual_midnight)
     self.aliases = config.get('aliases', {})
     self.line_format = config.get('line_format', '')
     if self.line_format == 'categorized':
         self.line_format_str = "category: task description | comment"
         self.delimiter = " "
     else:
         self.line_format_str = "task: description | comment"
         self.delimiter = ":"
예제 #7
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_and_collect():
    items = []
    filename = Settings().get_timelog_file()
    for line in open(filename):
        time, sep, entry = line.partition(': ')
        if not sep:
            continue
        try:
            time = parse_datetime(time)
        except ValueError:
            continue
        entry = entry.strip()
        items.append((time, entry))
    return items
예제 #8
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_and_sort_incorrectly():
    items = []
    filename = Settings().get_timelog_file()
    for line in open(filename):
        time, sep, entry = line.partition(': ')
        if not sep:
            continue
        try:
            time = parse_datetime(time)
        except ValueError:
            continue
        entry = entry.strip()
        items.append((time, entry))
    items.sort()  # XXX: can reorder lines
    return items
예제 #9
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_and_sort_unicode_piecemeal():
    items = []
    filename = Settings().get_timelog_file()
    for line in open(filename, 'rb'):
        time, sep, entry = line.partition(b': ')
        if not sep:
            continue
        try:
            time = parse_datetime(time.decode('ASCII'))
        except (ValueError, UnicodeError):
            continue
        entry = entry.strip().decode('UTF-8')
        items.append((time, entry))
    items.sort(key=itemgetter(0))
    return items
예제 #10
0
 def do_handle_local_options(self, options):
     if options.contains('version'):
         print(gtimelog.__version__)
         return 0
     if options.contains('sample-config'):
         settings = Settings()
         settings.save("gtimelogrc.sample")
         print("Sample configuration file written to gtimelogrc.sample")
         print("Edit it and save as %s" % settings.get_config_file())
         return 0
     self.debug = options.contains('debug')
     self.start_minimized = options.contains('tray')
     if options.contains('quit'):
         print('gtimelog: Telling the already-running instance to quit')
     return -1  # send the args to the remote instance for processing
예제 #11
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def parse_and_sort_unicode():
    items = []
    filename = Settings().get_timelog_file()
    for line in open(filename, 'rb').read().decode('UTF-8').splitlines():
        time, sep, entry = line.partition(': ')
        if not sep:
            continue
        try:
            time = parse_datetime(time)
        except ValueError:
            continue
        entry = entry.strip()
        items.append((time, entry))
    items.sort(key=itemgetter(0))
    return items
예제 #12
0
def full():
    return Settings().get_time_log().items
예제 #13
0
 def __init__(self, config):
     self.settings = Settings()
     self.timelog = TimeLog(self.settings.get_timelog_file(),
                            self.settings.virtual_midnight)
     self.aliases = config.get('aliases', {})
예제 #14
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def split():
    filename = Settings().get_timelog_file()
    for line in open(filename):
        if ': ' not in line:
            continue
        time, entry = line.split(': ', 1)
예제 #15
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def just_read():
    filename = Settings().get_timelog_file()
    open(filename).readlines()
예제 #16
0
파일: benchmark.py 프로젝트: wosc/gtimelog
def full():
    return TimeLog(Settings().get_timelog_file(),
                   Settings().virtual_midnight).items
예제 #17
0
    def do_activate(self):
        if self.main_window is not None:
            self.main_window.main_window.present()
            return

        log.addHandler(logging.StreamHandler(sys.stdout))
        if self.opts.debug:
            log.setLevel(logging.DEBUG)
        else:
            log.setLevel(logging.INFO)

        if self.opts.sample_config:
            settings = Settings()
            settings.save("gtimelogrc.sample")
            print("Sample configuration file written to gtimelogrc.sample")
            print("Edit it and save as %s" % settings.get_config_file())
            return

        if self.opts.debug:
            print('GTimeLog version: %s' % gtimelog.__version__)
            print('Gtk+ version: %s.%s.%s' % (Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION))
            print('Config directory: %s' % Settings().get_config_dir())
            print('Data directory: %s' % Settings().get_data_dir())

        settings = Settings()
        configdir = settings.get_config_dir()
        datadir = settings.get_data_dir()
        try:
            # Create configdir if it doesn't exist.
            os.makedirs(configdir)
        except OSError as error:
            if error.errno != errno.EEXIST:
                # XXX: not the most friendly way of error reporting for a GUI app
                raise
        try:
            # Create datadir if it doesn't exist.
            os.makedirs(datadir)
        except OSError as error:
            if error.errno != errno.EEXIST:
                raise

        settings_file = settings.get_config_file()
        if not os.path.exists(settings_file):
            if self.opts.debug:
                print('Saving settings to %s' % settings_file)
            settings.save(settings_file)
        else:
            if self.opts.debug:
                print('Loading settings from %s' % settings_file)
            settings.load(settings_file)
        if self.opts.debug:
            print('Assuming date changes at %s' % settings.virtual_midnight)
            print('Loading time log from %s' % settings.get_timelog_file())
        timelog = TimeLog(settings.get_timelog_file(),
                          settings.virtual_midnight)
        if settings.task_list_url:
            if self.opts.debug:
                print('Loading cached remote tasks from %s' %
                      os.path.join(datadir, 'remote-tasks.txt'))
            tasks = RemoteTaskList(settings.task_list_url,
                                   os.path.join(datadir, 'remote-tasks.txt'))
        else:
            if self.opts.debug:
                print('Loading tasks from %s' % os.path.join(datadir, 'tasks.txt'))
            tasks = TaskList(os.path.join(datadir, 'tasks.txt'))
        self.main_window = MainWindow(timelog, settings, tasks)
        self.add_window(self.main_window.main_window)
        start_in_tray = False

        if settings.show_tray_icon:
            if self.opts.debug:
                print('Tray icon preference: %s' % ('AppIndicator'
                                                    if settings.prefer_app_indicator
                                                    else 'SimpleStatusIcon'))

            if settings.prefer_app_indicator and have_app_indicator:
                tray_icon = AppIndicator(self.main_window)
            else:
                tray_icon = SimpleStatusIcon(self.main_window)

            if tray_icon:
                if self.opts.debug:
                    print('Using: %s' % tray_icon.__class__.__name__)

                start_in_tray = (settings.start_in_tray
                                 if settings.start_in_tray
                                 else self.opts.tray)

        if not start_in_tray:
            self.main_window.on_show_activate()
        else:
            if self.opts.debug:
                print('Starting minimized')

        # This is needed to make ^C terminate gtimelog when we're using
        # gobject-introspection.
        signal.signal(signal.SIGINT, signal.SIG_DFL)