mini_buildd.api module¶
API arguments and calls
Attention
Call handshake: In production, we occasionally see W: Remote handshake failed for ...: 'tuple' object has no attribute 'signatures'. Reproduce?
Attention
Call debmirror (external workarounds): apt update fails on experimental suites (contents not mirrored) (Debian Bug #819925)
This happens only on systems where APT is configured to download contents, most likely just because
apt-file is installed. So, the easiest workaround is:
apt purge apt-file
Closest to an actual fix is to install debmirror variant ‘+abfixes’ from
Hellfield Archive, where the “bug” has been fixed (June 2023: at least
available for bullseye and bookworm).
Note
Call stop: Ongoing PACKAGING or BUILDING are lost on restart
Stopping/restarting an instance will make ongoing BUILDING or PACKAGING fail – you need to API call ‘retry’
the whole (no-longer ongoing) PACKAGING then (from the repository instance).
It’s probably wise not to do unattended upgrades of the mini-buildd Debian package on heavily used production systems.
Note
Call keyring-packages: No compat for urold <= squeeze (apt-key add)
Since 2.x, keyring packages will use /etc/apt/trusted.gpg.d/<foo>.gpg, not deprecated apt-key add <foo>.
In Debian, this is supported since wheezy (2013).
For distributions <= squeeze (apt versions ~<= 0.8.x), you would manually have to run apt-key add /etc/apt/trusted.gpg.d/<foo>.gpg after installation of the keyring package.
Note
Call keyring-packages: squeeze or older only: apt secure problems after initial (unauthorized) install of the archive-key package (Debian Bug #657561)
aptitude always shows <NULL> archive
You can verify this problem via:
# aptitude -v show YOURID-archive-keyring | grep ^Archive
Archive: <NULL>, now
BADSIG when verifying the archive keyring package’s signature
Both might be variants of Debian bug above (known to occur for <= squeeze). For both, check if this:
# rm -rf /var/lib/apt/lists/*
# apt-get update
fixes it.
- class mini_buildd.api.Argument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
objectGeneric Argument Class
value()always provides a non-Nonevalue of the specific type, either thedefaultor agivenvalue.strvalue()always provides a non-Nonestrvalue.The
defaultvalue is given in the constructor. For server-specific defaults, this may be function – then the default value will be computed only at run time on the server.- A
givenvalue can be provided via specialset()method: Empty
str,listor falseboolwill yieldNone.Non-empty
strwill be converted to the specific type.Other given values will be used as is.
Type
value() type
svalue() ex.
HTML GET
argparse
Str
str
“string”
key=string
–key “string”
Url
str
“http://..”
key=string
–key “string”
MultilineStr
str
“long”
key=string
–key “string”
Choice
str
“c0”
key=string
–key “string”
Int
int
“17”
key=string
–key “int”
Bool
bool
“True”
key=True
–key
List
list of str
“v0,v1,..”
key=v0,v1..
–key “v0” “v1”..
- HTML_TYPE = None¶
- HTML_SYNTAX = None¶
- VALUE_TYPE¶
Validate that values are actually of that type
alias of
str
- SERVER_DEFAULT = '<server_default>'¶
Magic string value to use as value when a default callable on the server should be used.
- classmethod s2v(str_value)¶
Convert string to value
- classmethod v2s(value)¶
Convert value to string
- required()¶
- needs_value()¶
If user input is no_value
- choices()¶
- default()¶
- strdefault()¶
- value()¶
- strvalue()¶
- strgiven()¶
- icommand_line_given()¶
- set(given)¶
- argparse_kvsargs()¶
Python ‘argparse’ support
- usage()¶
- A
- class mini_buildd.api.StrArgument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
Argument- HTML_TYPE = 'text'¶
- HTML_SYNTAX = 'Plain string'¶
- argparse_kvsargs()¶
Python ‘argparse’ support
- class mini_buildd.api.UrlArgument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
StrArgument- HTML_TYPE = 'url'¶
- HTML_SYNTAX = 'URL string'¶
- class mini_buildd.api.MultilineStrArgument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
StrArgument- HTML_TYPE = 'textarea'¶
- HTML_SYNTAX = 'Multiline string'¶
- class mini_buildd.api.ChoiceArgument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
Argument- HTML_TYPE = 'select'¶
- HTML_SYNTAX = 'Choice'¶
- value()¶
- argparse_kvsargs()¶
Python ‘argparse’ support
- class mini_buildd.api.IntArgument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
StrArgument- VALUE_TYPE¶
alias of
int
- HTML_TYPE = 'number'¶
- HTML_SYNTAX = 'Integer number'¶
- argparse_kvsargs()¶
Python ‘argparse’ support
- class mini_buildd.api.BoolArgument(*args, **kwargs)¶
Bases:
ChoiceArgument- VALUE_TYPE¶
alias of
bool
- HTML_TYPE = 'checkbox'¶
- HTML_SYNTAX = 'Checkbox'¶
- classmethod s2v(str_value)¶
Convert string to value
- icommand_line_given()¶
Empty generator – bools are just command line options like
--with-foo
- argparse_kvsargs()¶
Python ‘argparse’ support
- class mini_buildd.api.ListArgument(id_list, doc='Undocumented', default=None, choices=None, header=None)¶
Bases:
StrArgument- VALUE_TYPE¶
alias of
list
- SEPARATOR = ','¶
- HTML_SYNTAX = 'List as comma-separated strings'¶
- classmethod s2v(str_value)¶
Convert string to value
- classmethod v2s(value)¶
Convert value to string
- icommand_line_given()¶
- argparse_kvsargs()¶
Python ‘argparse’ support
- class mini_buildd.api.Repository(id_list, **kwargs)¶
Bases:
StrArgument- object()¶
- class mini_buildd.api.Repositories(id_list, **kwargs)¶
Bases:
ListArgument- objects()¶
- class mini_buildd.api.Codenames(id_list, **kwargs)¶
Bases:
ListArgument
- mini_buildd.api.diststr2repository(diststr)¶
- class mini_buildd.api.Distribution(id_list, choices=<functools._lru_cache_wrapper object>, extra_doc='', **kwargs)¶
Bases:
StrArgument- dist()¶
- class mini_buildd.api.Distributions(id_list, choices=<functools._lru_cache_wrapper object>, **kwargs)¶
Bases:
ListArgument
- class mini_buildd.api.Source(id_list, extra_doc='', **kwargs)¶
Bases:
StrArgument
- class mini_buildd.api.UploadOptions(id_list, **kwargs)¶
Bases:
StrArgument
- class mini_buildd.api.Output¶
Bases:
ChoiceArgumentMeta API call option ‘output’
- class mini_buildd.api.Rollbacks(id_list, extra_doc='', **kwargs)¶
Bases:
IntArgument- range(suite)¶
Get valid range for this suite
- class mini_buildd.api.Call(**kwargs)¶
Bases:
object- AUTH = <mini_buildd.config.Auth object>¶
- NEEDS_RUNNING_DAEMON = False¶
- CONFIRM = False¶
- RESULT_DESC = ''¶
- CATEGORY = 'Consumer'¶
- classmethod name()¶
- classmethod doc()¶
- classmethod doc_title()¶
- classmethod doc_body()¶
- classmethod uri()¶
- classmethod iarguments()¶
- classmethod from_sloppy_args(**kwargs)¶
Construct ignoring any unknown arguments given
- set_args(**kwargs)¶
- classmethod from_command_line(command_line)¶
- set_request(request)¶
- classmethod get_plain(result, force_json=False)¶
Get
strresult (non-strresults get json pretty-formatted)
- plain(force_json=False)¶
- json_pretty()¶
For (arg-less) use in templates only
- classmethod parse_command_line(command_line)¶
- icommand_line(full=False, with_user=False, user=None, exclude=None)¶
- command_line(full=False, with_user=False, user=None, exclude=None)¶
- command_line_full()¶
- http_args(with_confirm=False, with_output=None)¶
- url(endpoint=None, with_confirm=False, with_output='html', relative=False)¶
- url_relative()¶
- run()¶
- class mini_buildd.api.Status(**kwargs)¶
Bases:
CallGet status of this instance
- RESULT_DESC = '{\n "version": mini-buildd\'s version\n "identity": Instance identity\n "url": Instance URL (HTTP)\n "incoming_url": Incoming URL (currently FTP)\n "load": Instance\'s (0 =< load <= 1). If negative, the instance is stopped\n "chroots": List of active chroots\n "remotes": Active or auto-reactivatable remotes\n ["repositories": Simplified structural representation of all repositories]\n}\n'¶
- classmethod iarguments()¶
- class mini_buildd.api.PubKey(**kwargs)¶
Bases:
CallGet ASCII-armored GnuPG public key of this instance
Used to sign the APT repositories (‘APT key’) and for authorization across instances.
See
Customer's Manual, APT Bootstrapfor ways to employ the APT key on yor local system.
- class mini_buildd.api.DputConf(**kwargs)¶
Bases:
CallGet recommended dput config snippet
Usually, this is for integration in your personal
~/.dput.cf(which will work for both,dputanddput-ng).Administrators may add custom site targets via
~mini-buildd/etc/dput.cf.- classmethod iarguments()¶
- class mini_buildd.api.SourcesList(**kwargs)¶
Bases:
CallGet sources.list (apt lines)
Usually, this output is put to a file like
/etc/apt/sources.list.d/mini-buildd-xyz.list.- classmethod iarguments()¶
- class mini_buildd.api.Ls(**kwargs)¶
Bases:
CallList source package in repository
- classmethod iarguments()¶
- class mini_buildd.api.Search(**kwargs)¶
Bases:
CallSearch for source or binary package names in
repositories,buildsandeventsBe cautious with binary package files found outside of
repositories:Matches only found in
buildsusually failed installation as some criteria is not met.Matches found in
eventsoriginate from the initial (non source-only) user upload (and thus are local builds).
- EMPTY_RESULT = {'builds': [], 'events': [], 'repositories': []}¶
- MSG = {'builds': 'Binary packages maybe not installed/some criteria not met', 'events': 'Be cautious: Binary package originates from user upload (local build)', 'repositories': 'In repository, safe to use'}¶
- classmethod iarguments()¶
- class mini_buildd.api.Debdiff(**kwargs)¶
Bases:
CallCompare two internal source packages
- classmethod iarguments()¶
- class mini_buildd.api.Migrate(**kwargs)¶
Bases:
_Staff,_Confirm,_CatDeveloper,CallMigrate source package
Migrates a source package along with all its binary packages. If run for a rollback distribution, this will perform a rollback restore.
- classmethod iarguments()¶
- class mini_buildd.api.Remove(**kwargs)¶
Bases:
_Admin,_Confirm,_CatAdministrator,CallRemove source package
Removes a source package along with all its binary packages.
- classmethod iarguments()¶
- class mini_buildd.api.Port(**kwargs)¶
Bases:
_Staff,_Running,_Confirm,_CatDeveloper,CallPort internal source package
An internal ‘port’ is a no-changes (i.e., only the changelog will be adapted) rebuild of the given locally-installed package.
When
from_distributionequalsto_distribution, a rebuild will be done.- classmethod iarguments()¶
- class mini_buildd.api.PortExt(**kwargs)¶
Bases:
_Staff,_Running,_Confirm,_CatDeveloper,CallPort external source package
An external ‘port’ is a no-changes (i.e., only the changelog will be adapted) rebuild of any given source package.
- classmethod iarguments()¶
- class mini_buildd.api.Retry(**kwargs)¶
Bases:
_Staff,_Running,_Confirm,_CatDeveloper,CallRetry a previously failed source package
- RESULT_DESC = 'Changes file name that has been re-uploaded'¶
- BKEY_FORMAT = '<source>/<version>/<timecode>/source[ <arch>]'¶
- BKEY_REGEX = re.compile('[^/]+/[^/]+/[^/]+/[^/]+')¶
- classmethod iarguments()¶
- class mini_buildd.api.Cancel(**kwargs)¶
Bases:
_Staff,_Running,_Confirm,_CatDeveloper,CallCancel an ongoing package build
- classmethod iarguments()¶
- class mini_buildd.api.SetUserKey(**kwargs)¶
Bases:
_Login,_Confirm,_CatDeveloper,CallSet a user’s GnuPG public key
- classmethod iarguments()¶
- class mini_buildd.api.Subscribe(**kwargs)¶
Bases:
_Login,CallSubscribe to (email) notifications
- classmethod iarguments()¶
- class mini_buildd.api.Unsubscribe(**kwargs)¶
Bases:
SubscribeUnsubscribe from (email) notifications
- class mini_buildd.api.RemakeChroots(**kwargs)¶
Bases:
_Admin,_Confirm,_Maintenance,_CatAdministrator,CallRemake chroots
Run actions ‘remove’, ‘prepare’, ‘check’ and ‘activate’.
- classmethod iarguments()¶
- class mini_buildd.api.Reindex(**kwargs)¶
Bases:
_Admin,_Confirm,_Maintenance,_CatAdministrator,CallForce repository reindex
Usually, you reindex by doing an explicit
checkon a Repository instance – however, that method would not reindex in case the repository config is unchanged. Use this call if you feel you need it anyway for whatever reason.If you just upgraded from 2.2.x, it’s recommended to run it once (2.4.x reindex additionally runs
reprepro flood, which may make some arch=all packages available for (subsequently) added architectures).- classmethod iarguments()¶
- class mini_buildd.api.Start(**kwargs)¶
Bases:
_Admin,_Confirm,_CatAdministrator,CallStart Daemon (accept incoming)
Does nothing if already started; will fail if Daemon instance is not activated.
- class mini_buildd.api.Stop(**kwargs)¶
Bases:
_Admin,_Confirm,_CatAdministrator,CallStop Daemon (stop accepting incoming)
Does nothing if already stopped. Any ongoing events will be CANCELED.
This state is not persisted. Please deactivate the Daemon instance via mini-buildd’s ‘setup’ page to persist over mini-buildd service restarts.
- class mini_buildd.api.Wake(**kwargs)¶
Bases:
_Staff,_Confirm,_CatDeveloper,CallWake a remote instance
- classmethod iarguments()¶
- class mini_buildd.api.Handshake(**kwargs)¶
Bases:
_CatAdministrator,CallCheck if signed message matches a remote, reply our signed message on success
This is for internal use only.
- classmethod iarguments()¶
- class mini_buildd.api.Cronjob(**kwargs)¶
Bases:
_Admin,_Confirm,_CatAdministrator,CallRun a cron job now (out of schedule)
- classmethod iarguments()¶
- class mini_buildd.api.Uploaders(**kwargs)¶
Bases:
_Admin,_Running,_CatAdministrator,CallGet upload permissions for repositories
- classmethod iarguments()¶
- class mini_buildd.api.SnapshotLs(**kwargs)¶
Bases:
_Running,CallGet list of repository snapshots for a distribution
- classmethod iarguments()¶
- class mini_buildd.api.SnapshotCreate(**kwargs)¶
Bases:
_Admin,_Confirm,_CatAdministrator,SnapshotLsCreate a repository snapshot
- classmethod iarguments()¶
- class mini_buildd.api.SnapshotDelete(**kwargs)¶
Bases:
SnapshotCreateDelete a repository snapshot
- class mini_buildd.api.Debmirror(**kwargs)¶
Bases:
_Admin,_Confirm,_CatAdministrator,CallMake local partial repository mirror via Debian package ‘debmirror’
This may be useful if you plan on publishing a stripped-down (f.e., only certain repos, only
stable, omit rollbacks) variant of your repo somewhere remote.- PROGRAM = '/usr/bin/debmirror'¶
- DEB = 'debmirror'¶
- classmethod iarguments()¶
- class mini_buildd.api.KeyringPackages(**kwargs)¶
Bases:
_Admin,_Running,_Confirm,_CatAdministrator,CallBuild keyring packages
- classmethod iarguments()¶
- class mini_buildd.api.TestPackages(**kwargs)¶
Bases:
_Admin,_Running,_Confirm,_CatAdministrator,CallBuild test packages
- classmethod iarguments()¶
- class mini_buildd.api.Setup(**kwargs)¶
Bases:
_Admin,_Confirm,_Maintenance,_CatAdministrator,CallCreate, update or inspect your setup
- classmethod iarguments()¶
- class Report(result)¶
Bases:
dict- SEVERITY_MESSAGES = {0: 'No issues found', 1: 'Notable issues found', 2: 'Warnings found', 3: 'Errors found'}¶
- classmethod report_path()¶
- classmethod report_load()¶
- report_save()¶
- class Instance(_call, model, options, update_args, **identifiers)¶
Bases:
object- class Status(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)¶
Bases:
Enum- MISSING = 1¶
- EXISTS = 2¶
- ACTIVE = 3¶
- CHANGED = 4¶
- FAILED = 5¶
- DEACTIVATED = 6¶
- REPORT_STATUS = {Status.CHANGED: 2, Status.DEACTIVATED: 1, Status.FAILED: 3, Status.MISSING: 2}¶
Report instances for these statuses with given severity
- diff()¶
Overload/expand this for additional custom diffs
- update()¶
- classmethod ilocal_archive_urls()¶
- classmethod iapt_cacher_archive_urls()¶
- class Dists(items=None)¶
Bases:
dict- classmethod iexpand_arch(arch)¶
- classmethod iexpand_archs(archs)¶
- set(codename, archs)¶
- as_argument_value()¶
- merge(dists)¶
- classmethod setup_inspect()¶
- classmethod setup_extend()¶
- class mini_buildd.api.Calls¶
Bases:
OrderedDictAutomatically collect all calls defined in this module, and make them accessible