zdeskcfg

Easy configuration of zendesk/zdesk scripts.


Keywords
zendesk, zdesk, config
License
BSD-3-Clause
Install
pip install zdeskcfg==1.2.0

Documentation

zdeskcfg

Python module for easy configuration of zendesk/zdesk scripts.

Configuration file

The default location for the Python Zendesk configuration used by this module is ~/.zdeskcfg. This file can optionally contain the section zdesk, and, under that section, the items:

  • email - Zendesk email used for logging in
  • password - Zendesk password or API token
  • url - Full URL to your Zendesk instance
  • token - Indicate if the password field is an API token

An example file:

# Example ~/.zdeskcfg
[zdesk]
email = you@example.com
password = 78FLKihfkuh137uijrlkFF88KLIJF
url = https://example.zendesk.com
token = 1

Using zdeskcfg

The idea behind zdeskcfg is to use a common configuration file for all Zendesk related (Python) scripts. You can expect, by using this module, that the above described configuration file will be inspected for common Zendesk connection information. You can then insert your own sections for your own scripts, and easily leverage both configuration file INI parsing and command line parsing.

All that is required is to define a function, decorate it with zdeskcfg.configure, and then call it with zdeskcfg.call. This looks like the following:

from __future__ import print_function

import zdeskcfg

@zdeskcfg.configure(
    ex_var=('example variable showing zdeskcfg usage',
              'option', 'x', None, None, 'EX')
    )
def main(ex_var='ex_val'):
    "The function docstring is used as help message usage description."
    print("ex_var", ex_var)
    zdesk_config = main.getconfig()
    for key in zdesk_config.keys():
        print(key, zdesk_config[key])

if __name__ == '__main__':
    zdeskcfg.call(main, section='example')

Example help output:

usage: example [-h] [-x EX] [--zdesk-email EMAIL] [--zdesk-password PW]
               [--zdesk-url URL] [--zdesk-token]

The function docstring is used as help message usage description.

optional arguments:
  -h, --help           show this help message and exit
  -x EX, --ex-var EX   example variable showing zdeskcfg usage
  --zdesk-email EMAIL  zendesk login email
  --zdesk-password PW  zendesk password or token
  --zdesk-url URL      zendesk instance URL
  --zdesk-token        specify if password is a zendesk token

Example runs:

$./example
ex_var ex_val
zdesk_email you@example.com
zdesk_url https://example.zendesk.com
zdesk_password OIJjjlakjdifjoijf766
zdesk_token True

$./example -x EXAMPLE
ex_var EXAMPLE
zdesk_email you@example.com
zdesk_url https://example.zendesk.com
zdesk_password OIJjjlakjdifjoijf766
zdesk_token True

$./example -x EXAMPLE --zdesk-url https://examplesandbox.zendesk.com
ex_var EXAMPLE
zdesk_email you@example.com
zdesk_url https://examplesandbox.zendesk.com
zdesk_password OIJjjlakjdifjoijf766
zdesk_token True

Under the hood zdesk.configure is a class that works as a decorator. It takes annotations in the style of plac and plac_ini as argument, and wraps the decorated function (main in this case), which has some operations performed on it. The main function is granted a new method (remember Python functions are objects) called getconfig. The getconfig method returns the values of the zdesk configuration; either the defaults of None and False, the values from the ~/.zdeskcfg file in the [zdesk] section, or the values given on the command line. getconfig can also return the email, etc, items under any specified section of the ini file. Any missing items will be supplied by the [zdesk] section or the defaults, and any command line options will still override.

See the example script for more detailed comments on the above code.

The result of all of this is that you can share the [zdesk] section (and other sections) of the ~/.zdeskcfg between all of your scripts. And, since plac and plac_ini are being used, the scripts get INI parsing, command line parsing, and help generation for essentially free.

There is also a module-level convenience function, get_ini_config, that works like the getconfig method. You can directly get at the ini file configuration without needing to declare and decorate your own function. For example:

>>> import zdeskcfg
>>> zdeskcfg.get_ini_config()
>>> zdeskcfg.get_ini_config(section='sandbox')

This is done by just internally decorating an empty placeholder function, then using it to retrieve the configuration. This has all of the same behavior as getconfig, except obviously there are no command line arguments.

The output of getconfig and zdeskcfg.get_ini_config is made to go directly into the zdesk.Zendesk constructor.

>>> import zdeskcfg
>>> from zdesk import Zendesk
>>> zd = Zendesk(**zdeskcfg.get_ini_config())