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)
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)
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)
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)
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)
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
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)
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)
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))
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))
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))
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
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)
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)
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)
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)
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)