Exemple #1
0
 def set_version(self):
     self.versions = []
     bad_version_tags = []
     for v in sorted(
             self.repo('tag --merged').decode('utf-8').splitlines()):
         try:
             self.versions.append(Version(v))
         except:
             bad_version_tags.append(v)
     if bad_version_tags:
         log.warning(f"package {self.link} has invalid version tags:")
         for v in bad_version_tags:
             print(' ', v)
         log.info('you can fix this issue using: \n'
                  '  git push --delete origin tagName\n'
                  '  git tag -d tagName')
     # get version
     versions = sorted(self.specifier.filter(self.versions))
     if not versions:
         raise VersionFilterError(
             f"pkg {self.link} with specifiers {self.specifier} "
             f"has no valid version from its versions list: {self.versions}"
         )
     self.version = versions[-1]
     self.repo(f'checkout tags/{self.version.__str__()}')
    def create_package_file(self):
        if os.path.exists(self.pkg):
            log.warning("package.py already exist and may be used for other functionality")
        else:
            key, token = encrypt(
                url=self.git.url,
                email=self.git.email,
                username=self.git.username,
                password=self.git.password,
                pypi_user=self.pypi_user,
                pypi_pass=self.pypi_pass,
            )
            upload = "\n        lambda: manager.upload()," if self.pypi_user and self.pypi_pass else ""
            with open(self.pkg, 'w') as f:
                f.write(f'''from qaviton_package_manager import Manager, decypt


manager = Manager(**decypt(
    key={key},
    token={token},
))


if __name__ == "__main__":
    manager.run(
        lambda: manager.update(),
        lambda: manager.update_test(),
        lambda: manager.test(),
        lambda: manager.build(),{upload}
    )
'''                     )
        log.info('created package.py file')
 def handle_git_ignore(self):
     if not os.path.exists(self.git_ignore):
         log.warning("missing .gitignore file")
         print('creating .gitignore file')
         with open(self.git_ignore, 'w') as f:
             f.write('\n'.join(ignore_list))
         self.git.add('"'+self.git_ignore+'"')
     else:
         with open(self.git_ignore) as f:
             lines = f.read().splitlines()
         with open(self.git_ignore, 'a') as f:
             f.write('\n'+'\n'.join([line for line in ignore_list if line not in lines]))
     log.info('added content to .gitignore file')
 def get_readme(self):
     readme = self.root + os.sep + SETTINGS.README
     if not os.path.exists(readme):
         log.warning(f'{SETTINGS.README} not found\nP.S. you can change the default readme filename with qaviton_package_manager.conf.SETTINGS.README = "filename"')
         name = prompt(f'select README filename({SETTINGS.README} default):')
         if not name: name = SETTINGS.README
         else: SETTINGS.README = name
         readme = self.root + os.sep + name
         if not os.path.exists(readme):
             print(f'creating file: {readme}')
             with open(readme, 'w') as f:
                 f.write(self.package_name.replace('_', ' '))
             self.git.add('"'+readme+'"')
     return readme
    def __init__(self, git: Git, pypi_user, pypi_pass, package_name=None):
        log.info("creating git packaging system")
        log.info("press q to quit")

        if package_name is None:
            self.package_name = git.root.rsplit(os.sep, 1)[1]
            log.warning('package name not specified, selecting dir name:', self.package_name)
        else:
            self.package_name = package_name

        Prep.__init__(self, git, self.package_name)

        self.pypi_user = pypi_user
        self.pypi_pass = pypi_pass
        self.git_ignore = self.root + os.sep + SETTINGS.GIT_IGNORE
        self.pkg = self.root + os.sep + SETTINGS.PACKAGE
        self.run()
    def get_license(self):
        license = self.root + os.sep + SETTINGS.LICENSE
        key = None
        if not os.path.exists(license):
            log.warning(f'{SETTINGS.LICENSE} not found\nP.S. you can change the default license filename with qaviton_package_manager.conf.SETTINGS.LICENSE = "filename"')
            name = prompt(f'select LICENSE filename({SETTINGS.LICENSE} default):')
            if not name: name = SETTINGS.LICENSE
            else: SETTINGS.LICENSE = name
            license = self.root + os.sep + name
            if not os.path.exists(license):
                key = select_license()
                print(f'creating file: {license}')
                if key != "private":
                    http = HTTP.get()
                    r = http.get(f'https://api.github.com/licenses/{key}')
                    r.raise_for_status()
                    content = r.json()['body']
                else:
                    date = datetime.utcnow()
                    if not SETTINGS.COMPANY: SETTINGS.COMPANY = self.git.username
                    if not SETTINGS.OWNER: SETTINGS.OWNER = self.git.username
                    if not SETTINGS.EMAIL: SETTINGS.EMAIL = self.git.email

                    company_name = prompt(f"enter your company name({SETTINGS.COMPANY} default):")
                    full_name = prompt(f"enter legal owner full name({SETTINGS.OWNER} default):")
                    email = prompt(f"enter legal owner's email({SETTINGS.EMAIL} default):")

                    if not company_name: company_name = SETTINGS.COMPANY
                    else: SETTINGS.COMPANY = company_name

                    if not full_name: full_name = SETTINGS.OWNER
                    else: SETTINGS.OWNER = full_name

                    if not email: email = SETTINGS.EMAIL
                    else: SETTINGS.EMAIL = email

                    content = (f"Copyright © {company_name} Systems, Inc - All Rights Reserved\n"
                               "Unauthorized copying of this file\directory & all its contents,\n"
                               "via any medium is strictly prohibited\n"
                               "Proprietary and confidential\n"
                               f"Written by {full_name} <{email}>, {date.strftime('%B')} {date.year}\n")
                with open(license, 'w') as f:
                    f.write(content)
                self.git.add('"'+license+'"')
        return {'file': license, 'key': key}
def main():
    from os.path import exists
    from os import getcwd, sep
    root = getcwd()
    pkg = root + sep + 'package.py'
    if exists(pkg):
        from qaviton_helpers import import_path
        try:
            manager = import_path(pkg).manager
        except Exception as e:
            from qaviton_package_manager.utils.logger import log
            log.warning(e)
            log.info(f"could not retrieve 'manager' parameter from {pkg}")
            log.info("creating a new manager")
        else:
            return manager.run()
    from qaviton_package_manager.manager import Manager
    return Manager().run()
Exemple #8
0
 def get_pkg_init(self):
     if not os.path.exists(self.pkg_path):
         log.warning(f"direcotory: {self.pkg_path} is missing")
         print("creating package...")
         os.mkdir(self.pkg_path)
         open(self.pkg_init, 'w').close()
         self.git.add('"' + self.pkg_init + '"')
         init = b''
     elif not os.path.exists(self.pkg_init):
         log.warning(f"file: {self.pkg_init} is missing")
         print("creating package init file...")
         open(self.pkg_init, 'w').close()
         self.git.add('"' + self.pkg_init + '"')
         init = b''
     else:
         with open(self.pkg_init, 'rb') as f:
             init = f.read()
     return init
    def run(self):
        log.info("asserting package __init__.py file")
        init_content = self.get_pkg_init()

        log.info("asserting package LICENSE")
        license = self.get_license()

        log.info("asserting package README")
        readme = self.get_readme()

        log.info("asserting package requirements")
        requirements = self.set_requirements()

        log.info("asserting package testing requirements")
        self.set_test_requirements()

        if os.path.exists(self.setup_path):
            log.warning("setup.py already exist")
        else:
            package_params = self.handle_package_init(init_content, license)
            self.create_setup_file(readme, requirements, package_params)
        self.create_package_file()
        self.handle_git_ignore()
        self.handle_venv()
    def handle_package_init(self, init_content: bytes, license: dict):
        package_params = {}

        tmp = b'\n' + init_content
        if b'\n__author__' not in tmp:
            log.warning(f'missing __author__ in init file')
            package_params['author'] = b'"' + escape(self.git.username).encode('utf-8') + b'"'
        else:
            package_params['author'] = tmp.split(b'\n__author__', 1)[1].split(b'=', 1)[1].split(b'\n', 1)[0].strip()

        if b'\n__version__' not in tmp:
            log.warning(f'missing __version__ in init file')
            package_params['version'] = b'"0.0.1"'
        else:
            package_params['version'] = tmp.split(b'\n__version__', 1)[1].split(b'=', 1)[1].split(b'\n', 1)[0].strip()

        if b'\n__author_email__' not in tmp:
            log.warning(f'missing __author_email__ in init file')
            package_params['email'] = b'"' + escape(self.git.email).encode('utf-8') + b'"'
        else:
            package_params['email'] = tmp.split(b'\n__author_email__', 1)[1].split(b'=', 1)[1].split(b'\n', 1)[0].strip()

        if b'\n__description__' not in tmp:
            description = self.package_name.replace('_', ' ')
            log.warning(f'missing __description__ in init file')
            package_params['description'] = b'"' + description.encode('utf-8') + b'"'
        else:
            package_params['description'] = tmp.split(b'\n__description__', 1)[1].split(b'=', 1)[1].split(b'\n', 1)[0].strip()

        if b'\n__url__' not in tmp:
            log.warning(f'missing __url__ in init file')
            package_params['url'] = b'"' + escape(self.git.url.replace('.git', '')).encode('utf-8') + b'"'
        else:
            package_params['url'] = tmp.split(b'\n__url__', 1)[1].split(b'=', 1)[1].split(b'\n', 1)[0].strip()

        if b'\n__license__' not in tmp:
            if license["key"] is None:
                license["key"] = select_license()
            log.warning(f'missing __license__ in init file')
            package_params['license'] = b'"' + license["key"].encode('utf-8') + b'"'
        else:
            package_params['license'] = tmp.split(b'\n__license__', 1)[1].split(b'=', 1)[1].split(b'\n', 1)[0].strip()
        return package_params