From 439e1c46bd70bda8f7dc693916bba78c6b8a23b3 Mon Sep 17 00:00:00 2001 From: Luca Sbardella Date: Mon, 9 Jul 2018 17:14:48 +0100 Subject: [PATCH 1/4] namespaces --- agiletoolkit/repo.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/agiletoolkit/repo.py b/agiletoolkit/repo.py index cf35ed0..6f1e9a8 100644 --- a/agiletoolkit/repo.py +++ b/agiletoolkit/repo.py @@ -14,7 +14,9 @@ from . import utils -NAMESPACES = {'local', 'dev', 'stage', 'sandbox', 'production'} +NAMESPACES = { + 'local', 'development', 'dev', 'stage', 'prod', 'sandbox', 'production' +} @dataclass From 0ee2197a5b9ff39ada40a5bcfa13d0fa31fd6d9d Mon Sep 17 00:00:00 2001 From: Luca Sbardella Date: Mon, 9 Jul 2018 17:16:35 +0100 Subject: [PATCH 2/4] bump --- agiletoolkit/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agiletoolkit/__init__.py b/agiletoolkit/__init__.py index c26404b..962d8fa 100644 --- a/agiletoolkit/__init__.py +++ b/agiletoolkit/__init__.py @@ -1,3 +1,3 @@ """Agile toolkit for devops and repository management""" -__version__ = "0.1.9" +__version__ = "0.2.0" From 96dbac4517d2bf4406c8227cecce8e9ac1bdb97a Mon Sep 17 00:00:00 2001 From: Luca Sbardella Date: Mon, 9 Jul 2018 17:27:48 +0100 Subject: [PATCH 3/4] manager --- agiletoolkit/manager.py | 70 +++++++++++++++++++++++++++++++++++++++++ agiletoolkit/repo.py | 65 ++------------------------------------ 2 files changed, 73 insertions(+), 62 deletions(-) create mode 100644 agiletoolkit/manager.py diff --git a/agiletoolkit/manager.py b/agiletoolkit/manager.py new file mode 100644 index 0000000..f53e1ad --- /dev/null +++ b/agiletoolkit/manager.py @@ -0,0 +1,70 @@ +import os +import asyncio +from typing import Dict + +import yaml + +from jinja2 import Template + +from . import utils + + +NAMESPACES = { + 'local', 'development', 'dev', 'stage', 'prod', 'sandbox', 'production' +} + + +class Manager: + + def __init__(self, config=None, path=None, yes=False, namespace=None): + self.config = config or {} + self.path = path or os.getcwd() + self.deploy_path = os.path.join(self.path, 'deploy') + self.yes = yes + self.message_brokers = [] + self.namespace = namespace + self.init() + + def init(self): + pass + + def get(self, name: str, DataClass: type) -> object: + cfg = self.config.get(name) or {} + return DataClass(**cfg) + + def load_data(self, *paths: str) -> Dict: + filename = self.filename(*paths) + if not os.path.isfile(filename): + raise utils.CommandError('%s file missing' % filename) + with open(filename, 'r') as fp: + data = yaml.load(fp) or {} + data_namespace = data.pop(self.namespace, None) + for namespace in NAMESPACES: + data.pop(namespace, None) + if data_namespace: + data.update(data_namespace) + data['namespace'] = self.namespace + return data + + def manifest(self, values, *paths, filename=None): + """Load a manifest file and apply template values + """ + filename = filename or self.filename(*paths) + with open(filename, 'r') as fp: + template = Template(fp.read()) + return yaml.load(template.render(values)) + + def filename(self, *paths): + if not os.path.isdir(self.deploy_path): + raise utils.CommandError( + "Path '%s' not available" % self.deploy_path + ) + return os.path.join(self.deploy_path, *paths) + + def copy_env(self, *args, **kw): + env = os.environ.copy() + env.update(*args, **kw) + return env + + def wait(self, coro): + return asyncio.get_event_loop().run_until_complete(coro) diff --git a/agiletoolkit/repo.py b/agiletoolkit/repo.py index 6f1e9a8..3ffc6a3 100644 --- a/agiletoolkit/repo.py +++ b/agiletoolkit/repo.py @@ -5,41 +5,23 @@ from dataclasses import dataclass from urllib.parse import urlparse -import yaml - -from jinja2 import Template - +from .manager import Manager from .api import GithubApi, GithubException from .slack import SlackIntegration from . import utils -NAMESPACES = { - 'local', 'development', 'dev', 'stage', 'prod', 'sandbox', 'production' -} - - @dataclass class Branches: dev: str = 'master' stage: str = 'deploy' -class RepoManager: +class RepoManager(Manager): - def __init__(self, config=None, path=None, yes=False, namespace=None): - self.config = config or {} - self.path = path or os.getcwd() - self.deploy_path = os.path.join(self.path, 'deploy') - self.yes = yes - self.message_brokers = [] - self.namespace = namespace + def init(self): self.info = utils.gitrepo(self.path) SlackIntegration.add(self) - self.init() - - def init(self): - pass def software_version(self): """Software version @@ -141,44 +123,3 @@ def github_repo(self) -> str: bits = path.split('.') bits.pop() return self.github().repo('.'.join(bits)) - - def get(self, name: str, DataClass: type) -> object: - cfg = self.config.get(name) or {} - return DataClass(**cfg) - - def load_data(self, *paths: str) -> Dict: - filename = self.filename(*paths) - if not os.path.isfile(filename): - raise utils.CommandError('%s file missing' % filename) - with open(filename, 'r') as fp: - data = yaml.load(fp) or {} - data_namespace = data.pop(self.namespace, None) - for namespace in NAMESPACES: - data.pop(namespace, None) - if data_namespace: - data.update(data_namespace) - data['namespace'] = self.namespace - return data - - def manifest(self, values, *paths, filename=None): - """Load a manifest file and apply template values - """ - filename = filename or self.filename(*paths) - with open(filename, 'r') as fp: - template = Template(fp.read()) - return yaml.load(template.render(values)) - - def filename(self, *paths): - if not os.path.isdir(self.deploy_path): - raise utils.CommandError( - "Path '%s' not available" % self.deploy_path - ) - return os.path.join(self.deploy_path, *paths) - - def copy_env(self, *args, **kw): - env = os.environ.copy() - env.update(*args, **kw) - return env - - def wait(self, coro): - return asyncio.get_event_loop().run_until_complete(coro) From f2346924eac0ac2ead27e1835a2a8ecc9a8bf6d5 Mon Sep 17 00:00:00 2001 From: Luca Sbardella Date: Mon, 9 Jul 2018 17:39:30 +0100 Subject: [PATCH 4/4] flake8 --- agiletoolkit/repo.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/agiletoolkit/repo.py b/agiletoolkit/repo.py index 3ffc6a3..8956d3f 100644 --- a/agiletoolkit/repo.py +++ b/agiletoolkit/repo.py @@ -1,7 +1,5 @@ import os import re -import asyncio -from typing import Dict from dataclasses import dataclass from urllib.parse import urlparse