From 5ed3e16d65248ce15502b1fa402f17f1cb9bf8e9 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 23 Nov 2017 16:01:21 +0100 Subject: [PATCH 1/3] add over.callback.integers --- over/callback.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/over/callback.py b/over/callback.py index 591af05..2abbb88 100644 --- a/over/callback.py +++ b/over/callback.py @@ -99,3 +99,15 @@ def integer(arg): return int(arg, 8) return int(arg) + +def integers(*args): + """ + @while converting arguments to ints + """ + + out = [] + + for arg in args: + out.append(integer(arg)) + + return out From 43ba8ee6a37e4ea8bf66d33351c2145359f1417f Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 6 Aug 2019 17:38:28 +0200 Subject: [PATCH 2/3] add over.cfg.Config - a simple read-only API for JSON configs --- over/__init__.py | 1 + over/cfg.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 over/cfg.py diff --git a/over/__init__.py b/over/__init__.py index 64db32b..90f3ac7 100644 --- a/over/__init__.py +++ b/over/__init__.py @@ -6,6 +6,7 @@ import sys from . import app from . import aux from . import callback +from . import cfg from . import cmd from . import docs from . import file diff --git a/over/cfg.py b/over/cfg.py new file mode 100644 index 0000000..6dfdfc7 --- /dev/null +++ b/over/cfg.py @@ -0,0 +1,69 @@ +#! /usr/bin/env python3 +# encoding: utf-8 + +# -------------------------------------------------- +# Library imports +import json +import jsmin + +# -------------------------------------------------- +# Local imports + +# -------------------------------------------------- + +class Config: + def __init__(self, source=None, readonly=False): + """ + Can be loaded from a JSON file (str path) or from a python dict. + """ + + if type(source) == str: + with open(source) as f: + initial = json.loads(jsmin.jsmin(f.read())) + elif source is None: + initial = {} + else: + initial = source + + assert type(initial) == dict + object.__setattr__(self, "raw", initial) + object.__setattr__(self, "readonly", readonly) + + def keys(self): + return self.raw.keys() + + def __getitem__(self, name): + return self.raw[name] + + def __setitem__(self, name, value): + if self.readonly: + raise AttributeError("object is not writable") + + self.raw[name] = value + + def __setattr__(self, name, value): + if self.readonly: + raise AttributeError("object is not writable") + + self.raw[name] = value + + def __getattr__(self, name): + matches = [key for key in self.raw if key.replace("-", "_") == name] + + if matches: + assert len(matches) == 1 + + value = self.raw[matches[0]] + + if type(value) == dict: + return Config(value) + else: + return value + else: + raise KeyError(name) + + def __contains__(self, name): + return name in self.raw + + def __repr__(self): + return "Config(%s)" %(" ".join("%s=%s" %(k, "…" if type(v) == dict else v) for k, v in self.raw.items())) From 193302708c4858ef59043bfab044f582f23f6d92 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 7 Aug 2019 11:53:39 +0200 Subject: [PATCH 3/3] over.cfg.Config - add .items() and .values() --- over/cfg.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/over/cfg.py b/over/cfg.py index 6dfdfc7..926ea25 100644 --- a/over/cfg.py +++ b/over/cfg.py @@ -32,6 +32,12 @@ class Config: def keys(self): return self.raw.keys() + def items(self): + return self.raw.items() + + def values(self): + return self.raw.values() + def __getitem__(self, name): return self.raw[name]