Исходный код py_cerebro.cargador

# -*- coding: utf-8 -*-
"""
Модуль доступа к файловому хранилищу Cargador.
Подробнее о настройке Cargador см.раздел
":ref:`carga-advanced-params`"

.. rubric:: Классы

* :py:class:`py_cerebro.cargador.Cargador`

"""


import os
import urllib
import xmlrpc.client
import http.client

[документация]class Cargador(xmlrpc.client.ServerProxy): """ Класс Cargador для доступа к файловому хранилищу Cargador. .. rubric:: Методы * :py:meth:`import_file() <py_cerebro.cargador.Cargador.import_file>` Следующие методы наследованы от XML-RPC объекта:: catalogDelete(hash HASH, password STR) catalogDownload(hash HASH, siteList STR, CommenceFlags INT, userName STR, url STR, retryCount INT) catalogResolve(hash HASH) catalogUpload(hash HASH, siteList STR, CommenceFlags INT, userName STR, url STR, retryCount INT) controlIO(hash HASH, TableKind INT, Action INT) statusInfo() statusTables(tablesBitMaks INT, flags INT) Подробнее об этих методах читайте в разделе :ref:`capi-xml-rpc`. """ def __init__(self, _host, _rpc_port, _http_port): super(Cargador, self).__init__('http://{0}:{1}'.format(_host, _rpc_port)) self.host = _host self.http_port = _http_port
[документация] def import_file(self, file_name, url): """ :param string file_name: путь до файла. :param string url: локатор на место в хранилище. В качестве локатора выступает полный путь задачи в Cerebro, например, 'Test project/Test task'. Выполняет импорт файла в файловое хранилище по HTTP протоколу методом PUT и возвращает его хеш в формате base64. :: rpc = py_cerebro.cargador.Cargador('server', 4040, 4080); # cоздаем объект класса Cargador rpc.import_file('cargador.py', 'Test Folder')) # импортируем файл в файловое хранилище Cargador """ c_url = url if c_url.startswith('/'): c_url = c_url.lstrip('/') if c_url.endswith('/'): c_url = c_url.rstrip('/') c_url = c_url + '/' + os.path.basename(file_name) headers = { "User-Agent": "Python uploader", "Content-type": "application/octet-stream", "Accept": "text/plain"} f = open(file_name, "rb") conn = http.client.HTTPConnection(self.host, self.http_port) conn.request("PUT", urllib.parse.quote_plus(c_url), f, headers) response = conn.getresponse() #print(response.status, response.reason); if(response.status!=201): raise RuntimeError('Attachment failed with code: ' + str(response.status) + '. reason: ' + response.reason); ret = response.read().decode('ascii').strip() conn.close() return ret