PK!carthorse/__init__.pyPK!:&Xcarthorse/actions.pyimport os from subprocess import check_call def run(command): print('$ '+command) check_call(command, shell=True) def create_tag(remote='origin'): tag = os.environ['TAG'] run('git tag '+tag) run('git push {} tag {}'.format(remote, tag)) PK!carthorse/cli.pyimport os from argparse import ArgumentParser from .config import load_config from . import version_from, when, actions def parse_args(): parser = ArgumentParser() parser.add_argument('--config', default='pyproject.toml') return parser.parse_args() def main(): args = parse_args() config = load_config(args.config) version = config.run(version_from, config['version-from']) tag_format = config.get('tag-format', 'v{version}') os.environ['TAG'] = tag_format.format(version=version) ok = True for check in config['when']: ok = config.run(when, check) if not ok: break if ok: for action in config['actions']: config.run(actions, action) PK!k@  carthorse/config.pyfrom functools import reduce from operator import __getitem__ from os.path import splitext from yaml import safe_load as parse_yaml from toml import load as parse_toml class Config(object): def __init__(self, path): with open(path) as source: data = self.parse(source) self.data = reduce(__getitem__, self.root_key, data) self.data['version-from'] = self.expand(self.data['version-from']) for name in 'when', 'actions': self.data[name] = [self.expand(item) for item in self.data[name]] def expand(self, item): if isinstance(item, str): return dict(name=item, args=(), kw={}) else: name = item.pop('name', None) if name is None: (name, arg), = item.items() else: arg = item if isinstance(arg, dict): kw = arg args = () else: kw = {} args = (arg,) return dict(name=name, args=args, kw=kw) def __getitem__(self, item): return self.data[item] def get(self, item, default): return self.data.get(item, default) def run(self, module, config): func = getattr(module, config['name'].replace('-', '_')) kw = config['kw'].copy() return func(*config['args'], **kw) class TomlConfig(Config): root_key = ['tool', 'carthorse'] def parse(self, source): return parse_toml(source) class YamlConfig(Config): root_key = ['carthorse'] def parse(self, source): return parse_yaml(source) parsers = { '.toml': TomlConfig, '.yml': YamlConfig, '.yaml': YamlConfig, } def load_config(path): class_ = parsers[splitext(path)[-1]] return class_(path) PK!~!KVcarthorse/version_from.pyimport toml def poetry(): with open('pyproject.toml') as source: data = toml.load(source) return data['tool']['poetry']['version'] PK!S~carthorse/when.pyimport os from subprocess import CalledProcessError, check_output def run(command): print('$ '+command) output = check_output(command, shell=True).decode('ascii').strip() if output: print(output) return output def version_not_tagged(remote='origin'): version = os.environ['TAG'] if run('git remote -v'): run("git fetch {} 'refs/tags/*:refs/tags/*'".format(remote)) try: run('git rev-parse --verify -q '+version) except CalledProcessError as e: if e.returncode == 1: print('No tag found.') return True raise else: return False def never(): pass PK!H^*0*carthorse-1.0.1.dist-info/entry_points.txtN+I/N.,()JN,*/*Ns2r3PK!HڽTUcarthorse-1.0.1.dist-info/WHEEL A н#Z;/"d&F[xzw@Zpy3Fv]\fi4WZ^EgM_-]#0(q7PK!H"2I"carthorse-1.0.1.dist-info/METADATAWko6_qX XʣÊͺ4M$銢("Z-T߹d;q7tsν_*/ eNfJ{UjJ4)4;0wu-m?s9WUOUfAVUJ:T B/]E'tLTbjrHno//Yz;pU':W)V;zcp>&Bl:RcLi\rc#qahtGV9= ^P4ҫc:h[kT>o9fae]3 '(C]?FUϵSj^wMvҝ|6r>;ҙj~M?W./94WO.dxuo+uxR43y^KCEq[k<O+J}_O!![;F{$]䦙Eg%vHR H\WjB)g3bsSUO۲/ՙΑ i[U AveUQzٸz^z~"lH\iiH\AQ򒤻;oL.xܚi5~+ؼ\$sckri%Z.<샧'btkٮ"R*JJPg >w3kc9g/_>ԣ8XS+Ӌ !\64l d q}{7edYvз$n:NfRq0Ҋč>$n0cS([J7LGa횿n)ę%k эH9@wn9µw`KETdh)S`SeNlC%*&Ѓ3ǥ7!MĖx~!\{gIL>뚠Z!X8xnVcA $-}umkW`Y6Bs\k+5˽eM5tR 8ʁ6G=T/1 zF5´5֚ -Ґh沫.Вs%< vS7xWrK=\n6HeTJ5 BrxQ=5ǫ[P'DD2 3TUP7^quo"NZTerDٱ?ぱCљwߑ7cl3n+z0>bFk~=4!s\AJîy45 P~dy2e.~4îNHL0b-"qp&٨Q$Kz%QH\^۹ًU*gش݌ p/c1{D/Ԍvv?ʼNBz