Ejemplo n.º 1
0
 def _pkgfile_in_requirements(pkgfile: str, requirements):
     pkgname = get_package_name_from_file(pkgfile)
     return any([
         DependencyResolver.clean_requirement_name(
             pkgname.lower()) == DependencyResolver.clean_requirement_name(
                 req.lower()) for req in requirements
     ])
Ejemplo n.º 2
0
    def _install_from_file(self,
                           target_package_file: str,
                           scope: Scope,
                           upgrade: bool = False):
        name = get_package_name_from_file(target_package_file)
        version = get_package_version_from_file(target_package_file)

        resolver = DependencyResolver(self.list(), name)
        if resolver.requirement_met(upgrade, version):
            serverversion = resolver.get_target_server_version()
            print(messages.no_upgrade(name, serverversion, version))
            return

        # Download requirements from PyPI
        with tempfile.TemporaryDirectory() as temporary_directory:
            pipdownloader = PipDownloader(self._connection_info,
                                          temporary_directory,
                                          target_package_file)

            # For now, we download all target package dependencies from PyPI.
            target_package_requirements, requirements_downloaded = pipdownloader.download(
            )

            # Resolve which package dependencies need to be installed or upgraded on server.
            required_installs = resolver.get_required_installs(
                target_package_requirements)
            dependencies_to_install = self._get_required_files_to_install(
                requirements_downloaded, required_installs)

            self._install_many(target_package_file, dependencies_to_install,
                               scope)
Ejemplo n.º 3
0
    def _install_single(self,
                        sqlexecutor: SQLQueryExecutor,
                        package_file: str,
                        scope: Scope,
                        is_target=False,
                        out_file: str = None):
        name = str(get_package_name_from_file(package_file))
        version = str(get_package_version_from_file(package_file))
        print("Installing {name} version: {version}".format(name=name,
                                                            version=version))

        with tempfile.TemporaryDirectory() as temporary_directory:
            prezip = os.path.join(temporary_directory, name + "PREZIP.zip")
            with zipfile.ZipFile(prezip, 'w') as zipf:
                zipf.write(package_file, os.path.basename(package_file))

            builder = CreateLibraryBuilder(pkg_name=name,
                                           pkg_filename=prezip,
                                           scope=scope,
                                           language_name=self._language_name)
            sqlexecutor.execute(builder, out_file=out_file)

            builder = CheckLibraryBuilder(pkg_name=name,
                                          scope=scope,
                                          language_name=self._language_name)
            sqlexecutor.execute(builder, out_file=out_file)
Ejemplo n.º 4
0
    def _install_many(self,
                      target_package_file: str,
                      dependency_files,
                      scope: Scope,
                      out_file: str = None):
        target_name = get_package_name_from_file(target_package_file)

        with SQLQueryExecutor(connection=self._connection_info) as sqlexecutor:
            sqlexecutor._cnxn.autocommit = False
            try:
                print("Installing dependencies...")
                for pkgfile in dependency_files:
                    self._install_single(sqlexecutor,
                                         pkgfile,
                                         scope,
                                         out_file=out_file)

                print("Done with dependencies, installing main package...")
                self._install_single(sqlexecutor,
                                     target_package_file,
                                     scope,
                                     True,
                                     out_file=out_file)
                sqlexecutor._cnxn.commit()
            except Exception as e:
                sqlexecutor._cnxn.rollback()
                raise RuntimeError(
                    "Package installation failed, installed dependencies were rolled back."
                ) from e
Ejemplo n.º 5
0
    def _install_single(sqlexecutor: SQLQueryExecutor, package_file: str, scope: Scope, is_target=False):
        name = get_package_name_from_file(package_file)
        version = get_package_version_from_file(package_file)

        with tempfile.TemporaryDirectory() as temporary_directory:
            prezip = os.path.join(temporary_directory, name + "PREZIP.zip")
            with zipfile.ZipFile(prezip, 'w') as zipf:
                zipf.write(package_file, os.path.basename(package_file))

            builder = CreateLibraryBuilder(pkg_name=name, pkg_filename=prezip, scope=scope)
            sqlexecutor.execute(builder)
Ejemplo n.º 6
0
    def _install_many(self, target_package_file: str, dependency_files, scope: Scope):
        target_name = get_package_name_from_file(target_package_file)

        with SQLQueryExecutor(connection=self._connection_info) as sqlexecutor:
            transaction = SQLTransaction(sqlexecutor, clean_library_name(target_name) + "InstallTransaction")
            transaction.begin()
            try:
                for pkgfile in dependency_files:
                    self._install_single(sqlexecutor, pkgfile, scope)
                self._install_single(sqlexecutor, target_package_file, scope, True)
                transaction.commit()
            except Exception:
                transaction.rollback()
                raise RuntimeError("Package installation failed, installed dependencies were rolled back.")