PKuEJ< tests/test_download.py# encoding: utf-8 from __future__ import absolute_import from copy import copy import unittest import os import subprocess from avython.download import Download class DownloadTest(unittest.TestCase): def setUp(self): self.base_dir = os.path.dirname(__file__) self.host_dir = os.path.join(self.base_dir, "runtests") self.tmp_dir = os.path.join(self.base_dir, "tmp") self.file = "example.html" self.file_zip = "example.zip" self.options = { 'method': "wget", 'host_path': self.host_dir, 'host_tmp_path': self.tmp_dir, 'remote_path': "https://s3-eu-west-1.amazonaws.com/cosas-varias/", 'remote_file': "example.zip", 'unzip': True, 'move_to_tmp': True, "noinput": True, } def test_wget_tmp_folder_unzip_move(self): down = Download(**self.options) down.get() self.host_file = os.path.join(self.host_dir, self.file) self.tmp_file = os.path.join(self.tmp_dir, self.file_zip) self.assertTrue(self.check_file(self.host_file)) self.assertTrue(self.check_file(self.tmp_file)) os.remove(self.host_file) os.remove(self.tmp_file) self.assertFalse(self.check_file(self.host_file)) self.assertFalse(self.check_file(self.tmp_file)) def test_wget_tmp_folder_move(self): options = copy(self.options) options['unzip'] = False down = Download(**options) down.get() self.host_file = os.path.join(self.host_dir, self.file_zip) self.tmp_file = os.path.join(self.tmp_dir, self.file_zip) self.assertTrue(self.check_file(self.host_file)) self.assertTrue(self.check_file(self.tmp_file)) os.remove(self.host_file) os.remove(self.tmp_file) self.assertFalse(self.check_file(self.host_file)) self.assertFalse(self.check_file(self.tmp_file)) def test_wget_min_fields(self): options = { 'remote_path': "https://s3-eu-west-1.amazonaws.com/cosas-varias/", 'remote_file': "example.zip", 'unzip': True, 'move_to_tmp': True, "noinput": True, } down = Download(**options) down.get() self.assertTrue(self.check_file(self.file)) os.remove(self.file) self.assertFalse(self.check_file(self.file)) def check_file(self, file): return os.path.isfile(file) def check_dir(self, dir): return os.path.isdir(dir) def remove_file(self, file): process = subprocess.Popen( "rm -r {} ".format(file), shell=True ) process.wait() if __name__ == '__main__': unittest.main() PKEJVVtests/test_gitautotag.py# encoding: utf-8 from __future__ import absolute_import from copy import copy import unittest import os import subprocess from avython.gitautotag import GitAutotag class GitAutotagTest(unittest.TestCase): def test_init(self): git = GitAutotag(['-v fake', '-f']) self.assertTrue(git.increase_or_create(), "fake0.0.0") PKEJtests/__init__.pyPKEJC߈4tests/tmp/__init__.py PKNTJC߈4tests/runtests/__init__.py PKEJjjavython/__init__.pyc Xc@sdS(N((((savython/__init__.pytsPKEJC߈4avython/__init__.py PKEJimavython/download/s3.pyc Xc@@s:ddlmZddlmZdefdYZdS(i(tabsolute_import(t BaseDrivertDrivercB@seZdZRS(saws s3 cp --recursive {} {}(t__name__t __module__tcommand_to_get(((s3/home/prometeo/cosas/avython/avython/download/s3.pyR sN(t __future__Rtavython.download.driverRR(((s3/home/prometeo/cosas/avython/avython/download/s3.pytsPKEJ.Davython/download/wget.py#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import from avython.download.driver import BaseDriver class Driver(BaseDriver): command_to_get = 'wget -t 3 {} -O {}' PKEJw$avython/download/s3.py#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import from avython.download.driver import BaseDriver class Driver(BaseDriver): command_to_get = 'aws s3 cp --recursive {} {}' PKEJeMmmavython/download/main.py#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function from importlib import import_module import datetime from distutils.dir_util import mkpath import shutil from pathlib import Path import logging import os import subprocess from avython.console import show_error, check_continue logging.basicConfig(filename='log.log', level=logging.DEBUG) log = logging.getLogger('avython') class Download(object): def __init__(self, * args, **kwargs): self.unzip = kwargs.get('unzip', True) self.move_to_tmp = kwargs.get('tmp', True) self.noinput = kwargs.get('noinput', True) self.force_download = kwargs.get('force_download', True) self.host_path = kwargs.get('host_path', os.path.join(str(Path().resolve()), "")) self.host_file = kwargs.get('host_file', "") self.host_tmp_path = kwargs.get('host_tmp_path', "/tmp/") self.host_tmp_file = kwargs.get('remote_file', "") self.remote_path = kwargs.get('remote_path', "") self.remote_file = kwargs.get('remote_file', "") method_module = 'avython.download.{}'.format(kwargs.get('method', "wget")) method = import_module(method_module) self._method = method.Driver() @property def host_path(self): self.check_emtpy(self.__host_path, "No host path") return self.__host_path @host_path.setter def host_path(self, value): self.__host_path = value @property def host_file(self): self.check_emtpy(self.__host_file, "No host file") return self.__host_file @host_file.setter def host_file(self, value): self.__host_file = value def get_host_tmp_path(self): self.check_emtpy(self.host_tmp_path, "No host path") return self.host_tmp_path def get_host_tmp_file(self): return self.host_tmp_file def get_remote_path(self): self.check_emtpy(self.remote_path, "No remote path") return self.remote_path def get_remote_file(self): return self.remote_file def check_emtpy(self, variable_to_check, error_msg): if not variable_to_check and not self.noinput: check_continue(error_msg) return True def check_directory_exist_and_create(self, folder): folder = (folder) if not os.path.isdir(folder): if not self.noinput: check_continue("The directory {} not exist".format(folder)) mkpath(folder) else: mkpath(folder) def get(self): local_route = os.path.join(self.host_path, self.host_file) log.debug("Local route {}".format(local_route)) local_tmp_route = os.path.join(self.get_host_tmp_path(), self.get_host_tmp_file()) log.debug("TMP route {}".format(local_tmp_route)) remote_route = self.get_remote_path() + self.get_remote_file() download_path = None tmp_unzip_folder = None result = False if local_tmp_route and self.move_to_tmp: if not os.path.isfile(local_tmp_route) or self.force_download: result = self._method.download(remote_route, local_tmp_route) else: result = True download_path = self.get_host_tmp_path() elif local_route and not self.move_to_tmp: if not os.path.isfile(local_route) or self.force_download: result = self._method.download(remote_route, local_route) else: result = True download_path = self.host_path if not result: show_error("Not exist:\n-{}\n-".format(local_route, local_tmp_route)) if self.unzip: tmp_unzip_folder = os.path.join(self.get_host_tmp_path(), datetime.datetime.now().strftime('%s'), "") self.check_directory_exist_and_create(tmp_unzip_folder) zip_folder = os.path.join(self.get_host_tmp_path(), self.get_host_tmp_file()) log.debug("unzip file {} to {}".format(zip_folder, tmp_unzip_folder)) print("unzip {}".format(zip_folder, self.get_host_tmp_file())) process = subprocess.Popen( "unzip {} -d {}".format(os.path.join(self.get_host_tmp_path(), self.get_host_tmp_file()), tmp_unzip_folder), shell=True ) process.wait() download_path = os.path.join(tmp_unzip_folder) """ At this point. we have our final folder in th """ if self.unzip or self.move_to_tmp: log.debug("copy file {} to {}".format(download_path, self.host_path)) process = subprocess.Popen("cp -R {}/* {}".format(download_path, self.host_path), shell=True) process.wait() if self.unzip: log.debug("remove file {}".format(download_path)) shutil.rmtree(download_path, ignore_errors=False, onerror=None) PKEJF avython/download/driver.pyc Xc@sddlmZmZddlZddlZddlZejdddejejdZ de fdYZ d e fd YZ dS( i(tABCMetatabstractmethodNtfilenameslog.logtleveltavythontAbstractDrivercBs#eZeZdZedZRS(cCsdS(N((tselft remote_dirt local_dir((savython/download/driver.pytdownloadsN(t__name__t __module__Rt __metaclass__tNonetcommand_to_getRR (((savython/download/driver.pyR st BaseDrivercBseZdZRS(cCstjdj|tj|jj||dtdtj}|jtjdj||t j j |pt j j |S(NsStart download {}...tshelltstdoutsFinish download {} to ( tlogtinfotformatt subprocesstPopenRtTruetPIPEtwaittostpathtisfiletisdir(RRRtprocess((savython/download/driver.pyR s  (R R R (((savython/download/driver.pyRs( tabcRRtloggingRRt basicConfigtDEBUGt getLoggerRtobjectRR(((savython/download/driver.pyts    PKEJNj?;;avython/download/main.pyc Xc@@sddlmZmZddlmZddlZddlmZddlZddl m Z ddl Z ddl Z ddl Z ddlmZmZe jddd e je jd Zd efd YZdS( i(tabsolute_importtprint_function(t import_moduleN(tmkpath(tPath(t show_errortcheck_continuetfilenameslog.logtleveltavythontDownloadcB@seZdZedZejdZedZejdZdZdZdZ dZ d Z d Z d Z RS( cO@s*|jdt|_|jdt|_|jdt|_|jdt|_|jdtjjt t j d|_ |jdd|_ |jdd |_|jd d|_|jd d|_|jd d|_d j|jd d}t|}|j|_dS(Ntunzipttmptnoinputtforce_downloadt host_pathtt host_filet host_tmp_paths/tmp/t remote_filet remote_pathsavython.download.{}tmethodtwget(tgettTrueR t move_to_tmpR RtostpathtjointstrRtresolveRRRt host_tmp_fileRRtformatRtDrivert_method(tselftargstkwargst method_moduleR((savython/download/main.pyt__init__s3 cC@s|j|jd|jS(Ns No host path(t check_emtpyt_Download__host_path(R#((savython/download/main.pyR'scC@s ||_dS(N(R)(R#tvalue((savython/download/main.pyR,scC@s|j|jd|jS(Ns No host file(R(t_Download__host_file(R#((savython/download/main.pyR0scC@s ||_dS(N(R+(R#R*((savython/download/main.pyR5scC@s|j|jd|jS(Ns No host path(R(R(R#((savython/download/main.pytget_host_tmp_path9scC@s|jS(N(R(R#((savython/download/main.pytget_host_tmp_file=scC@s|j|jd|jS(NsNo remote path(R(R(R#((savython/download/main.pytget_remote_path@scC@s|jS(N(R(R#((savython/download/main.pytget_remote_fileDscC@s"| r|j rt|ntS(N(R RR(R#tvariable_to_checkt error_msg((savython/download/main.pyR(Gs cC@sR|}tjj|sN|jsAtdj|t|qNt|ndS(NsThe directory {} not exist(RRtisdirR RR R(R#tfolder((savython/download/main.pyt check_directory_exist_and_createLs   c C@stjj|j|j}tjdj|tjj|j|j }tjdj||j |j }d}d}t }|r|jrtjj| s|jr|jj||}nt}|j}nV|r>|j r>tjj| s|jr,|jj||}nt}|j}n|s]tdj||n|jrTtjj|jtjjjdd}|j|tjj|j|j }tjdj||tdj||j tjdjtjj|j|j |d t}|jtjj|}n|jsf|jrtjd j||jtjd j||jd t}|j|jrtjd j|tj|d t ddqndS(NsLocal route {}s TMP route {}sNot exist: -{} -s%sRsunzip file {} to {}sunzip {}sunzip {} -d {}tshellscopy file {} to {}s cp -R {}/* {}sremove file {}t ignore_errorstonerror( RRRRRtlogtdebugR R,R-R.R/tNonetFalseRtisfileRR"tdownloadRRR tdatetimetnowtstrftimeR4tprintt subprocesstPopentwaittshutiltrmtree( R#t local_routetlocal_tmp_routet remote_routet download_pathttmp_unzip_foldertresultt zip_foldertprocess((savython/download/main.pyRUsL!  0 !-  $  (t__name__t __module__R'tpropertyRtsetterRR,R-R.R/R(R4R(((savython/download/main.pyR s       (t __future__RRt importlibRR>tdistutils.dir_utilRREtpathlibRtloggingRRBtavython.consoleRRt basicConfigtDEBUGt getLoggerR8tobjectR (((savython/download/main.pyts     PKEJlavython/download/wget.pyc Xc@@s:ddlmZddlmZdefdYZdS(i(tabsolute_import(t BaseDrivertDrivercB@seZdZRS(swget -t 3 {} -O {}(t__name__t __module__tcommand_to_get(((savython/download/wget.pyR sN(t __future__Rtavython.download.driverRR(((savython/download/wget.pytsPKEJAavython/download/__init__.pyc Xc@@s$ddlmZddlmZdS(i(tabsolute_import(tDownloadN(t __future__Rtavython.download.mainR(((savython/download/__init__.pytsPKEJQ,oSSavython/download/driver.py# -*- encoding: utf-8 -*- from abc import ABCMeta, abstractmethod import logging import os import subprocess logging.basicConfig(filename='log.log', level=logging.DEBUG) log = logging.getLogger('avython') class AbstractDriver(object): __metaclass__ = ABCMeta command_to_get = None @abstractmethod def download(self, remote_dir, local_dir): pass class BaseDriver(AbstractDriver): def download(self, remote_dir, local_dir): log.info("Start download {}...".format(remote_dir)) process = subprocess.Popen( self.command_to_get.format(remote_dir, local_dir), shell=True, stdout=subprocess.PIPE ) process.wait() log.info("Finish download {} to ".format(remote_dir, local_dir)) return os.path.isfile(local_dir) or os.path.isdir(local_dir) PKEJ>ddavython/download/__init__.py# encoding: utf-8 from __future__ import absolute_import from avython.download.main import DownloadPKEJ/0avython/download/__pycache__/main.cpython-34.pyc Xm@sddlmZmZddlmZddlZddlmZddlZddl m Z ddl Z ddl Z ddl Z ddlmZmZe jddd e je jd ZGd d d eZdS) )absolute_importprint_function) import_moduleN)mkpath)Path) show_errorcheck_continuefilenamezlog.loglevelZavythonc@seZdZddZeddZejddZeddZejddZd d Zd d Z d dZ ddZ ddZ ddZ ddZdS)DownloadcOs*|jdd|_|jdd|_|jdd|_|jdd|_|jdtjjtt j d|_ |jdd|_ |jd d |_ |jd d|_|jd d|_|jd d|_d j|jdd}t|}|j|_dS)NunzipTtmpnoinputforce_download host_path host_file host_tmp_pathz/tmp/ remote_file remote_pathzavython.download.{}methodwget)getr move_to_tmprrospathjoinstrrresolverrr host_tmp_filerrformatrZDriver_method)selfargskwargsZ method_modulerr%5/home/prometeo/cosas/avython/avython/download/main.py__init__s3 zDownload.__init__cCs|j|jd|jS)Nz No host path) check_emtpy_Download__host_path)r"r%r%r&r'szDownload.host_pathcCs ||_dS)N)r))r"valuer%r%r&r,scCs|j|jd|jS)Nz No host file)r(_Download__host_file)r"r%r%r&r0szDownload.host_filecCs ||_dS)N)r+)r"r*r%r%r&r5scCs|j|jd|jS)Nz No host path)r(r)r"r%r%r&get_host_tmp_path9szDownload.get_host_tmp_pathcCs|jS)N)r)r"r%r%r&get_host_tmp_file=szDownload.get_host_tmp_filecCs|j|jd|jS)NzNo remote path)r(r)r"r%r%r&get_remote_path@szDownload.get_remote_pathcCs|jS)N)r)r"r%r%r&get_remote_fileDszDownload.get_remote_filecCs"| r|j rt|ndS)NT)rr)r"Zvariable_to_checkZ error_msgr%r%r&r(Gs zDownload.check_emtpycCsR|}tjj|sN|jsAtdj|t|qNt|ndS)NzThe directory {} not exist)rrisdirrrr r)r"Zfolderr%r%r& check_directory_exist_and_createLs   z)Download.check_directory_exist_and_createc Cstjj|j|j}tjdj|tjj|j|j }tjdj||j |j }d}d}d}|r|j rtjj | s|jr|jj||}nd}|j}nV|r>|j r>tjj | s|jr,|jj||}nd}|j}n|s]tdj||n|jrTtjj|jtjjjdd}|j|tjj|j|j }tjdj||td j||j tjd jtjj|j|j |d d}|jtjj|}n|jsf|j rtjd j||jtjd j||jd d}|j|jrtjdj|tj|ddddqndS)NzLocal route {}z TMP route {}FTzNot exist: -{} -z%srzunzip file {} to {}zunzip {}zunzip {} -d {}shellzcopy file {} to {}z cp -R {}/* {}zremove file {} ignore_errorsonerror)rrrrrlogdebugr r,r-r.r/risfilerr!Zdownloadrr datetimenowstrftimer1print subprocessPopenwaitshutilrmtree) r"Z local_routeZlocal_tmp_routeZ remote_routeZ download_pathZtmp_unzip_folderresultZ zip_folderprocessr%r%r&rUsL!  0 !-  $  z Download.getN)__name__ __module__ __qualname__r'propertyrsetterrr,r-r.r/r(r1rr%r%r%r&r s        r ) __future__rr importlibrr8Zdistutils.dir_utilrr?Zpathlibrloggingrr<Zavython.consolerr basicConfigDEBUG getLoggerr5objectr r%r%r%r&s     PKEJ܏4avython/download/__pycache__/__init__.cpython-34.pyc Xd@s$ddlmZddlmZdS))absolute_import)DownloadN) __future__rZavython.download.mainrrr9/home/prometeo/cosas/avython/avython/download/__init__.pysPKEJ112avython/download/__pycache__/driver.cpython-34.pyc XS@sddlmZmZddlZddlZddlZejdddejejdZ Gddde Z Gd d d e Z dS) )ABCMetaabstractmethodNfilenamezlog.loglevelavythonc@s.eZdZeZdZeddZdS)AbstractDriverNcCsdS)N)self remote_dir local_dirrr7/home/prometeo/cosas/avython/avython/download/driver.pydownloadszAbstractDriver.download)__name__ __module__ __qualname__rZ __metaclass__command_to_getrr rrrr r s rc@seZdZddZdS) BaseDrivercCstjdj|tj|jj||dddtj}|jtjdj||tj j |ptj j |S)NzStart download {}...shellTstdoutzFinish download {} to ) loginfoformat subprocessPopenrPIPEwaitospathisfileisdir)r r r processrrr r s  zBaseDriver.downloadN)rrrr rrrr rs r) abcrrloggingrr basicConfigDEBUG getLoggerrobjectrrrrrr s    PKEJb0avython/download/__pycache__/wget.cpython-34.pyc X@s:ddlmZddlmZGdddeZdS))absolute_import) BaseDriverc@seZdZdZdS)Driverzwget -t 3 {} -O {}N)__name__ __module__ __qualname__Zcommand_to_getrr5/home/prometeo/cosas/avython/avython/download/wget.pyr s rN) __future__rZavython.download.driverrrrrrr sPKEJ(^0avython/console/main.py# -*- coding: utf-8 -*- from __future__ import print_function import sys class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' def warning_color(message): return bcolors.WARNING + message + bcolors.ENDC def error_color(message): return bcolors.FAIL + message + bcolors.ENDC def exit_with_error(): sys.exit(1) def show_error(message): print(error_color(message)) exit_with_error() def show_warning(message): print(warning_color(message)) def check_continue(message): continue_download = raw(show_warning(message + "\nDo you really want to continue ([y]/n)?")) print(continue_download) if continue_download.lower() != "y": exit_with_error() def raw(*args, **kwargs): if sys.version_info[0] < 3: input_text = str(raw_input("> ")) else: input_text = input("> ") return input_text PKEJ8ֽavython/console/main.pyc Xc@srddlmZddlZdd dYZdZdZdZdZd Zd Z d Z dS( i(tprint_functionNtbcolorscBs8eZdZdZdZdZdZdZdZdZ RS(ssssssss( t__name__t __module__tHEADERtOKBLUEtOKGREENtWARNINGtFAILtENDCtBOLDt UNDERLINE(((savython/console/main.pyRscCstj|tjS(N(RRR (tmessage((savython/console/main.pyt warning_colorscCstj|tjS(N(RRR (R ((savython/console/main.pyt error_colorscCstjddS(Ni(tsystexit(((savython/console/main.pytexit_with_errorscCstt|tdS(N(tprintRR(R ((savython/console/main.pyt show_errorscCstt|dS(N(RR (R ((savython/console/main.pyt show_warning"scCs@tt|d}t||jdkr<tndS(Ns( Do you really want to continue ([y]/n)?ty(trawRRtlowerR(R tcontinue_download((savython/console/main.pytcheck_continue&s cOs8tjddkr(ttd}n td}|S(Niis> (Rt version_infotstrt raw_inputtinput(targstkwargst input_text((savython/console/main.pyR,s (( t __future__RRRR RRRRRR(((savython/console/main.pyts       PKEJ ffavython/console/__init__.pyc Xc@@s<ddlmZddlmZmZmZmZmZdS(i(tabsolute_import(t warning_colort show_errort show_warningtcheck_continuetbcolorsN(t __future__Rtavython.console.mainRRRRR(((savython/console/__init__.pytsPKEJ{savython/console/__init__.py# encoding: utf-8 from __future__ import absolute_import from avython.console.main import warning_color, show_error, show_warning, check_continue, bcolors PKEJ/avython/console/__pycache__/main.cpython-34.pyc X@sddlmZddlZGdddZddZddZd d Zd d Zd dZddZ ddZ dS))print_functionNc@s@eZdZdZdZdZdZdZdZdZ dZ d S) bcolorszzzzzzzzN) __name__ __module__ __qualname__ZHEADERZOKBLUEZOKGREENWARNINGFAILENDCZBOLDZ UNDERLINEr r 4/home/prometeo/cosas/avython/avython/console/main.pyrs rcCstj|tjS)N)rrr )messager r r warning_colorsr cCstj|tjS)N)rrr )r r r r error_colorsrcCstjddS)N)sysexitr r r r exit_with_errorsrcCstt|tdS)N)printrr)r r r r show_errorsrcCstt|dS)N)rr )r r r r show_warning"srcCs@tt|d}t||jdkr<tndS)Nz( Do you really want to continue ([y]/n)?y)rawrrlowerr)r Zcontinue_downloadr r r check_continue&s rcOs8tjddkr(ttd}n td}|S)Nrz> )r version_infostr raw_inputinput)argskwargsZ input_textr r r r,s r) __future__rrrr rrrrrrr r r r s       PKEJ.z^^3avython/console/__pycache__/__init__.cpython-34.pyc X@s<ddlmZddlmZmZmZmZmZdS))absolute_import) warning_color show_error show_warningcheck_continuebcolorsN) __future__rZavython.console.mainrrrrrr r 8/home/prometeo/cosas/avython/avython/console/__init__.pysPKEJOك+avython/__pycache__/__init__.cpython-34.pyc X@sdS)Nrrr0/home/prometeo/cosas/avython/avython/__init__.pysPKTJ/Zavython/gitautotag/main.py#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import import subprocess import argparse import logging import sys logging.basicConfig(filename='log.log', level=logging.DEBUG) log = logging.getLogger('avython') class GitAutotag(object): __revision_list = ["mayor", "minor", "patch"] # other conf: ["pro", "pre", "dev"] __list_tags = False def __init__(self, args): parser = argparse.ArgumentParser(description='Autotag a git project ') parser.add_argument("-v", "--version", help="Version pattern to search") parser.add_argument("-d", "--directory", help="Set the directory to search changes") parser.add_argument("-r", "--revision", choices=self.__revision_list, help="Revision of release. Choices: {}".format(str(self.__revision_list))) parser.add_argument("-f", "--force", action='store_true', help="Create new release, no matters if not exist new changes") parser.add_argument("-p", "--push", action='store_true', help="Push the new tag to git") self.args = parser.parse_args(args) self.parse_commandline() def parse_commandline(self): self.version = self.args.version if self.args.version else "v" self.version_pattern = self.version + "*" self.directory = self.args.directory if self.args.directory else "./" self.revision = self.args.revision if self.args.revision else self.__revision_list[2] self.force = self.args.force self.__push = self.args.push def run(self, *args): log.debug("Run: git {}".format(str(args))) process = subprocess.Popen(('git', ) + args, stdout=subprocess.PIPE) result, err = process.communicate() if not err: return result return False def parse_result(self, result): if result and len(result) > 1: return result.split('\n')[:-1] return [] def run_parse(self, *args): return self.parse_result(self.run(*args)) def list_tags(self, cached=True): if not self.__list_tags or cached is False: self.__list_tags = self.run_parse('tag', '-l', self.version_pattern) return self.__list_tags def last_tag(self): return self.list_tags()[-1] if self.list_tags() else False def exist_changes(self): if self.last_tag(): return self.run_parse('log', '{}..HEAD'.format(self.last_tag()), '--oneline', self.directory) log.debug("GitAutotag.exist_changes: Not exist tags") def parse_version_to_list(self): if self.last_tag(): return self.last_tag().replace(self.version, "").split(".") return [] def create_first_version(self): return ["0" for _ in range(len(self.__revision_list))] def parse_version_to_str(self, version_list): return self.version + ".".join(version_list) def increase_version_number(self): if self.exist_changes() or self.force is True: version = self.parse_version_to_list() index_of_revision = self.__revision_list.index(self.revision) try: element_to_increase = int(version[index_of_revision]) except IndexError: pass else: element_to_increase += 1 version[index_of_revision] = str(element_to_increase) if index_of_revision < len(version) - 1: for indx, val in enumerate(version): if index_of_revision < indx: version[indx] = "0" return self.parse_version_to_str(version) return False def increase_or_create(self): version = self.increase_version_number() if not version and len(self.list_tags()) == 0: version = self.parse_version_to_str(self.create_first_version()) if version and version not in self.list_tags(): if self.__push: self.push(version) return version return False def push(self, version): self.run('tag', '-a', '{}'.format(version), '-m', 'Version {}'.format(version)) self.run('push', '--tags') if __name__ == '__main__': git = GitAutotag(sys.argv[1:]) print(git.increase_or_create()) PKmbJP avython/gitautotag/gitautotag.py#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import import subprocess import argparse import logging import sys logging.basicConfig(filename='log.log', level=logging.DEBUG) log = logging.getLogger('avython') class GitAutotag(object): __revision_list = ["mayor", "minor", "patch"] # other conf: ["pro", "pre", "dev"] __list_tags = False def __init__(self, args): parser = argparse.ArgumentParser(description='Autotag a git project ') parser.add_argument("-v", "--version", help="Version pattern to search") parser.add_argument("-d", "--directory", help="Set the directory to search changes") parser.add_argument("-r", "--revision", choices=self.__revision_list, help="Revision of release. Choices: {}".format(str(self.__revision_list))) parser.add_argument("-f", "--force", action='store_true', help="Create new release, no matters if not exist new changes") parser.add_argument("-p", "--push", action='store_true', help="Push the new tag to git") self.args = parser.parse_args(args) self.parse_commandline() def parse_commandline(self): self.version = self.args.version if self.args.version else "v" self.version_pattern = self.version + "*" self.directory = self.args.directory if self.args.directory else "./" self.revision = self.args.revision if self.args.revision else self.__revision_list[2] self.force = self.args.force self.__push = self.args.push def run(self, *args): log.debug("Run: git {}".format(str(args))) process = subprocess.Popen(('git', ) + args, stdout=subprocess.PIPE) result, err = process.communicate() if not err: return result return False def parse_result(self, result): if result and len(result) > 1: return result.decode('utf-8').split('\n')[:-1] return [] def run_parse(self, *args): return self.parse_result(self.run(*args)) def list_tags(self, cached=True): if not self.__list_tags or cached is False: self.__list_tags = self.run_parse('for-each-ref', 'refs/tags/' + self.version_pattern, '--sort=taggerdate', "--format=%(tag)") #self.__list_tags = self.run_parse('tag', '-l', self.version_pattern, '--sort=creatordate') return self.__list_tags def last_tag(self): return self.list_tags()[-1] if self.list_tags() else False def exist_changes(self): if self.last_tag(): return self.run_parse('log', '--oneline', '{}..HEAD'.format(self.last_tag()), '--', self.directory) log.debug("GitAutotag.exist_changes: Not exist tags") def parse_version_to_list(self): if self.last_tag(): return self.last_tag().replace(self.version, "").split(".") return [] def create_first_version(self): return ["0" for _ in range(len(self.__revision_list))] def parse_version_to_str(self, version_list): return self.version + ".".join(version_list) def increase_version_number(self): if self.exist_changes() or self.force is True: version = self.parse_version_to_list() index_of_revision = self.__revision_list.index(self.revision) try: element_to_increase = int(version[index_of_revision]) except IndexError: pass else: element_to_increase += 1 version[index_of_revision] = str(element_to_increase) if index_of_revision < len(version) - 1: for indx, val in enumerate(version): if index_of_revision < indx: version[indx] = "0" return self.parse_version_to_str(version) return False def increase_or_create(self): version = self.increase_version_number() if not version and len(self.list_tags()) == 0: version = self.parse_version_to_str(self.create_first_version()) if version and version not in self.list_tags(): if self.__push: self.push(version) return version return False def push(self, version): self.run('tag', '-a', '{}'.format(version), '-m', 'Version {}'.format(version)) self.run('push', '--tags') if __name__ == '__main__': git = GitAutotag(sys.argv[1:]) print(git.increase_or_create()) PKTJ}avython/gitautotag/main.pyc 8Xc@@sddlmZddlZddlZddlZddlZejdddejejdZ de fdYZ e d kre ej d ZejGHndS( i(tabsolute_importNtfilenameslog.logtleveltavythont GitAutotagcB@seZdddgZeZdZdZdZdZdZ e dZ d Z d Z d Zd Zd ZdZdZdZRS(tmayortminortpatchc C@stjdd}|jdddd|jdddd |jd d d |jdd jt|j|jdddddd|jdddddd|j||_|jdS(Nt descriptionsAutotag a git project s-vs --versionthelpsVersion pattern to searchs-ds --directorys#Set the directory to search changess-rs --revisiontchoicess Revision of release. Choices: {}s-fs--forcetactiont store_trues7Create new release, no matters if not exist new changess-ps--pushsPush the new tag to git( targparsetArgumentParsert add_argumentt_GitAutotag__revision_listtformattstrt parse_argstargstparse_commandline(tselfRtparser((savython/gitautotag/main.pyt__init__scC@s|jjr|jjnd|_|jd|_|jjrI|jjnd|_|jjrj|jjn |jd|_|jj|_|jj|_dS(Ntvt*s./i( Rtversiontversion_patternt directorytrevisionRtforcetpusht_GitAutotag__push(R((savython/gitautotag/main.pyRs !!(cG@sXtjdjt|tjd|dtj}|j\}}|sT|StS(Ns Run: git {}tgittstdout(sgit( tlogtdebugRRt subprocesstPopentPIPEt communicatetFalse(RRtprocesstresultterr((savython/gitautotag/main.pytrun,s cC@s-|r)t|dkr)|jdd SgS(Nis i(tlentsplit(RR,((savython/gitautotag/main.pyt parse_result4scG@s|j|j|S(N(R1R.(RR((savython/gitautotag/main.pyt run_parse9scC@s;|j s|tkr4|jdd|j|_n|jS(Nttags-l(t_GitAutotag__list_tagsR*R2R(Rtcached((savython/gitautotag/main.pyt list_tags<scC@s|jr|jdStS(Ni(R6R*(R((savython/gitautotag/main.pytlast_tagAscC@sE|jr4|jddj|jd|jStjddS(NR$s{}..HEADs --onelines(GitAutotag.exist_changes: Not exist tags(R7R2RRR$R%(R((savython/gitautotag/main.pyt exist_changesDs (cC@s2|jr.|jj|jdjdSgS(Ntt.(R7treplaceRR0(R((savython/gitautotag/main.pytparse_version_to_listIs "cC@s&gtt|jD] }d^qS(Nt0(trangeR/R(Rt_((savython/gitautotag/main.pytcreate_first_versionNscC@s|jdj|S(NR:(Rtjoin(Rt version_list((savython/gitautotag/main.pytparse_version_to_strQscC@s|js|jtkr|j}|jj|j}yt||}Wntk rcqX|d7}t |||<|t |dkrx6t |D]%\}}||krd||s    h PK4TJV99!avython/gitautotag/gitautotag.pyc 8Xc@@sddlmZddlZddlZddlZddlZejdddejejdZ de fdYZ e d kre ej d ZejGHndS( i(tabsolute_importNtfilenameslog.logtleveltavythont GitAutotagcB@seZdddgZeZdZdZdZdZdZ e dZ d Z d Z d Zd Zd ZdZdZdZRS(tmayortminortpatchc C@stjdd}|jdddd|jdddd |jd d d |jdd jt|j|jdddddd|jdddddd|j||_|jdS(Nt descriptionsAutotag a git project s-vs --versionthelpsVersion pattern to searchs-ds --directorys#Set the directory to search changess-rs --revisiontchoicess Revision of release. Choices: {}s-fs--forcetactiont store_trues7Create new release, no matters if not exist new changess-ps--pushsPush the new tag to git( targparsetArgumentParsert add_argumentt_GitAutotag__revision_listtformattstrt parse_argstargstparse_commandline(tselfRtparser((s avython/gitautotag/gitautotag.pyt__init__scC@s|jjr|jjnd|_|jd|_|jjrI|jjnd|_|jjrj|jjn |jd|_|jj|_|jj|_dS(Ntvt*s./i( Rtversiontversion_patternt directorytrevisionRtforcetpusht_GitAutotag__push(R((s avython/gitautotag/gitautotag.pyRs !!(cG@sXtjdjt|tjd|dtj}|j\}}|sT|StS(Ns Run: git {}tgittstdout(sgit( tlogtdebugRRt subprocesstPopentPIPEt communicatetFalse(RRtprocesstresultterr((s avython/gitautotag/gitautotag.pytrun,s cC@s-|r)t|dkr)|jdd SgS(Nis i(tlentsplit(RR,((s avython/gitautotag/gitautotag.pyt parse_result4scG@s|j|j|S(N(R1R.(RR((s avython/gitautotag/gitautotag.pyt run_parse9scC@s;|j s|tkr4|jdd|j|_n|jS(Nttags-l(t_GitAutotag__list_tagsR*R2R(Rtcached((s avython/gitautotag/gitautotag.pyt list_tags<scC@s|jr|jdStS(Ni(R6R*(R((s avython/gitautotag/gitautotag.pytlast_tagAscC@sE|jr4|jddj|jd|jStjddS(NR$s{}..HEADs --onelines(GitAutotag.exist_changes: Not exist tags(R7R2RRR$R%(R((s avython/gitautotag/gitautotag.pyt exist_changesDs (cC@s2|jr.|jj|jdjdSgS(Ntt.(R7treplaceRR0(R((s avython/gitautotag/gitautotag.pytparse_version_to_listIs "cC@s&gtt|jD] }d^qS(Nt0(trangeR/R(Rt_((s avython/gitautotag/gitautotag.pytcreate_first_versionNscC@s|jdj|S(NR:(Rtjoin(Rt version_list((s avython/gitautotag/gitautotag.pytparse_version_to_strQscC@s|js|jtkr|j}|jj|j}yt||}Wntk rcqX|d7}t |||<|t |dkrx6t |D]%\}}||krd||s    h PK4TJpavython/gitautotag/__init__.pyc LZXc@@s$ddlmZddlmZdS(i(tabsolute_import(t GitAutotagN(t __future__Rtavython.gitautotag.gitautotagR(((savython/gitautotag/__init__.pytsPKʨTJ2xooavython/gitautotag/__init__.py# encoding: utf-8 from __future__ import absolute_import from avython.gitautotag.gitautotag import GitAutotag PKTJd+4,2avython/gitautotag/__pycache__/main.cpython-34.pyc 8X@sddlmZddlZddlZddlZddlZejdddejejdZ Gddde Z e d kre ej d dZeejndS) )absolute_importNfilenamezlog.loglevelZavythonc@seZdZdddgZdZddZddZd d Zd d Zd dZ dddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"S)# GitAutotagZmayorminorZpatchFc Cstjdd}|jdddd|jdddd |jd d d |jdd jt|j|jdddddd|jdddddd|j||_|jdS)N descriptionzAutotag a git project z-vz --versionhelpzVersion pattern to searchz-dz --directoryz#Set the directory to search changesz-rz --revisionchoicesz Revision of release. Choices: {}z-fz--forceaction store_truez7Create new release, no matters if not exist new changesz-pz--pushzPush the new tag to git) argparseArgumentParser add_argument_GitAutotag__revision_listformatstr parse_argsargsparse_commandline)selfrparserr7/home/prometeo/cosas/avython/avython/gitautotag/main.py__init__szGitAutotag.__init__cCs|jjr|jjnd|_|jd|_|jjrI|jjnd|_|jjrj|jjn |jd|_|jj|_|jj|_dS)Nv*z./) rversionversion_pattern directoryrevisionrforcepush_GitAutotag__push)rrrrrs !!(zGitAutotag.parse_commandlinecGsXtjdjt|tjd|dtj}|j\}}|sT|SdS)Nz Run: git {}gitstdoutF)zgit)logdebugrr subprocessPopenPIPE communicate)rrprocessresulterrrrrrun,s zGitAutotag.runcCs3|r/t|dkr/|jdddSgS)N )lensplit)rr-rrr parse_result4szGitAutotag.parse_resultcGs|j|j|S)N)r5r/)rrrrr run_parse9szGitAutotag.run_parseTcCs;|j s|dkr4|jdd|j|_n|jS)NFtagz-l)_GitAutotag__list_tagsr6r)rcachedrrr list_tags<szGitAutotag.list_tagscCs|jr|jdSdS)Nr0Fr2)r:)rrrrlast_tagAszGitAutotag.last_tagcCsE|jr4|jddj|jd|jStjddS)Nr&z{}..HEADz --onelinez(GitAutotag.exist_changes: Not exist tags)r;r6rrr&r')rrrr exist_changesDs (zGitAutotag.exist_changescCs2|jr.|jj|jdjdSgS)N.)r;replacerr4)rrrrparse_version_to_listIs "z GitAutotag.parse_version_to_listcCs ddtt|jDS)NcSsg|] }dqS)0r).0_rrr Os z3GitAutotag.create_first_version..)ranger3r)rrrrcreate_first_versionNszGitAutotag.create_first_versioncCs|jdj|S)Nr>)rjoin)rZ version_listrrrparse_version_to_strQszGitAutotag.parse_version_to_strc Cs|js|jdkr|j}|jj|j}yt||}Wntk rdYqX|d7}t|||<|t |dkrx6t |D]%\}}||krd||s    h PK TJ/mv6avython/gitautotag/__pycache__/__init__.cpython-34.pyc LZXo@s$ddlmZddlmZdS))absolute_import) GitAutotagN) __future__rZavython.gitautotag.gitautotagrrr;/home/prometeo/cosas/avython/avython/gitautotag/__init__.pysPK TJ݀yW8avython/gitautotag/__pycache__/gitautotag.cpython-34.pyc 8X@sddlmZddlZddlZddlZddlZejdddejejdZ Gddde Z e d kre ej d dZeejndS) )absolute_importNfilenamezlog.loglevelZavythonc@seZdZdddgZdZddZddZd d Zd d Zd dZ dddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"S)# GitAutotagZmayorminorZpatchFc Cstjdd}|jdddd|jdddd |jd d d |jdd jt|j|jdddddd|jdddddd|j||_|jdS)N descriptionzAutotag a git project z-vz --versionhelpzVersion pattern to searchz-dz --directoryz#Set the directory to search changesz-rz --revisionchoicesz Revision of release. Choices: {}z-fz--forceaction store_truez7Create new release, no matters if not exist new changesz-pz--pushzPush the new tag to git) argparseArgumentParser add_argument_GitAutotag__revision_listformatstr parse_argsargsparse_commandline)selfrparserr=/home/prometeo/cosas/avython/avython/gitautotag/gitautotag.py__init__szGitAutotag.__init__cCs|jjr|jjnd|_|jd|_|jjrI|jjnd|_|jjrj|jjn |jd|_|jj|_|jj|_dS)Nv*z./) rversionversion_pattern directoryrevisionrforcepush_GitAutotag__push)rrrrrs !!(zGitAutotag.parse_commandlinecGsXtjdjt|tjd|dtj}|j\}}|sT|SdS)Nz Run: git {}gitstdoutF)zgit)logdebugrr subprocessPopenPIPE communicate)rrprocessresulterrrrrrun,s zGitAutotag.runcCs3|r/t|dkr/|jdddSgS)N )lensplit)rr-rrr parse_result4szGitAutotag.parse_resultcGs|j|j|S)N)r5r/)rrrrr run_parse9szGitAutotag.run_parseTcCs;|j s|dkr4|jdd|j|_n|jS)NFtagz-l)_GitAutotag__list_tagsr6r)rcachedrrr list_tags<szGitAutotag.list_tagscCs|jr|jdSdS)Nr0Fr2)r:)rrrrlast_tagAszGitAutotag.last_tagcCsE|jr4|jddj|jd|jStjddS)Nr&z{}..HEADz --onelinez(GitAutotag.exist_changes: Not exist tags)r;r6rrr&r')rrrr exist_changesDs (zGitAutotag.exist_changescCs2|jr.|jj|jdjdSgS)N.)r;replacerr4)rrrrparse_version_to_listIs "z GitAutotag.parse_version_to_listcCs ddtt|jDS)NcSsg|] }dqS)0r).0_rrr Os z3GitAutotag.create_first_version..)ranger3r)rrrrcreate_first_versionNszGitAutotag.create_first_versioncCs|jdj|S)Nr>)rjoin)rZ version_listrrrparse_version_to_strQszGitAutotag.parse_version_to_strc Cs|js|jdkr|j}|jj|j}yt||}Wntk rdYqX|d7}t|||<|t |dkrx6t |D]%\}}||krd||s    h PKTJ  "avython-0.0.4.data/scripts/main.py#!/home/prometeo/Envs/wayook/bin/python # -*- coding: utf-8 -*- from __future__ import absolute_import import subprocess import argparse import logging import sys logging.basicConfig(filename='log.log', level=logging.DEBUG) log = logging.getLogger('avython') class GitAutotag(object): __revision_list = ["mayor", "minor", "patch"] # other conf: ["pro", "pre", "dev"] __list_tags = False def __init__(self, args): parser = argparse.ArgumentParser(description='Autotag a git project ') parser.add_argument("-v", "--version", help="Version pattern to search") parser.add_argument("-d", "--directory", help="Set the directory to search changes") parser.add_argument("-r", "--revision", choices=self.__revision_list, help="Revision of release. Choices: {}".format(str(self.__revision_list))) parser.add_argument("-f", "--force", action='store_true', help="Create new release, no matters if not exist new changes") parser.add_argument("-p", "--push", action='store_true', help="Push the new tag to git") self.args = parser.parse_args(args) self.parse_commandline() def parse_commandline(self): self.version = self.args.version if self.args.version else "v" self.version_pattern = self.version + "*" self.directory = self.args.directory if self.args.directory else "./" self.revision = self.args.revision if self.args.revision else self.__revision_list[2] self.force = self.args.force self.__push = self.args.push def run(self, *args): log.debug("Run: git {}".format(str(args))) process = subprocess.Popen(('git', ) + args, stdout=subprocess.PIPE) result, err = process.communicate() if not err: return result return False def parse_result(self, result): if result and len(result) > 1: return result.split('\n')[:-1] return [] def run_parse(self, *args): return self.parse_result(self.run(*args)) def list_tags(self, cached=True): if not self.__list_tags or cached is False: self.__list_tags = self.run_parse('tag', '-l', self.version_pattern) return self.__list_tags def last_tag(self): return self.list_tags()[-1] if self.list_tags() else False def exist_changes(self): if self.last_tag(): return self.run_parse('log', '{}..HEAD'.format(self.last_tag()), '--oneline', self.directory) log.debug("GitAutotag.exist_changes: Not exist tags") def parse_version_to_list(self): if self.last_tag(): return self.last_tag().replace(self.version, "").split(".") return [] def create_first_version(self): return ["0" for _ in range(len(self.__revision_list))] def parse_version_to_str(self, version_list): return self.version + ".".join(version_list) def increase_version_number(self): if self.exist_changes() or self.force is True: version = self.parse_version_to_list() index_of_revision = self.__revision_list.index(self.revision) try: element_to_increase = int(version[index_of_revision]) except IndexError: pass else: element_to_increase += 1 version[index_of_revision] = str(element_to_increase) if index_of_revision < len(version) - 1: for indx, val in enumerate(version): if index_of_revision < indx: version[indx] = "0" return self.parse_version_to_str(version) return False def increase_or_create(self): version = self.increase_version_number() if not version and len(self.list_tags()) == 0: version = self.parse_version_to_str(self.create_first_version()) if version and version not in self.list_tags(): if self.__push: self.push(version) return version return False def push(self, version): self.run('tag', '-a', '{}'.format(version), '-m', 'Version {}'.format(version)) self.run('push', '--tags') if __name__ == '__main__': git = GitAutotag(sys.argv[1:]) print(git.increase_or_create()) PKbJ=(avython-0.0.4.data/scripts/gitautotag.py#!python # -*- coding: utf-8 -*- from __future__ import absolute_import import subprocess import argparse import logging import sys logging.basicConfig(filename='log.log', level=logging.DEBUG) log = logging.getLogger('avython') class GitAutotag(object): __revision_list = ["mayor", "minor", "patch"] # other conf: ["pro", "pre", "dev"] __list_tags = False def __init__(self, args): parser = argparse.ArgumentParser(description='Autotag a git project ') parser.add_argument("-v", "--version", help="Version pattern to search") parser.add_argument("-d", "--directory", help="Set the directory to search changes") parser.add_argument("-r", "--revision", choices=self.__revision_list, help="Revision of release. Choices: {}".format(str(self.__revision_list))) parser.add_argument("-f", "--force", action='store_true', help="Create new release, no matters if not exist new changes") parser.add_argument("-p", "--push", action='store_true', help="Push the new tag to git") self.args = parser.parse_args(args) self.parse_commandline() def parse_commandline(self): self.version = self.args.version if self.args.version else "v" self.version_pattern = self.version + "*" self.directory = self.args.directory if self.args.directory else "./" self.revision = self.args.revision if self.args.revision else self.__revision_list[2] self.force = self.args.force self.__push = self.args.push def run(self, *args): log.debug("Run: git {}".format(str(args))) process = subprocess.Popen(('git', ) + args, stdout=subprocess.PIPE) result, err = process.communicate() if not err: return result return False def parse_result(self, result): if result and len(result) > 1: return result.decode('utf-8').split('\n')[:-1] return [] def run_parse(self, *args): return self.parse_result(self.run(*args)) def list_tags(self, cached=True): if not self.__list_tags or cached is False: self.__list_tags = self.run_parse('for-each-ref', 'refs/tags/' + self.version_pattern, '--sort=taggerdate', "--format=%(tag)") #self.__list_tags = self.run_parse('tag', '-l', self.version_pattern, '--sort=creatordate') return self.__list_tags def last_tag(self): return self.list_tags()[-1] if self.list_tags() else False def exist_changes(self): if self.last_tag(): return self.run_parse('log', '--oneline', '{}..HEAD'.format(self.last_tag()), '--', self.directory) log.debug("GitAutotag.exist_changes: Not exist tags") def parse_version_to_list(self): if self.last_tag(): return self.last_tag().replace(self.version, "").split(".") return [] def create_first_version(self): return ["0" for _ in range(len(self.__revision_list))] def parse_version_to_str(self, version_list): return self.version + ".".join(version_list) def increase_version_number(self): if self.exist_changes() or self.force is True: version = self.parse_version_to_list() index_of_revision = self.__revision_list.index(self.revision) try: element_to_increase = int(version[index_of_revision]) except IndexError: pass else: element_to_increase += 1 version[index_of_revision] = str(element_to_increase) if index_of_revision < len(version) - 1: for indx, val in enumerate(version): if index_of_revision < indx: version[indx] = "0" return self.parse_version_to_str(version) return False def increase_or_create(self): version = self.increase_version_number() if not version and len(self.list_tags()) == 0: version = self.parse_version_to_str(self.create_first_version()) if version and version not in self.list_tags(): if self.__push: self.push(version) return version return False def push(self, version): self.run('tag', '-a', '{}'.format(version), '-m', 'Version {}'.format(version)) self.run('push', '--tags') if __name__ == '__main__': git = GitAutotag(sys.argv[1:]) print(git.increase_or_create()) PKbJo='avython-0.0.4.dist-info/DESCRIPTION.rst.. contents:: ======= AVython ======= Information =========== .. image:: https://badge.fury.io/py/avython.svg :target: https://badge.fury.io/py/avython .. image:: https://travis-ci.org/avara1986/avython.svg :target: https://travis-ci.org/avara1986/avython .. image:: https://coveralls.io/repos/github/avara1986/avython/badge.svg?branch=master :target: https://coveralls.io/github/avara1986/avython?branch=master .. image:: https://readthedocs.org/projects/avython/badge/?version=latest :target: http://avython.readthedocs.io/en/latest/?badge=latest .. image:: https://requires.io/github/avara1986/avython/requirements.svg?branch=master :target: https://requires.io/github/avara1986/avython/requirements/?branch=master .. image:: http://img.shields.io/:license-mit-blue.svg :target: http://doge.mit-license.org Resources to extend Python utils Installation ============ :: pip install avython Generate docs ============= :: sphinx-build -b html docs docs/_build Releases ======== 0.0.3 (2017-02-20) ------------------ * Published on pip 0.0.2 (2017-01-04) ------------------ * Added gitautotag 0.0.1 (2017-01-04) ------------------ * Initial version PKbJw4jj%avython-0.0.4.dist-info/metadata.json{"classifiers": ["Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Natural Language :: English", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3"], "extensions": {"python.details": {"contacts": [{"email": "a.vara.1986@gmail.com", "name": "Alberto Vara", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/avara1986/avython.git"}}}, "extras": [], "generator": "bdist_wheel (0.26.0)", "keywords": ["avython"], "license": "MIT", "metadata_version": "2.0", "name": "avython", "platform": "any", "run_requires": [{"requires": ["awscli", "pathlib"]}], "summary": "Common resources to extend python code", "version": "0.0.4"}PKbJrO%avython-0.0.4.dist-info/top_level.txtavython tests PKbJ''\\avython-0.0.4.dist-info/WHEELWheel-Version: 1.0 Generator: bdist_wheel (0.26.0) Root-Is-Purelib: true Tag: py2-none-any PKbJee avython-0.0.4.dist-info/METADATAMetadata-Version: 2.0 Name: avython Version: 0.0.4 Summary: Common resources to extend python code Home-page: https://github.com/avara1986/avython.git Author: Alberto Vara Author-email: a.vara.1986@gmail.com License: MIT Keywords: avython Platform: any Classifier: Development Status :: 4 - Beta Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: Natural Language :: English Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Requires-Dist: awscli Requires-Dist: pathlib .. contents:: ======= AVython ======= Information =========== .. image:: https://badge.fury.io/py/avython.svg :target: https://badge.fury.io/py/avython .. image:: https://travis-ci.org/avara1986/avython.svg :target: https://travis-ci.org/avara1986/avython .. image:: https://coveralls.io/repos/github/avara1986/avython/badge.svg?branch=master :target: https://coveralls.io/github/avara1986/avython?branch=master .. image:: https://readthedocs.org/projects/avython/badge/?version=latest :target: http://avython.readthedocs.io/en/latest/?badge=latest .. image:: https://requires.io/github/avara1986/avython/requirements.svg?branch=master :target: https://requires.io/github/avara1986/avython/requirements/?branch=master .. image:: http://img.shields.io/:license-mit-blue.svg :target: http://doge.mit-license.org Resources to extend Python utils Installation ============ :: pip install avython Generate docs ============= :: sphinx-build -b html docs docs/_build Releases ======== 0.0.3 (2017-02-20) ------------------ * Published on pip 0.0.2 (2017-01-04) ------------------ * Added gitautotag 0.0.1 (2017-01-04) ------------------ * Initial version PKbJ45avython-0.0.4.dist-info/RECORDavython/__init__.py,sha256=4W8VliAYUP1KY2gLJ_YDy2TmcXYVm-PY7XikQD_bFwA,2 avython/__init__.pyc,sha256=wNkLAmdZ_UjYrSw9F7Pmx5owelxb5Cdirb6qd-y5SeI,106 avython/__pycache__/__init__.cpython-34.pyc,sha256=c4mXGFsqW6a-xCnGw82-6go1IfNU3fyxOUlZn0voiNk,131 avython/console/__init__.py,sha256=pIRL40tFn9iJEfYmnzj425JRnXr2DbOsRfgaObIW1mQ,156 avython/console/__init__.pyc,sha256=tiAdi3OUqjSuKymBeD1KmtZ7UBPlWVWZP6IETuVR8fg,358 avython/console/main.py,sha256=J1vSmF8AO0wg4N0Zu4aTeim-401IBIjSLwaps6zj-o0,1012 avython/console/main.pyc,sha256=ay9asFdFaJHgyu8Ub-HVxkBifoVjqZzQAi2Vb-vYKso,1981 avython/console/__pycache__/__init__.cpython-34.pyc,sha256=B_o-7KyOPvxumG7uqS6AJwEMpq6JjbbIbFw8DfcuFTE,350 avython/console/__pycache__/main.cpython-34.pyc,sha256=GoKdp7hBNz7P0RWQuROe3sGvQvcFXP8O_v3TPkNWaO0,1729 avython/download/__init__.py,sha256=QYnVrrCvlZ30TKlMH7PWXoI0w330bdkwfVnjBkGPkB0,100 avython/download/__init__.pyc,sha256=8lKQ85epzq28UKvXHBSIpOtlEfL7rkfW88Nv1N6c540,248 avython/download/driver.py,sha256=IIO1sBdcTDpdiPAxdxxyo-5VQpVJKNtMt1yL6CHZD8c,851 avython/download/driver.pyc,sha256=zu5m7r2yPe64MaASvMcFJ_M3p2rcweUv2XPJcu-daAY,1458 avython/download/main.py,sha256=hZKPTbqgvYXMpnyuWF0y5QLETcllKPgSJTk2vdDuscw,4973 avython/download/main.pyc,sha256=0k53tjxFBQwK8WpSkVuGnBv1-cOHOBli0LpMA0zwa1g,5179 avython/download/s3.py,sha256=GU-P9lBtnNnrc5WlP2oaGLUlzTK0tkyrktZfAQ4w6vg,213 avython/download/s3.pyc,sha256=qTN0b5OuSTtf2z0FiA34uuSsyn5iAX9-J6T7IYGMa2s,527 avython/download/wget.py,sha256=XjoLjON6uGKjdv0bMQMGtShOrq2rInW2xeQVDRiVXjk,204 avython/download/wget.pyc,sha256=1TfydX-YLsu33Ock1ln_tKBLh4k-ykXDMC7ABJa9Ns0,464 avython/download/__pycache__/__init__.cpython-34.pyc,sha256=6fACmpnYwpMpCuvEdhaSbFUus8WkhCSC_1ThgxKu1Pg,252 avython/download/__pycache__/driver.cpython-34.pyc,sha256=wPnR43Mqiejbq6dm9sWQScevyB_r3g-7T_R5CVqjtfk,1329 avython/download/__pycache__/main.cpython-34.pyc,sha256=roSQ0VtJOqdMAmUQsuK893iPmjk7wyPunr0xavY_U4g,4764 avython/download/__pycache__/wget.cpython-34.pyc,sha256=TlO6kJt2t1hqGhfUuNeuzhVhBxjde1qKdrYVReydPAM,455 avython/gitautotag/__init__.py,sha256=oogrbYvd-J6Niv9rHU6Cua91-a54fF24TmmqQ4IdEJk,111 avython/gitautotag/__init__.pyc,sha256=SygfdsHi5RlwzI8fYd2Jdqxl7J9deCvLOsoLcg2JYcE,260 avython/gitautotag/gitautotag.py,sha256=RWe-F4IHNQV6Lb1vqmvdNGRmg3YtOVPAYiogWEnG_3w,4530 avython/gitautotag/gitautotag.pyc,sha256=grslwGaZr9HwTnAbGRMDKK0Ex1RrDmrkUHXjmLgYdRg,5433 avython/gitautotag/main.py,sha256=u7QANLQzdC0rvfemrbePgxpGs_yKxmvmjr6hHVvbtuI,4345 avython/gitautotag/main.pyc,sha256=X2lLG4bYzz_BngytlCRxtDMBWhihFOXv17VmKzZ5sGk,5337 avython/gitautotag/__pycache__/__init__.cpython-34.pyc,sha256=N-TdW38tNVBZX1Dr-SNMSjajakla2umb3-ItCfg5fjE,264 avython/gitautotag/__pycache__/gitautotag.cpython-34.pyc,sha256=ZZOx3_16P8ml-vCkL6yi7umnQVZZQNXyzQbFPeoUflQ,5115 avython/gitautotag/__pycache__/main.cpython-34.pyc,sha256=l-MSfLw-bz1fSpsYIBRGNfUzeoTC6v91cO0XfhVQmcw,5109 avython-0.0.4.data/scripts/gitautotag.py,sha256=NYN2kZP-Fpte-GvwymaLxRtglw4pwFiyHFjQ0-qp2gY,4517 avython-0.0.4.data/scripts/main.py,sha256=dlwnjrQY0S8eyMzX9E0W82pE2wJp5fzdLNvDM8QH9QQ,4363 avython-0.0.4.dist-info/DESCRIPTION.rst,sha256=JEoS9-NPOdXxKiNtqfc-6BiTPJ1pw0fs_RINC2PFjwQ,1195 avython-0.0.4.dist-info/METADATA,sha256=mJQnVVgBmsFLGubZXTuRFDiPlT972YivDNXdry2fnyc,1893 avython-0.0.4.dist-info/RECORD,, avython-0.0.4.dist-info/WHEEL,sha256=JTb7YztR8fkPg6aSjc571Q4eiVHCwmUDlX8PhuuqIIE,92 avython-0.0.4.dist-info/metadata.json,sha256=mA01QswriIc7hUjX3T--bhAJQ7emvJF8odP9ZGcA9Y4,874 avython-0.0.4.dist-info/top_level.txt,sha256=KlGOCzdWYiUQZ7_ryFx1SKqW4soFurWTMFvEMdaAMYE,14 tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 tests/test_download.py,sha256=ogihWouuB6R_dDYJihdxN3_tvD5J9uXt-zq-B-Ms7ys,2781 tests/test_gitautotag.py,sha256=rt2i3jgNz7dSDfw3nayhF6olD10GWHd9p8-RQPkc2pU,342 tests/runtests/__init__.py,sha256=4W8VliAYUP1KY2gLJ_YDy2TmcXYVm-PY7XikQD_bFwA,2 tests/tmp/__init__.py,sha256=4W8VliAYUP1KY2gLJ_YDy2TmcXYVm-PY7XikQD_bFwA,2 PKuEJ< tests/test_download.pyPKEJVV tests/test_gitautotag.pyPKEJ tests/__init__.pyPKEJC߈4 tests/tmp/__init__.pyPKNTJC߈4 tests/runtests/__init__.pyPKEJjj; avython/__init__.pycPKEJC߈4 avython/__init__.pyPKEJim avython/download/s3.pycPKEJ.DNavython/download/wget.pyPKEJw$Pavython/download/s3.pyPKEJeMmmYavython/download/main.pyPKEJF %avython/download/driver.pycPKEJNj?;;+avython/download/main.pycPKEJlY@avython/download/wget.pycPKEJA`Bavython/download/__init__.pycPKEJQ,oSSCavython/download/driver.pyPKEJ>ddGavython/download/__init__.pyPKEJ/0Gavython/download/__pycache__/main.cpython-34.pycPKEJ܏4Zavython/download/__pycache__/__init__.cpython-34.pycPKEJ112[avython/download/__pycache__/driver.cpython-34.pycPKEJb0uaavython/download/__pycache__/wget.cpython-34.pycPKEJ(^0cavython/console/main.pyPKEJ8ֽgavython/console/main.pycPKEJ ffoavython/console/__init__.pycPKEJ{sFqavython/console/__init__.pyPKEJ/ravython/console/__pycache__/main.cpython-34.pycPKEJ.z^^3)yavython/console/__pycache__/__init__.cpython-34.pycPKEJOك+zavython/__pycache__/__init__.cpython-34.pycPKTJ/Z{avython/gitautotag/main.pyPKmbJP Ռavython/gitautotag/gitautotag.pyPKTJ}Şavython/gitautotag/main.pycPK4TJV99!׳avython/gitautotag/gitautotag.pycPK4TJpOavython/gitautotag/__init__.pycPKʨTJ2xooavython/gitautotag/__init__.pyPKTJd+4,2;avython/gitautotag/__pycache__/main.cpython-34.pycPK TJ/mv6avython/gitautotag/__pycache__/__init__.cpython-34.pycPK TJ݀yW8avython/gitautotag/__pycache__/gitautotag.cpython-34.pycPKTJ  "-avython-0.0.4.data/scripts/main.pyPKbJ=(xavython-0.0.4.data/scripts/gitautotag.pyPKbJo='cavython-0.0.4.dist-info/DESCRIPTION.rstPKbJw4jj%Savython-0.0.4.dist-info/metadata.jsonPKbJrO%!avython-0.0.4.dist-info/top_level.txtPKbJ''\\Q!avython-0.0.4.dist-info/WHEELPKbJee !avython-0.0.4.dist-info/METADATAPKbJ45)avython-0.0.4.dist-info/RECORDPK-- T9