Module documentation

Module github

class labelord.github.Label(name, color)

Bases: object

Class that handle one github label.

Variables:
  • name (str) – Name of label
  • color (str) – Color of label in hexadecimal format
class labelord.github.LabelUpdater(session, config, runConfig)

Bases: object

Class that handle all communication with GitHub api.

Variables:
  • session (Session) – authenticated connection session with GitHub
  • config (Config) – Config object with loaded labelord config
  • runConfig (dict) – dictionary with all arguments from console
add_label(repository, label)

Add label to repository, if there is some error, increase error counter

Parameters:
  • repository (str) – target repository
  • label (Label) – class Label with new label
Return type:

None

Returns:

None

get_source_labels(repository)

Return source labels (how target repository should have) First use -t/–template_repo (even it was empty) Next try template-repo from config file from others section Last one is labels section in config file

Parameters:repository (str) – repository from -t/–template-repo parameter
Return type:list
Returns:list of Label classes
get_target_repositories()

Get list of target repositories, where update will be used First check parameter -a/–all_repos (use all accesable repos) Second try list of repos from repos section in config file If not found, quit with exit code 7

Return type:list
Returns:list of repos
Raises:SystemExit – if not repos found
print_log(repository, operationType, label, error)

Print one log line

Parameters:
  • repository (str) – Repository specification
  • operationType (str) – Operation type (UPD,DEL,ADD)
  • label (Label) – Label class with new label
  • error (str) – error message, if there war some error
Return type:

None

Returns:

None

print_summary()

Print summary line based on -q/–quit and -v/–verbose parameters Each of them have another format If there were some errors, quit with exit code 10

Return type:None
Returns:None
Raises:SystemExit – if there is some error
remove_label(repository, label)

Remove label from repository, if there is some error, increase error counter

Parameters:
  • repository (str) – target repository
  • label (Label) – class Label, which should be deleted
Return type:

None

Returns:

None

update_label(repository, label, oldLabel=None)

Update existing label in repository, if there is some error, increase error counter

Parameters:
  • repository (str) – target repository
  • label (Label) – class Label with new Label
  • oldLabel (Optional[Label]) – class Label with old label, if change only case in name of label
Return type:

None

Returns:

None

update_labels(newLabels, targetRepositories)

Change labels in given repositories

Parameters:
  • newLabels (list) – list of new labels
  • targetRepositories (list) – list of target repositories
Return type:

None

Returns:

None

class labelord.github.MyAuth(token: str)

Bases: requests.auth.AuthBase

Class for authentication of requests

Variables:token (str) – authentication token for GitHub
set_token(token)

Set token to class auth

Parameters:token (str) – GitHub token
labelord.github.find_label(label, iterable)

Find class Label in list of Label classes

  • it -> founded old label
  • type -> type of match
    • 0 -> not found
    • 1 -> name found, other color
    • 2 -> name found, same color
    • 3 -> name different case
Parameters:
  • label (Label) – searched label
  • iterable (list) – list of labels
Return type:

tuple

Returns:

tuple (it, type)

labelord.github.get_list_labels(session, repository, exitProgram=True)

Get list of labels in given repository

Parameters:
  • session (Session) – authenticated session
  • repository (str) – target repository
  • exitProgram (bool) – if False, program will not quit if repository not found, only return False
Return type:

Union[list, bool]

Returns:

list of Labels / False

labelord.github.get_list_repos(session)

Get list of available repos

Parameters:session (Session) – authenticated session
Return type:list
Returns:list of available repos
labelord.github.load_config(cfg)

Load .cfg file and parse to Config object

Parameters:cfg (str) – path to config file
Return type:ConfigParser
Returns:config file Object
labelord.github.load_token(config, token)

Load token from config file, if token given by parameter, just return this string

Parameters:
  • config (ConfigParser) – config file object
  • token (str) – token string
Return type:

str

Returns:

token

Raises:

SystemExit – if no token found

labelord.github.validate_response(response, exitProgram=True)

Validate response by status code

  • 401 - code 4
  • 404 - code 5
  • response.ok == False - code 10
Parameters:
  • response (Response) – response object from session
  • exitProgram (bool) – if false, quit will be supprested
Return type:

int

Returns:

error code

Raises:

SystemExit – if exitProgram is tru

Module labelord

labelord

Main program group of click

param ctx:context for object passing
param config:path to config file, default config.cfg
param token:GITHUB token
return:None
labelord [OPTIONS] COMMAND [ARGS]...

Options

-c, --config <config>

Specify path to config file.

-t, --token <token>

Token for GitHub API.

--version

Show the version and exit.

Environment variables

LABELORD_CONFIG

Provide a default for -c

GITHUB_TOKEN

Provide a default for -t

list_labels

List of labels from repository :param ctx: context :param repository: name if repository :return: None

labelord list_labels [OPTIONS] REPOSITORY

Arguments

REPOSITORY

Required argument

list_repos

Command for repositories list :param ctx: context :return: None

labelord list_repos [OPTIONS]

run

Main program for copy labels and update labels
param ctx:context
param sourceRepository:
 source repository for source labels
param allRepos:flag if all repos should be updated
param mode:mode -> update / replace
param quiet:flag for quit mode
param verbose:flag for verbose mode
param dryRun:flag for dryRun mode
return:None
labelord run [OPTIONS] MODE

Options

-t, --template-repo <sourceRepository>

Source repository for labels

-a, --all-repos

Use all available repository

-q, --quiet

Quit print, no output to console

-v, --verbose

Debug info to console

-d, --dry-run

Run only testing instation, no changes at repos

Arguments

MODE

Required argument

run_server

Run server command :param ctx: context from click :param hostname: hostname for flask run :param port: port for flask run :param debug: enable debug mode :return: None

labelord run_server [OPTIONS]

Options

-h, --host <hostname>

Host name for start server

-p, --port <port>

Port for start server

-d, --debug

Enable flask server debug mode

Module server

class labelord.server.LabelordWeb(*args, **kwargs)

Bases: flask.app.Flask

Custom class for app, extend flask.Flask

inject_session(session)

Inject session to current app (for testing) :type session: Session :param session: session class :rtype: None :return: None

reload_config()

Reload config from system variable. Look to system variable LABELORD_CONFIG for path to config file. Default is config.cfg Reload whole authentication and all settings from config

Return type:None
Returns:None
Raises:SystemExit – if no webhook provided
set_labelord_config(config)

Setter for config (set ConfigParser object)

Parameters:config (ConfigParser) – config object
Return type:None
Returns:None
labelord.server.check_allowed_repo(repo)

Check if repo is allowed in config

Parameters:repo (str) – repository string
Return type:bool
Returns:True if allowed, False otherwise
labelord.server.check_signature(msg, secret, signature)

Check sha1 sum of GitHub request

Parameters:
  • msg (str) – body message
  • secret (str) – secret from config
  • signature (str) – signature from GitHub header
Return type:

bool

Returns:

True if checked, False otherwise

labelord.server.convert_git_repo(text)

Create link to GitHub repo

labelord.server.create_label_request(js)

Handle POST request for create label Create new label

Parameters:js – json request object
Return type:None
Returns:None
labelord.server.delete_label_request(js)

Handle POST request for delete label Delete label

Parameters:js – json request object
Return type:None
Returns:None
labelord.server.edit_label_request(js)

Handle POST edit label :param js: json request object :return: None

labelord.server.index()

Main page of application Show main information about settings of server (repos, basic info..)

Return type:str
Returns:
labelord.server.post_request()

Request handler for POST method This function handle all post requests to our page. Parse post request, control all authentication and call correct function from labelord

Return type:str
Returns:str
Raises:flaskAbort – if come request with bad header