pylorax.api package — Lorax 28.14.21 documentation

# pylorax.api package

## Submodules

## pylorax.api.cmdline module

`pylorax.api.cmdline.` `lorax_composer_parser`()

  Return the ArgumentParser for lorax-composer

## pylorax.api.compose module

## pylorax.api.config module

class `pylorax.api.config.` `ComposerConfig`(*args, **kwargs)

  Bases: `configparser.SafeConfigParser`

  `get_default`(section, option, default)

`pylorax.api.config.` `configure`(conf_file='/etc/lorax/composer.conf', root_dir='/', test_config=False)

  lorax-composer configuration

  Parameters: | conf_file (str) – Path to the config file overriding the default settings root_dir (str) – Directory to prepend to paths, defaults to / test_config (bool) – Set to True to skip reading conf_file

`pylorax.api.config.` `make_dnf_dirs`(conf)

  Make any missing dnf directories

  Parameters: | conf (ComposerConfig) – The configuration to use
  Returns: | None

`pylorax.api.config.` `make_queue_dirs`(conf, gid)

  Make any missing queue directories

  Parameters: | conf (ComposerConfig) – The configuration to use gid (int) – Group ID that has access to the queue directories
  Returns: | list of errors
  Return type: | list of str

## pylorax.api.crossdomain module

`pylorax.api.crossdomain.` `crossdomain`(origin, methods=None, headers=None, max_age=21600, attach_to_all=True, automatic_options=True)

## pylorax.api.dnfbase module

## pylorax.api.projects module

exception `pylorax.api.projects.` `ProjectsError`

  Bases: `Exception`

`pylorax.api.projects.` `api_changelog`(changelog)

  Convert the changelog to a string

  Parameters: | changelog (tuple) – A list of time, author, string tuples.
  Returns: | The most recent changelog text or “”
  Return type: | str

  This returns only the most recent changelog entry.

`pylorax.api.projects.` `api_time`(t)

  Convert time since epoch to a string

  Parameters: | t (int) – Seconds since epoch
  Returns: | Time string
  Return type: | str

`pylorax.api.projects.` `delete_repo_source`(source_glob, source_name)

  Delete a source from a repo file

  Parameters: | source_glob (str) – A glob of the repo sources to search
  Returns: | None
  Raises: | ProjectsError if there was a problem

  A repo file may have multiple sources in it, delete only the selected source. If it is the last one in the file, delete the file.

  WARNING: This will delete ANY source, the caller needs to ensure that a system source_name isn’t passed to it.

`pylorax.api.projects.` `dep_evra`(dep)

  Return the epoch:version-release.arch for the dep

  Parameters: | dep (dict) – dependency dict
  Returns: | epoch:version-release.arch
  Return type: | str

`pylorax.api.projects.` `dep_nevra`(dep)

  Return the name-epoch:version-release.arch

`pylorax.api.projects.` `dnf_repo_to_file_repo`(repo)

  Return a string representation of a DNF Repo object suitable for writing to a .repo file

  Parameters: | repo (dnf.RepoDict) – DNF Repository
  Returns: | A string
  Return type: | str

  The DNF Repo.dump() function does not produce a string that can be used as a dnf .repo file, it ouputs baseurl and gpgkey as python lists which DNF cannot read. So do this manually with only the attributes we care about.

`pylorax.api.projects.` `estimate_size`(packages, block_size=6144)

  Estimate the installed size of a package list

  Parameters: | packages (list of hawkey.Package objects) – The packages to be installed block_size (int) – The block size to use for rounding up file sizes.
  Returns: | The estimated size of installed packages
  Return type: | int

  Estimating actual requirements is difficult without the actual file sizes, which dnf doesn’t provide access to. So use the file count and block size to estimate a minimum size for each package.

`pylorax.api.projects.` `get_repo_sources`(source_glob)

  Return a list of sources from a directory of yum repositories

  Parameters: | source_glob (str) – A glob to use to match the source files, including full path
  Returns: | A list of the source ids in all of the matching files
  Return type: | list of str

`pylorax.api.projects.` `get_source_ids`(source_path)

  Return a list of the source ids in a file

  Parameters: | source_path (str) – Full path and filename of the source (yum repo) file
  Returns: | A list of source id strings
  Return type: | list of str

`pylorax.api.projects.` `modules_info`(dbo, module_names)

  Return details about a module, including dependencies

  Parameters: | dbo (dnf.Base) – dnf base object module_names (str) – Names of the modules to get info about
  Returns: | List of dicts with module details and dependencies.
  Return type: | list of dicts

`pylorax.api.projects.` `modules_list`(dbo, module_names)

  Return a list of modules

  Parameters: | dbo (dnf.Base) – dnf base object offset – Number of modules to skip limit (int) – Maximum number of modules to return
  Returns: | List of module information and total count
  Return type: | tuple of a list of dicts and an Int

  Modules don’t exist in RHEL7 so this only returns projects and sets the type to “rpm”

`pylorax.api.projects.` `pkg_to_build`(pkg)

  Extract the build details from a hawkey.Package object

  Parameters: | pkg (hawkey.Package) – hawkey.Package object with package details
  Returns: | A dict with the build details, epoch, release, arch, build_time, changelog, …
  Return type: | dict

  metadata entries are hard-coded to {}

  Note that this only returns the build dict, it does not include the name, description, etc.

`pylorax.api.projects.` `pkg_to_dep`(pkg)

  Extract the info from a hawkey.Package object

  Parameters: | pkg (hawkey.Package) – A hawkey.Package object
  Returns: | A dict with name, epoch, version, release, arch
  Return type: | dict

`pylorax.api.projects.` `pkg_to_project`(pkg)

  Extract the details from a hawkey.Package object

  Parameters: | pkgs (hawkey.Package) – hawkey.Package object with package details
  Returns: | A dict with the name, summary, description, and url.
  Return type: | dict

  upstream_vcs is hard-coded to UPSTREAM_VCS

`pylorax.api.projects.` `pkg_to_project_info`(pkg)

  Extract the details from a hawkey.Package object

  Parameters: | pkg (hawkey.Package) – hawkey.Package object with package details
  Returns: | A dict with the project details, as well as epoch, release, arch, build_time, changelog, …
  Return type: | dict

  metadata entries are hard-coded to {}

`pylorax.api.projects.` `proj_to_module`(proj)

  Extract the name from a project_info dict

  Parameters: | pkg (dict) – dict with package details
  Returns: | A dict with name, and group_type
  Return type: | dict

  group_type is hard-coded to “rpm”

`pylorax.api.projects.` `projects_depsolve`(dbo, projects, groups)

  Return the dependencies for a list of projects

  Parameters: | dbo (dnf.Base) – dnf base object projects (List of Strings) – The projects to find the dependencies for groups (List of str) – The groups to include in dependency solving
  Returns: | NEVRA’s of the project and its dependencies
  Return type: | list of dicts
  Raises: | ProjectsError if there was a problem installing something

`pylorax.api.projects.` `projects_depsolve_with_size`(dbo, projects, groups, with_core=True)

  Return the dependencies and installed size for a list of projects

  Parameters: | dbo (dnf.Base) – dnf base object project_names (List of Strings) – The projects to find the dependencies for groups (List of str) – The groups to include in dependency solving
  Returns: | installed size and a list of NEVRA’s of the project and its dependencies
  Return type: | tuple of (int, list of dicts)
  Raises: | ProjectsError if there was a problem installing something

`pylorax.api.projects.` `projects_info`(dbo, project_names)

  Return details about specific projects

  Parameters: | dbo (dnf.Base) – dnf base object project_names (str) – List of names of projects to get info about
  Returns: | List of project info dicts with pkg_to_project as well as epoch, version, release, etc.
  Return type: | list of dicts

  If project_names is None it will return the full list of available packages

`pylorax.api.projects.` `projects_list`(dbo)

  Return a list of projects

  Parameters: | dbo (dnf.Base) – dnf base object
  Returns: | List of project info dicts with name, summary, description, homepage, upstream_vcs
  Return type: | list of dicts

`pylorax.api.projects.` `repo_to_source`(repo, system_source)

  Return a Weldr Source dict created from the DNF Repository

  Parameters: | repo (dnf.RepoDict) – DNF Repository system_source (bool) – True if this source is an immutable system source
  Returns: | A dict with Weldr Source fields filled in
  Return type: | dict

  Example:

      {
        "check_gpg": true,
        "check_ssl": true,
        "gpgkey_url": [
          "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"
        ],
        "name": "fedora",
        "proxy": "http://proxy.brianlane.com:8123",
        "system": true
        "type": "yum-metalink",
        "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"
      }

`pylorax.api.projects.` `source_to_repo`(source, dnf_conf)

  Return a dnf Repo object created from a source dict

  Parameters: | source (dict) – A Weldr source dict
  Returns: | A dnf Repo object
  Return type: | dnf.Repo

  Example:

      {
        "check_gpg": True,
        "check_ssl": True,
        "gpgkey_urls": [
          "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"
        ],
        "name": "fedora",
        "proxy": "http://proxy.brianlane.com:8123",
        "system": True
        "type": "yum-metalink",
        "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"
      }

## pylorax.api.queue module

## pylorax.api.recipes module

class `pylorax.api.recipes.` `CommitDetails`(commit, timestamp, message, revision=None)

  Bases: `pylorax.base.DataHolder`

exception `pylorax.api.recipes.` `CommitTimeValError`

  Bases: `Exception`

class `pylorax.api.recipes.` `Recipe`(name, description, version, modules, packages, groups, customizations=None)

  Bases: `dict`

  A Recipe of package and modules

  This is a subclass of dict that enforces the constructor arguments and adds a .filename property to return the recipe’s filename, and a .toml() function to return the recipe as a TOML string.

  `bump_version`(old_version=None)

    semver recipe version number bump

    Parameters: | old_version (str) – An optional old version number
    Returns: | The new version number or None
    Return type: | str
    Raises: | ValueError

    If neither have a version, 0.0.1 is returned If there is no old version the new version is checked and returned If there is no new version, but there is a old one, bump its patch level If the old and new versions are the same, bump the patch level If they are different, check and return the new version

  `filename`

    Return the Recipe’s filename

    Replaces spaces in the name with ‘-‘ and appends .toml

  `freeze`(deps)

    Return a new Recipe with full module and package NEVRA

    Parameters: | deps (list() – A list of dependency NEVRA to use to fill in the modules and packages
    Returns: | A new Recipe object
    Return type: | Recipe

  `group_names`

    Return the names of the groups. Groups do not have versions.

  `module_names`

    Return the names of the modules

  `module_nver`

    Return the names and version globs of the modules

  `package_names`

    Return the names of the packages

  `package_nver`

    Return the names and version globs of the packages

  `toml`()

    Return the Recipe in TOML format

exception `pylorax.api.recipes.` `RecipeError`

  Bases: `Exception`

exception `pylorax.api.recipes.` `RecipeFileError`

  Bases: `Exception`

class `pylorax.api.recipes.` `RecipeGroup`(name)

  Bases: `dict`

class `pylorax.api.recipes.` `RecipeModule`(name, version)

  Bases: `dict`

class `pylorax.api.recipes.` `RecipePackage`(name, version)

  Bases: `pylorax.api.recipes.RecipeModule`

`pylorax.api.recipes.` `commit_recipe`(repo, branch, recipe)

  Commit a recipe to a branch

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe (Recipe) – Recipe to commit
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `commit_recipe_directory`(repo, branch, directory)

  Commit all *.toml files from a directory, if they aren’t already in git.

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name directory (str) – The directory of *.toml recipes to commit
  Returns: | None
  Raises: | Can raise errors from Ggit or RecipeFileError

  Files with Toml or RecipeFileErrors will be skipped, and the remainder will be tried.

`pylorax.api.recipes.` `commit_recipe_file`(repo, branch, filename)

  Commit a recipe file to a branch

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – Path to the recipe file to commit
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit or RecipeFileError

`pylorax.api.recipes.` `delete_file`(repo, branch, filename)

  Delete a file from a branch.

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – filename to delete
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `delete_recipe`(repo, branch, recipe_name)

  Delete a recipe from a branch.

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – Recipe name to delete
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `diff_items`(title, old_items, new_items)

  Return the differences between two lists of dicts.

  Parameters: | title (str) – Title of the entry old_items (list(dict)) – List of item dicts with “name” field new_items (list(dict)) – List of item dicts with “name” field
  Returns: | List of diff dicts with old/new entries
  Return type: | list(dict)

`pylorax.api.recipes.` `find_commit_tag`(repo, branch, filename, commit_id)

  Find the tag that matches the commit_id

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – filename to revert commit_id (Git.OId) – The commit id to check
  Returns: | The tag or None if there isn’t one
  Return type: | str or None

  There should be only 1 tag pointing to a commit, but there may not be a tag at all.

  The tag will look like: ‘refs/tags/<branch>/<filename>/r<revision>’

`pylorax.api.recipes.` `find_name`(name, lst)

  Find the dict matching the name in a list and return it.

  Parameters: | name (str) – Name to search for lst – List of dict’s with “name” field
  Returns: | First dict with matching name, or None
  Return type: | dict or None

`pylorax.api.recipes.` `get_commit_details`(commit, revision=None)

  Return the details about a specific commit.

  Parameters: | commit (Git.Commit) – The commit to get details from revision (int) – Optional commit revision
  Returns: | Details about the commit
  Return type: | CommitDetails
  Raises: | CommitTimeValError or Ggit exceptions

`pylorax.api.recipes.` `get_revision_from_tag`(tag)

  Return the revision number from a tag

  Parameters: | tag (str) – The tag to exract the revision from
  Returns: | The integer revision or None
  Return type: | int or None

  The revision is the part after the r in ‘branch/filename/rXXX’

`pylorax.api.recipes.` `gfile`(path)

  Convert a string path to GFile for use with Git

`pylorax.api.recipes.` `head_commit`(repo, branch)

  Get the branch’s HEAD Commit Object

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name
  Returns: | Branch’s head commit
  Return type: | Git.Commit
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `is_commit_tag`(repo, commit_id, tag)

  Check to see if a tag points to a specific commit.

  Parameters: | repo (Git.Repository) – Open repository commit_id (Git.OId) – The commit id to check tag (str) – The tag to check
  Returns: | True if the tag points to the commit, False otherwise
  Return type: | bool

`pylorax.api.recipes.` `is_parent_diff`(repo, filename, tree, parent)

  Check to see if the commit is different from its parents

  Parameters: | repo (Git.Repository) – Open repository filename (str) – filename to revert tree (Git.Tree) – The commit’s tree parent (Git.Commit) – The commit’s parent commit
  Retuns: | True if filename in the commit is different from its parents
  Return type: | bool

`pylorax.api.recipes.` `list_branch_files`(repo, branch)

  Return a sorted list of the files on the branch HEAD

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name
  Returns: | A sorted list of the filenames
  Return type: | list(str)
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `list_commit_files`(repo, commit)

  Return a sorted list of the files on a commit

  Parameters: | repo (Git.Repository) – Open repository commit (str) – The commit hash to list
  Returns: | A sorted list of the filenames
  Return type: | list(str)
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `list_commits`(repo, branch, filename, limit=0)

  List the commit history of a file on a branch.

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – filename to revert limit (int) – Number of commits to return (0=all)
  Returns: | A list of commit details
  Return type: | list(CommitDetails)
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `open_or_create_repo`(path)

  Open an existing repo, or create a new one

  Parameters: | path (string) – path to recipe directory
  Returns: | A repository object
  Return type: | Git.Repository
  Raises: | Can raise errors from Ggit

  A bare git repo will be created in the git directory of the specified path. If a repo already exists it will be opened and returned instead of creating a new one.

`pylorax.api.recipes.` `prepare_commit`(repo, branch, builder)

  Prepare for a commit

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name builder (TreeBuilder) – instance of TreeBuilder
  Returns: | (Tree, Sig, Ref)
  Return type: | tuple
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `read_commit`(repo, branch, filename, commit=None)

  Return the contents of a file on a specific branch or commit.

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – filename to read commit (str) – Optional commit hash
  Returns: | The commit id, and the contents of the commit
  Return type: | tuple(str, str)
  Raises: | Can raise errors from Ggit

  If no commit is passed the master:filename is returned, otherwise it will be commit:filename

`pylorax.api.recipes.` `read_commit_spec`(repo, spec)

  Return the raw content of the blob specified by the spec

  Parameters: | repo (Git.Repository) – Open repository spec (str) – Git revparse spec
  Returns: | Contents of the commit
  Return type: | str
  Raises: | Can raise errors from Ggit

  eg. To read the README file from master the spec is “master:README”

`pylorax.api.recipes.` `read_recipe_and_id`(repo, branch, recipe_name, commit=None)

  Read a recipe commit and its id from git

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – Recipe name to read commit (str) – Optional commit hash
  Returns: | The commit id, and a Recipe object
  Return type: | tuple(str, Recipe)
  Raises: | Can raise errors from Ggit

  If no commit is passed the master:filename is returned, otherwise it will be commit:filename

`pylorax.api.recipes.` `read_recipe_commit`(repo, branch, recipe_name, commit=None)

  Read a recipe commit from git and return a Recipe object

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – Recipe name to read commit (str) – Optional commit hash
  Returns: | A Recipe object
  Return type: | Recipe
  Raises: | Can raise errors from Ggit

  If no commit is passed the master:filename is returned, otherwise it will be commit:filename

`pylorax.api.recipes.` `recipe_diff`(old_recipe, new_recipe)

  Diff two versions of a recipe

  Parameters: | old_recipe (Recipe) – The old version of the recipe new_recipe (Recipe) – The new version of the recipe
  Returns: | A list of diff dict entries with old/new
  Return type: | list(dict)

`pylorax.api.recipes.` `recipe_filename`(name)

  Return the toml filename for a recipe

  Replaces spaces with ‘-‘ and appends ‘.toml’

`pylorax.api.recipes.` `recipe_from_dict`(recipe_dict)

  Create a Recipe object from a plain dict.

  Parameters: | recipe_dict (dict) – A plain dict of the recipe
  Returns: | A Recipe object
  Return type: | Recipe
  Raises: | RecipeError

`pylorax.api.recipes.` `recipe_from_file`(recipe_path)

  Return a recipe file as a Recipe object

  Parameters: | recipe_path (str) – Path to the recipe fila
  Returns: | A Recipe object
  Return type: | Recipe

`pylorax.api.recipes.` `recipe_from_toml`(recipe_str)

  Create a Recipe object from a toml string.

  Parameters: | recipe_str (str) – The Recipe TOML string
  Returns: | A Recipe object
  Return type: | Recipe
  Raises: | TomlError

`pylorax.api.recipes.` `revert_file`(repo, branch, filename, commit)

  Revert the contents of a file to that of a previous commit

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – filename to revert commit (str) – Commit hash
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `revert_recipe`(repo, branch, recipe_name, commit)

  Revert the contents of a recipe to that of a previous commit

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – Recipe name to revert commit (str) – Commit hash
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

`pylorax.api.recipes.` `tag_file_commit`(repo, branch, filename)

  Tag a file’s most recent commit

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – Filename to tag
  Returns: | Tag id or None if it failed.
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

  This uses git tags, of the form refs/tags/<branch>/<filename>/r<revision> Only the most recent recipe commit can be tagged to prevent out of order tagging. Revisions start at 1 and increment for each new commit that is tagged. If the commit has already been tagged it will return false.

`pylorax.api.recipes.` `tag_recipe_commit`(repo, branch, recipe_name)

  Tag a file’s most recent commit

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – Recipe name to tag
  Returns: | Tag id or None if it failed.
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

  Uses tag_file_commit()

`pylorax.api.recipes.` `write_commit`(repo, branch, filename, message, content)

  Make a new commit to a repository’s branch

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name filename (str) – full path of the file to add message (str) – The commit message content (str) – The data to write
  Returns: | OId of the new commit
  Return type: | Git.OId
  Raises: | Can raise errors from Ggit

## pylorax.api.server module

## pylorax.api.v0 module

## pylorax.api.workspace module

`pylorax.api.workspace.` `workspace_delete`(repo, branch, recipe_name)

  Delete the recipe from the workspace

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – The name of the recipe
  Returns: | None
  Raises: | IO related errors

`pylorax.api.workspace.` `workspace_dir`(repo, branch)

  Create the workspace’s path from a Repository and branch

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name
  Returns: | The path to the branch’s workspace directory
  Return type: | str

`pylorax.api.workspace.` `workspace_read`(repo, branch, recipe_name)

  Read a Recipe from the branch’s workspace

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe_name (str) – The name of the recipe
  Returns: | The workspace copy of the recipe, or None if it doesn’t exist
  Return type: | Recipe or None
  Raises: | RecipeFileError

`pylorax.api.workspace.` `workspace_write`(repo, branch, recipe)

  Write a recipe to the workspace

  Parameters: | repo (Git.Repository) – Open repository branch (str) – Branch name recipe (Recipe) – The recipe to write to the workspace
  Returns: | None
  Raises: | IO related errors

## Module contents

`pylorax.api.` `crossdomain`(origin, methods=None, headers=None, max_age=21600, attach_to_all=True, automatic_options=True)