Exemplo n.º 1
0
 def _extract_packages(self, index: int, packages: Packages) -> Packages:
     """Extracting conda and pip packages"""
     log = self[index]
     extracted_packages = Packages()
     for package in packages:
         package_expression = re.compile(
             f"(({package.name})(=[a-z0-9_=.]+)?)")
         spec = package_expression.search(log).group(0)
         extracted_packages.append_spec(spec)
     return extracted_packages
Exemplo n.º 2
0
 def parse(cls, history_section: dict):
     """Parse the history file and create the packages."""
     packages_instance = cls()
     for source, packages in history_section.items():
         source_packages = Packages()
         for name, spec in packages.items():
             if spec == "*":
                 source_packages.append_spec(name)
             else:
                 source_packages.append(Package(name, spec))
         packages_instance.update_packages(packages=source_packages,
                                           source=source)
     return packages_instance
Exemplo n.º 3
0
def clean_specs(specs: ListLike, check_custom: bool = False) -> Packages:
    """Cleaning all package specs and converting to a package class.

    All package names for both pip and conda can be used with lowercase only. Conda automatically converts to lowercase.
    This allows our internal dictionaries that use package names as keys to be consistent with `conda list`.
    """
    cleaned = Packages()
    for spec in specs:
        if check_custom and "/" in spec:
            raise CondaEnvTrackerPackageNameError(
                f"Found illegal character in package name or spec: '{spec}'.\n"
                "Maybe you want to use --custom which requires package name and custom url, e.g.\n"
                f"'cet pip install package_name --custom package_url'"
            )
        cleaned.append_spec(spec.lower())
    return cleaned
Exemplo n.º 4
0
 def extract_r_packages(self, index: int) -> Optional[Packages]:
     """Extract R packages with versions (if the version was specified in the log)."""
     if self[index].startswith(R_COMMAND):
         r_packages = Packages()
         install_commands = self[index].split(";")[1:]
         for command in install_commands:
             start = command.index('"') + 1
             end = command.index('"', start)
             name = command[start:end]
             if "version" in command:
                 start = command.index('"', end + 1) + 1
                 end = command.index('"', start)
                 version = command[start:end]
                 r_packages.append_spec(f"{name}={version}")
             else:
                 r_packages.append_spec(name)
         return r_packages
     return None
Exemplo n.º 5
0
 def parse(cls, history_section: dict):
     """Parse the history file and create the packages."""
     packages_instance = cls()
     for source, packages in history_section.items():
         source_packages = Packages()
         for name, spec in packages.items():
             if spec == "*":
                 source_packages.append_spec(name)
             elif spec[0].isdigit() and all(
                     letter.isalnum() or letter in [".", "=", "_"]
                     for letter in spec):
                 source_packages.append_spec(name + cls.separators[source] +
                                             spec)
             else:
                 source_packages.append(Package(name, spec))
         packages_instance.update_packages(packages=source_packages,
                                           source=source)
     return packages_instance
Exemplo n.º 6
0
 def extract_r_packages(self, index: int) -> (Packages, list):
     """Get the package and date from an R action."""
     action = self[index]
     packages = Packages()
     dates = []
     install_commands = action.split(";")[1:]
     for command in install_commands:
         start = command.index('"') + 1
         end = command.index('"', start)
         name = command[start:end]
         start = command.index('"', end + 1) + 1
         end = command.index('"', start)
         version = command[start:end]
         packages.append_spec(f"{name}={version}")
         start = command.index('"', end + 1) + 1
         end = command.index('"', start)
         date = command[start:end]
         dates.append(date)
     return packages, dates