def _send(self, data):
        uri = Soup.URI.new(self._url)

        message = Soup.Message(method='POST', uri=uri)
        message.request_headers.append('x-api-key', self._api_key)
        message.set_request(self.TYPE, Soup.MemoryUse.COPY, data, len(data))
        message.connect('network-event', self.__network_event_cb)
        message.connect('wrote-body-data', self.__wrote_body_data_cb)
        message.connect('finished', self.__finished_cb)

        session = Soup.SessionSync()
        session.add_feature_by_type(Soup.ProxyResolverDefault)
        session.send_message(message)
示例#2
0
    def _request(self, method, url, data, content):
        uri = Soup.URI.new(url)

        message = Soup.Message(method=method, uri=uri)
        message.request_body.append(data)
        message.request_headers.append('Content-Type', content)
        message.request_headers.append('Authorization', self._authorize())

        #logger = Soup.Logger.new(Soup.LoggerLogLevel.BODY, -1)

        session = Soup.SessionSync()
        #session.add_feature(logger)
        session.add_feature_by_type(Soup.ProxyResolverDefault)
        session.send_message(message)

        self._data = message.response_body.data
        if not 200 <= message.status_code < 300:
            raise ZendeskError(self._data)
示例#3
0
import json
import logging
import gi

from contextlib import contextmanager
gi.require_version('SoupGNOME', '2.4')
from gi.repository import Gio, Soup, SoupGNOME
from urllib.parse import urlencode

from friends.errors import FriendsError

log = logging.getLogger(__name__)

# Global libsoup session instance.
_soup = Soup.SessionSync()
# Enable this for full requests and responses dumped to STDOUT.
#_soup.add_feature(Soup.Logger.new(Soup.LoggerLogLevel.BODY, -1))
_soup.add_feature(SoupGNOME.ProxyResolverGNOME())


def _get_charset(message):
    """Extract charset from Content-Type header in a Soup Message."""
    type_header = message.response_headers.get_content_type()[1]
    if not type_header:
        return None
    return type_header.get('charset')


class BaseRateLimiter:
    """Base class for the rate limiting API.