storage

base module

Base Storage

BaseStorage define all methods needed by storages. All storage must be inherited from BaseStorage and implement the following methods

  • delete_package
  • delete_release
  • create_package
  • create_release
  • get_files
  • get_file

Storages classes handle all packages and releases operation outside of the SQL database, this include storage of packages sources, listing of files, removing deleted packages, etc.

class extrapypi.storage.base.BaseStorage(**kwargs)

Bases: object

Base class for storage drivers, should be inherited by all sub-classes

In the constructor, kwargs are used to pass settings to the driver. By default it will set an attribute for each item in kwargs

NAME = None
create_package(package)

Must create a new location for a package

Parameters:package (models.Package) – new package that need an emplacement
Returns:True if creation successful, else return False
Return type:bool
create_release(package, release_file)

Must copy release_file to the correct location

Note

release_file will be a werkzeug.datastructures.FileStorage object

Parameters:
  • package (models.Package) – package for the release
  • release_file (FileStorage) – release file to save
delete_package(package)

Must delete an entire package

Parameters:package (models.Package) – package to delete
Returns:True if deletion is successful or False
Return type:bool
delete_release(package, version)

Must delete all files of a package version

Parameters:
  • models.Package – package to delete
  • version (str) – version to delete
Returns:

True if deletion is successful or False

Return type:

bool

get_file(package, file, release=None)

Must return a given file

Returned value will be directly send to Flask.send_file in most cases, be sure that return format is compatible with this function

Parameters:
  • package (models.Package) – package objet
  • file (str) – file name to find
get_files(package, release=None)

Must return all files for a given package / release

Parameters:
  • package (models.Package) – package object for which we want files
  • release (models.Release) – for filter files returned based on release
Returns:

list of all avaible files for this package or None if an error append

Return type:

list

get_releases_metadata()

Must return an iterable of tuples containing name of the package and release metadata

Returns:list of all distributions contained in storage
Return type:iterable

local module

LocalStorage

Simple local storage that create directories for packages and put releases files in it.

class extrapypi.storage.local.LocalStorage(packages_root=None)

Bases: extrapypi.storage.base.BaseStorage

NAME = 'LocalStorage'
create_package(package)

Create new directory for a given package

create_release(package, release_file)

Copy release file inside package directory

If package directory does not exists, it will create it before

delete_package(package)

Delete entire package directory

delete_release(package, version)

Delete all files matching specified version

get_file(package, file, release=None)

Get a single file from filesystem

get_files(package, release=None)

Get all files associated to a package

If release is not None, it will filter files on release version, based on a regex

get_releases_metadata()

List all releases metadata from PACKAGES_ROOT

Returns:generator
Return type:list