feedwarrior

Slim, portable tooling for creating and distributing decentralized append logs
git clone git://git.defalsify.org/logwarrior.git
Log | Files | Refs | README | LICENSE

commit 226309295bb25d3ce7168666e6a16f1dad472339
parent 3b4f8956edaad90f152ceaa33c89d882d85a7e95
Author: nolash <dev@holbrook.no>
Date:   Sun, 28 Jun 2020 15:49:36 +0200

Move feed object to package

Diffstat:
Rconfig.ini -> config_example.ini | 0
Dfeedwarrior.py | 114-------------------------------------------------------------------------------
Asrc/feedwarrior/__init__.py | 1+
Asrc/feedwarrior/common.py | 9+++++++++
Asrc/feedwarrior/feed.py | 45+++++++++++++++++++++++++++++++++++++++++++++
Asrc/main.py | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 123 insertions(+), 114 deletions(-)

diff --git a/config.ini b/config_example.ini diff --git a/feedwarrior.py b/feedwarrior.py @@ -1,114 +0,0 @@ -#!/usr/bin/python - -# Author: Louis Holbrook <dev@holbrook.no> (https://holbrook.no) -# License: GPLv3 -# Description: Work log tool - -# standard imports -import copy -import os -import sys -import argparse -import configparser -import json -import logging -import uuid -import time - -logging.basicConfig(level=logging.ERROR) -logg = logging.getLogger() - -DATA_DIR='/dev/null' - - -argparser = argparse.ArgumentParser(description='create and manipulate feedwarrior logs') -argparser.add_argument('-p', type=str, help='parent log uuid') -argparser.add_argument('-c', required=True, type=str, help='configuration file') -argparser.add_argument('-v', action='store_true', help='be verbose') -sub = argparser.add_subparsers() -sub.dest = 'command' - -args = argparser.parse_args(sys.argv[1:]) -if args.v: - logging.getLogger().setLevel(logging.DEBUG) - -logg.debug('loading config {}'.format(args.c)) -cp = configparser.ConfigParser() -cp.read(args.c) -DATA_DIR = cp['FEEDWARRIOR']['datadir'] - -try: - os.mkdir(DATA_DIR) - logg.debug('creating datadir {}'.format(DATA_DIR)) -except FileExistsError as e: - logg.debug('using datadir {}'.format(DATA_DIR)) - - -# TODO: move to submodule asap - -def parse_uuid(uu): - if type(uu).__name__ == 'str': - return uuid.UUID('urn:uuid:' + uu) - elif type(uu).__name__ == 'UUID': - return uu - raise ValueError('invalid uuid') - -class Feed: - - def __init__(self, uu=None, parent=None, created=None, updated=None): - if uu == None: - self.uuid = uuid.uuid4() - else: - self.uuid = parse_uuid(uu) - - self.parent = None - if parent != None: - if type(parent).__name__ != 'Feed': - raise ValueError('wrong type for parent: {}'.format(type(parent).__name__)) - self.parent = parent - - if created != None: - self.created = created - if updated == None: - self.updated = copy.copy(created) - else: - self.created = int(time.time()) - self.updated = copy.copy(self.created) - - if self.updated == None: - self.updated = updated - - self.entries = [] - - - def serialize(self): - o = { - 'uuid': str(self.uuid), - 'created': self.created, - 'updated': self.updated, - } - if self.parent != None: - o['parent_uuid'] = str(self.parent.uuid) - - return o - -feed_parent = None -if args.p != None: - try: - feed_parent = Feed(args.p) - except ValueError as e: - logg.error('invalid parent {}: {}'.format(args.p, e)) - sys.exit(1) - -if args.command == None: - feed_current = Feed(parent=feed_parent) - uu = str(feed_current.uuid) - logg.debug('new log {}'.format(uu)) - log_path = os.path.join(DATA_DIR, str(uu)) - os.mkdir(log_path) - - log_meta_path = os.path.join(log_path, '.log') - f = open(log_meta_path, 'x') - json.dump(feed_current.serialize(), f) - f.close() - sys.exit(0) diff --git a/src/feedwarrior/__init__.py b/src/feedwarrior/__init__.py @@ -0,0 +1 @@ +from .feed import feed diff --git a/src/feedwarrior/common.py b/src/feedwarrior/common.py @@ -0,0 +1,9 @@ +# standard imports +import uuid + +def parse_uuid(uu): + if type(uu).__name__ == 'str': + return uuid.UUID('urn:uuid:' + uu) + elif type(uu).__name__ == 'UUID': + return uu + raise ValueError('invalid uuid') diff --git a/src/feedwarrior/feed.py b/src/feedwarrior/feed.py @@ -0,0 +1,45 @@ +# standard imports +import uuid +import copy +import time +from .feedwarrior import parse_uuid + + +class feed: + + def __init__(self, uu=None, parent=None, created=None, updated=None): + if uu == None: + self.uuid = uuid.uuid4() + else: + self.uuid = parse_uuid(uu) + + self.parent = None + if parent != None: + if type(parent).__name__ != 'feed': + raise ValueError('wrong type for parent: {}'.format(type(parent).__name__)) + self.parent = parent + + if created != None: + self.created = created + if updated == None: + self.updated = copy.copy(created) + else: + self.created = int(time.time()) + self.updated = copy.copy(self.created) + + if self.updated == None: + self.updated = updated + + self.entries = [] + + + def serialize(self): + o = { + 'uuid': str(self.uuid), + 'created': self.created, + 'updated': self.updated, + } + if self.parent != None: + o['parent_uuid'] = str(self.parent.uuid) + + return o diff --git a/src/main.py b/src/main.py @@ -0,0 +1,68 @@ +#!/usr/bin/python + +# Author: Louis Holbrook <dev@holbrook.no> (https://holbrook.no) +# License: GPLv3 +# Description: Work log tool + +# standard imports +import os +import sys +import argparse +import configparser +import json +import logging + +# local imports +import feedwarrior + +logging.basicConfig(level=logging.ERROR) +logg = logging.getLogger() + +DATA_DIR='/dev/null' + + +argparser = argparse.ArgumentParser(description='create and manipulate feedwarrior logs') +argparser.add_argument('-p', type=str, help='parent log uuid') +argparser.add_argument('-c', required=True, type=str, help='configuration file') +argparser.add_argument('-v', action='store_true', help='be verbose') +sub = argparser.add_subparsers() +sub.dest = 'command' + +args = argparser.parse_args(sys.argv[1:]) +if args.v: + logging.getLogger().setLevel(logging.DEBUG) + +logg.debug('loading config {}'.format(args.c)) +cp = configparser.ConfigParser() +cp.read(args.c) +DATA_DIR = cp['FEEDWARRIOR']['datadir'] + +try: + os.mkdir(DATA_DIR) + logg.debug('creating datadir {}'.format(DATA_DIR)) +except FileExistsError as e: + logg.debug('using datadir {}'.format(DATA_DIR)) + + +# TODO: move to submodule asap +feed_parent = None +if args.p != None: + try: + feed_parent = feedwarrior.feed(args.p) + except ValueError as e: + logg.error('invalid parent {}: {}'.format(args.p, e)) + sys.exit(1) + +if __name__ == '__main__': + if args.command == None: + feed_current = feedwarrior.feed(parent=feed_parent) + uu = str(feed_current.uuid) + logg.debug('new log {}'.format(uu)) + log_path = os.path.join(DATA_DIR, str(uu)) + os.mkdir(log_path) + + log_meta_path = os.path.join(log_path, '.log') + f = open(log_meta_path, 'x') + json.dump(feed_current.serialize(), f) + f.close() + sys.exit(0)