示例#1
0
 def instance_url(self):
     self.id = util.utf8(self.id)
     self.charge = util.utf8(self.charge)
     base = Charge.class_url()
     cust_extn = urllib.quote_plus(self.charge)
     extn = urllib.quote_plus(self.id)
     return "%s/%s/refunds/%s" % (base, cust_extn, extn)
示例#2
0
 def instance_url(self):
     self.id = util.utf8(self.id)
     self.charge = util.utf8(self.charge)
     base = Charge.class_url()
     cust_extn = urllib.quote_plus(self.charge)
     extn = urllib.quote_plus(self.id)
     return "%s/%s/refunds/%s" % (base, cust_extn, extn)
示例#3
0
 def retrieve_refund(cls, id, refund_id, api_key=None, **params):
     requestor = api_requestor.APIRequestor(api_key)
     url = "%s/%s/order_refunds/%s" % (cls.class_url(),
                                       quote_plus(util.utf8(id)),
                                       quote_plus(util.utf8(refund_id)))
     response, api_key = requestor.request('get', url, params)
     return util.convert_to_pingpp_object(response, api_key)
示例#4
0
 def class_url(cls, app=None, sub_app_id=None, channel=None):
     app = util.utf8(app)
     sub_app_id = util.utf8(sub_app_id)
     if channel:
         channel = util.utf8(channel)
         return "/v1/apps/%s/sub_apps/%s/channels/%s" % (app, sub_app_id,
                                                         channel)
     else:
         return "/v1/apps/%s/sub_apps/%s/channels" % (app, sub_app_id)
示例#5
0
 def retrieve_transfer_channel(cls,
                               sub_app,
                               channel,
                               api_key=None,
                               app=None,
                               **params):
     requestor = api_requestor.APIRequestor(api_key)
     url = "%s/%s/transfer_channels/%s" % (cls.class_url(app),
                                           quote_plus(util.utf8(sub_app)),
                                           quote_plus(util.utf8(channel)))
     response, api_key = requestor.request('get', url, params)
     return util.convert_to_pingpp_object(response, api_key)
示例#6
0
    def retrieve(self, id, **params):
        base = self.get('url')
        id = util.utf8(id)
        extn = urllib.quote_plus(id)
        url = "%s/%s" % (base, extn)

        return self.request('get', url, params)
示例#7
0
    def retrieve(self, id, **params):
        base = self.get('url')
        id = util.utf8(id)
        extn = urllib.quote_plus(id)
        url = "%s/%s" % (base, extn)

        return self.request('get', url, params)
示例#8
0
    def request(self, method, url, headers, post_data=None):
        s = util.StringIO.StringIO()
        curl = pycurl.Curl()

        if method == 'get':
            curl.setopt(pycurl.HTTPGET, 1)
        elif method == 'post':
            curl.setopt(pycurl.POST, 1)
            curl.setopt(pycurl.POSTFIELDS, post_data)
        else:
            curl.setopt(pycurl.CUSTOMREQUEST, method.upper())

        # pycurl doesn't like unicode URLs
        curl.setopt(pycurl.URL, util.utf8(url))

        curl.setopt(pycurl.WRITEFUNCTION, s.write)
        curl.setopt(pycurl.NOSIGNAL, 1)
        curl.setopt(pycurl.CONNECTTIMEOUT, 30)
        curl.setopt(pycurl.TIMEOUT, 80)
        curl.setopt(pycurl.HTTPHEADER, ['%s: %s' % (k, v)
                    for k, v in headers.iteritems()])
        if self._verify_ssl_certs:
            curl.setopt(pycurl.CAINFO, os.path.join(
                os.path.dirname(__file__), 'data/ca-certificates.crt'))
        else:
            curl.setopt(pycurl.SSL_VERIFYHOST, False)

        try:
            curl.perform()
        except pycurl.error as e:
            self._handle_request_error(e)
        rbody = s.getvalue()
        rcode = curl.getinfo(pycurl.RESPONSE_CODE)
        return rbody, rcode
示例#9
0
    def request(self, method, url, headers, post_data=None):
        s = util.StringIO.StringIO()
        curl = pycurl.Curl()

        if method == 'get':
            curl.setopt(pycurl.HTTPGET, 1)
        elif method == 'post':
            curl.setopt(pycurl.POST, 1)
            curl.setopt(pycurl.POSTFIELDS, post_data)
        else:
            curl.setopt(pycurl.CUSTOMREQUEST, method.upper())

        # pycurl doesn't like unicode URLs
        curl.setopt(pycurl.URL, util.utf8(url))

        curl.setopt(pycurl.WRITEFUNCTION, s.write)
        curl.setopt(pycurl.NOSIGNAL, 1)
        curl.setopt(pycurl.CONNECTTIMEOUT, 30)
        curl.setopt(pycurl.TIMEOUT, 80)
        curl.setopt(pycurl.HTTPHEADER, ['%s: %s' % (k, v)
                    for k, v in headers.iteritems()])
        if self._verify_ssl_certs:
            curl.setopt(pycurl.CAINFO, os.path.join(
                os.path.dirname(__file__), 'data/ca-certificates.crt'))
        else:
            curl.setopt(pycurl.SSL_VERIFYHOST, False)

        try:
            curl.perform()
        except pycurl.error, e:
            self._handle_request_error(e)
示例#10
0
 def instance_url(self):
     id = self.get('id')
     if not id:
         raise error.InvalidRequestError(
             'Could not determine which URL to request: %s instance '
             'has invalid ID: %r' % (type(self).__name__, id), 'id')
     id = util.utf8(id)
     base = self.class_url()
     extn = urllib.quote_plus(id)
     return "%s/%s" % (base, extn)
示例#11
0
def _api_encode(data):
    for key, value in data.iteritems():
        key = util.utf8(key)
        if value is None:
            continue
        elif hasattr(value, 'pingpp_id'):
            yield (key, value.pingpp_id)
        elif isinstance(value, list) or isinstance(value, tuple):
            for subvalue in value:
                yield ("%s[]" % (key, ), util.utf8(subvalue))
        elif isinstance(value, dict):
            subdict = dict(('%s[%s]' % (key, subkey), subvalue)
                           for subkey, subvalue in value.iteritems())
            for subkey, subvalue in _api_encode(subdict):
                yield (subkey, subvalue)
        elif isinstance(value, datetime.datetime):
            yield (key, _encode_datetime(value))
        else:
            yield (key, util.utf8(value))
示例#12
0
def _api_encode(data):
    for key, value in data.iteritems():
        key = util.utf8(key)
        if value is None:
            continue
        elif hasattr(value, 'pingpp_id'):
            yield (key, value.pingpp_id)
        elif isinstance(value, list) or isinstance(value, tuple):
            for subvalue in value:
                yield ("%s[]" % (key,), util.utf8(subvalue))
        elif isinstance(value, dict):
            subdict = dict(('%s[%s]' % (key, subkey), subvalue) for
                           subkey, subvalue in value.iteritems())
            for subkey, subvalue in _api_encode(subdict):
                yield (subkey, subvalue)
        elif isinstance(value, datetime.datetime):
            yield (key, _encode_datetime(value))
        else:
            yield (key, util.utf8(value))
示例#13
0
 def instance_url(self):
     id = self.get('id')
     if not id:
         raise error.InvalidRequestError(
             'Could not determine which URL to request: %s instance '
             'has invalid ID: %r' % (type(self).__name__, id), 'id')
     id = util.utf8(id)
     base = self.class_url()
     extn = urllib.quote_plus(id)
     return "%s/%s" % (base, extn)
示例#14
0
    def instance_url(self):
        id = self.get('id')
        if not isinstance(id, six.string_types):
            raise error.InvalidRequestError(
                'Could not determine which URL to request: %s instance '
                'has invalid ID: %r, %s. ID should be of type `str` (or'
                ' `unicode`)' % (type(self).__name__, id, type(id)), 'id')

        id = util.utf8(id)
        base = self.class_url()
        extn = quote_plus(id)
        return "%s/%s" % (base, extn)
def _api_encode(data):
    for key, value in six.iteritems(data):
        key = util.utf8(key)
        if value is None:
            continue
        elif hasattr(value, 'pingpp_id'):
            yield (key, value.pingpp_id)
        elif isinstance(value, list) or isinstance(value, tuple):
            for sv in value:
                if isinstance(sv, dict):
                    subdict = _encode_nested_dict(key, sv, fmt='%s[][%s]')
                    for k, v in _api_encode(subdict):
                        yield (k, v)
                else:
                    yield ("%s[]" % (key, ), util.utf8(sv))
        elif isinstance(value, dict):
            subdict = _encode_nested_dict(key, value)
            for subkey, subvalue in _api_encode(subdict):
                yield (subkey, subvalue)
        elif isinstance(value, datetime.datetime):
            yield (key, _encode_datetime(value))
        else:
            yield (key, util.utf8(value))
示例#16
0
    def request(self, method, url, headers, post_data=None):
        b = util.io.BytesIO()
        rheaders = util.io.BytesIO()

        self._curl.reset()

        proxy = self._get_proxy(url)
        if proxy:
            if proxy.hostname:
                self._curl.setopt(pycurl.PROXY, proxy.hostname)
            if proxy.port:
                self._curl.setopt(pycurl.PROXYPORT, proxy.port)
            if proxy.username or proxy.password:
                self._curl.setopt(pycurl.PROXYUSERPWD,
                                  "%s:%s" % (proxy.username, proxy.password))

        if method == 'get':
            self._curl.setopt(pycurl.HTTPGET, 1)
        elif method == 'post':
            self._curl.setopt(pycurl.POST, 1)
            self._curl.setopt(pycurl.POSTFIELDS, post_data)
        else:
            self._curl.setopt(pycurl.CUSTOMREQUEST, method.upper())

        # pycurl doesn't like unicode URLs
        self._curl.setopt(pycurl.URL, util.utf8(url))

        self._curl.setopt(pycurl.WRITEFUNCTION, b.write)
        self._curl.setopt(pycurl.NOSIGNAL, 1)
        self._curl.setopt(pycurl.CONNECTTIMEOUT, pingpp.connect_timeout)
        self._curl.setopt(pycurl.TIMEOUT, pingpp.timeout)
        self._curl.setopt(
            pycurl.HTTPHEADER,
            ['%s: %s' % (k, v) for k, v in six.iteritems(dict(headers))])
        if self._verify_ssl_certs:
            self._curl.setopt(pycurl.CAINFO,
                              util.ca_bundle_path(self._ca_bundle))
        else:
            self._curl.setopt(pycurl.SSL_VERIFYHOST, False)

        try:
            self._curl.perform()
        except pycurl.error as e:
            self._handle_request_error(e)
        rbody = b.getvalue().decode('utf-8')
        rcode = self._curl.getinfo(pycurl.RESPONSE_CODE)
        headers = self.parse_headers(rheaders.getvalue().decode('utf-8'))

        return rbody, rcode, headers
示例#17
0
 def create_channel(cls, sub_app, api_key=None, app=None, **params):
     requestor = api_requestor.APIRequestor(api_key)
     url = "%s/%s/channels" % (cls.class_url(app),
                               quote_plus(util.utf8(sub_app)))
     response, api_key = requestor.request('post', url, params)
     return util.convert_to_pingpp_object(response, api_key)
示例#18
0
 def delete(cls, id, api_key=None, app=None, **params):
     requestor = api_requestor.APIRequestor(api_key)
     url = "%s/%s" % (cls.class_url(app), quote_plus(util.utf8(id)))
     response, api_key = requestor.request('delete', url, params)
     return util.convert_to_pingpp_object(response, api_key)
示例#19
0
 def modify(cls, sid, api_key=None, app=None, **params):
     url = "%s/%s" % (cls.class_url(app), quote_plus(util.utf8(sid)))
     return cls._modify(url, api_key=api_key, **params)
示例#20
0
 def list_charges(cls, id, api_key=None, **params):
     requestor = api_requestor.APIRequestor(api_key)
     url = "%s/%s/charges" % (cls.class_url(), quote_plus(util.utf8(id)))
     response, api_key = requestor.request('get', url, params)
     return util.convert_to_pingpp_object(response, api_key)
示例#21
0
 def reverse(cls, id, api_key=None, **params):
     url = cls.class_url() + '/%s/reverse' % quote_plus(util.utf8(id))
     requestor = api_requestor.APIRequestor(api_key)
     response, api_key = requestor.request('post', url, params)
     return util.convert_to_pingpp_object(response, api_key)