Ejemplo n.º 1
0
 def call(self, api_operation, api_request):
     try:
         API_OPERATIONS.index(api_operation)
     except ValueError:
         raise RuntimeError("Invalid API operation.  Please refer to"
                   "Adaptive Payments API Operations:"
                   "https://www.x.com/docs/DOC-1408#id099BG0B005Z")
     url = "%s/%s" % (self._endpoint, api_operation)
     req = http_request(url)
     # Authentication
     req.add_header('X-PAYPAL-SECURITY-USERID', self._api_username)
     req.add_header('X-PAYPAL-SECURITY-PASSWORD', self._api_password)
     req.add_header('X-PAYPAL-SECURITY-SIGNATURE', self._api_signature)
     # Specifying data formats
     req.add_header('X-PAYPAL-REQUEST-DATA-FORMAT', 'JSON')
     req.add_header('X-PAYPAL-RESPONSE-DATA-FORMAT', 'JSON')
     # Specifying application information
     req.add_header('X-PAYPAL-APPLICATION-ID', self._app_id)
     json_request = json_encode(api_request)
     try:
         openurl = urlopen(req, json_request)
     except URLError:
         raise RuntimeError("API request failed.")
     return json_decode(openurl.read())
Ejemplo n.º 2
0
 def call(self, api_operation, api_request):
     try:
         API_OPERATIONS.index(api_operation)
     except ValueError:
         raise RuntimeError("Invalid API operation.  Please refer to"
                            "Adaptive Payments API Operations:"
                            "https://www.x.com/docs/DOC-1408#id099BG0B005Z")
     url = "%s/%s" % (self._endpoint, api_operation)
     req = http_request(url)
     # Authentication
     req.add_header('X-PAYPAL-SECURITY-USERID', self._api_username)
     req.add_header('X-PAYPAL-SECURITY-PASSWORD', self._api_password)
     req.add_header('X-PAYPAL-SECURITY-SIGNATURE', self._api_signature)
     # Specifying data formats
     req.add_header('X-PAYPAL-REQUEST-DATA-FORMAT', 'JSON')
     req.add_header('X-PAYPAL-RESPONSE-DATA-FORMAT', 'JSON')
     # Specifying application information
     req.add_header('X-PAYPAL-APPLICATION-ID', self._app_id)
     json_request = json_encode(api_request)
     try:
         openurl = urlopen(req, json_request)
     except URLError:
         raise RuntimeError("API request failed.")
     return json_decode(openurl.read())
Ejemplo n.º 3
0
    def run(self, property_operator, values, hasher=sha1):

        if not isinstance(values, (list, tuple)):
            raise ValueError(
                "The values for for a ParallelQuery run need to be a list."
                )

        model_class = self.model_class
        keys_only = self.keys_only
        query_key = self.query_key
        limit = self.limit
        offset = self.offset
        deadline = self.deadline
        on_complete = self.on_complete
        ops = self.ops
        results = self.results
        set_result = results.__setitem__
        callbacks = self.callbacks
        add_callback = callbacks.append

        if query_key:
            key_prefix = '%s-%s-%s' % (
                hasher(query_key).hexdigest(), limit, offset
                )
            cache = memcache.get_multi(values, key_prefix, self.namespace)
        else:
            cache = {}

        for value in values:
            if value in cache:
                continue
            if limit == 0:
                set_result(value, [])
                continue
            query = BaseQuery(model_class, keys_only)
            for op, args in ops:
                if op == 0:
                    query.filter(*args)
                elif op == 1:
                    query.order(*args)
                elif op == 2:
                    query.ancestor(*args)
            query.filter(property_operator, value)
            query.execute(
                limit, offset, value, set_result, add_callback, deadline,
                on_complete
                )

        try:
            while callbacks:
                callback = callbacks.pop()
                callback()
            if query_key:
                unset_keys = memcache.set_multi(
                    results, cache_duration, key_prefix, self.namespace
                    )
                if notify:
                    set_keys = set(results).difference(set(unset_keys))
                    if set_keys:
                        rpc = urlfetch.create_rpc(deadline=10)
                        urlfetch.make_fetch_call(
                            rpc, notify, method='POST', payload=json_encode({
                                'key_prefix': key_prefix, 'keys': set_keys
                                })
                            )
            for key in cache:
                results[key] = cache[key]
            return self
        finally:
            del callbacks[:]