Python: пример использования модуля requests

Автор: | 06/12/2015
 

PythonОбщие сведения можно найти в посте Python: модуль requests.

В примере ниже — пример его использования.

Функция cloud_put() выполняет деплой данных (XML и DLL файлы) в базу данных Cassandra через API нашего приложения:

def cloud_put(logger, user, password, base_url, deploy_urls_list, deploy_files_list, deploy_names_list):

    """Make API request with PUT
       Executes session.put() for each URL and FILE in deploy_files_list and deploy_names_list lists
       Called in deploy_ci() function"""

    session = requests.Session()

    session.auth = (user, password)
    session.headers.update({'user-agent': 'RDSmanager'})

    # check count in each element, must be identically
    logger.logger.info('Counting items for deploy...')
    if not len(deploy_urls_list) == len(deploy_files_list):
        logger.logger.info('ERROR: items in `deploy_urls_list` not equal items in `deploy_files_list`')
        sys.exit(1)
    elif not len(deploy_files_list) == len(deploy_names_list):
        logger.logger.info('ERROR: items in `deploy_files_list` not equal items in `deploy_names_list`')
        sys.exit(2)
    else:
        logger.logger.info('Count seems OK.')

    # checking connection
    try:
        data_check = session.get(base_url)
        data_check.raise_for_status()
    except requests.exceptions.ConnectionError as error:
        logger.logger.info('ERROR: %s' % error)
        sys.exit(5)

    # m_url - URL with UUID, e.g. https://www.dev.domain.com/cloudlibrary/data/4ac11ad6-a391-455c-bd6b-d205b655926b
    # m_file - file on local filesystem to deploy, e.g. d:RDSbuilddirPlugins_xmlsProductGroupEditor.unity3d
    # m_name - just module name, e.g. UnityUI
    for m_url, m_file, m_name in zip(deploy_urls_list, deploy_files_list, deploy_names_list):
        logger.logger.info('Deploying file: %snURL: %s File: %s' % (m_name, m_url, m_file))
        try:
            with open(m_file, 'rb') as infile:
                data_put = session.put(m_url, data=infile)
                data_put.raise_for_status()
                logger.logger.info('Result code: %sn' % data_put.status_code)
        except requests.exceptions.HTTPError as error:
            logger.logger.info('ERROR: %s' % error)
            sys.exit(7)
        except requests.exceptions.TooManyRedirects:
            logger.logger.info('Authentication failed!')
            sys.exit(6)

Она в свою очередь вызывается из функции deploy_ci():

def deploy_ci(logger, rds_basedir, config_name):

    """Build-server deployment part"""

    logger.logger.info('Running CI server deploy')

    # set of defaults, if variables not found
    defaults = {'base_url': 'https://www.dev.domain.com/cloudlibrary/',
                'user': 'user',
                'password': 'pass', }

    ...
    # running deploy with session.put() in cloud_put() function
    cloud_put(logger, user, password, base_url, deploy_urls_list, deploy_files_list, deploy_names_list)

И пример работы:

...
09-Jun-2015 14:52:47	Deploying file: UnityUI
09-Jun-2015 14:52:47	URL: https://www.dev.domain.com/cloudlibrary/data/4b363b65-51f3-4f41-bf54-a4c2d80e7c88 File: C:UsersAdministratorDocumentsInstallsbamboo-homexml-databuild-dir1310731572865-1703937DLLUnityUI.dll
09-Jun-2015 14:52:47	Result code: 200
09-Jun-2015 14:52:47
09-Jun-2015 14:52:47	Deploying file: UnityUI.xml
09-Jun-2015 14:52:47	URL: https://www.dev.domain.com/cloudlibrary/data/9594d836-8bbf-4aa1-98ad-dea27fe16629 File: C:RDSmanagerconfbuild_xmlsdebug9594d836-8bbf-4aa1-98ad-dea27fe16629
09-Jun-2015 14:52:47	Result code: 200
...