예제 #1
0
  def _lookup_user_info(self, access_token, access_secret):
    """Lookup User Info.

    Lookup the user on Yahoo!
    """

    user_info = self._get_default_user_info()

    # 1) Obtain the user's GUID.
    response = self.make_request(
        "http://social.yahooapis.com/v1/me/guid", token=access_token,
        secret=access_secret, additional_params={"format": "json"},
        protected=True)

    data = json.loads(response.content)["guid"]
    guid = data["value"]

    # 2) Inspect the user's profile.
    response = self.make_request(
        "http://social.yahooapis.com/v1/user/%s/profile/usercard" % guid,
         token=access_token, secret=access_secret,
         additional_params={"format": "json"}, protected=True)

    data = json.loads(response.content)["profile"]

    user_info["id"] = guid
    user_info["username"] = data["nickname"].lower()
    user_info["name"] = data["nickname"]
    user_info["picture"] = data["image"]["imageUrl"]

    return user_info
예제 #2
0
    def query(self):
        body = self.request.body
        query = json.loads(body)['query']
        if query == 'count':
            count = '%s' % self.api.model.query().count(100)
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.out.write(count)
            return
        self.response.headers['Content-Type'] = 'application/json'

        def values():
            for value in query['values']:
                if isinstance(value, dict):
                    kind = value['kind']
                    id = int(value['value'])
                    value = ndb.Key(kind, id)
                yield value
        items = self.api.model\
            .gql(query['string'], *[i for i in values()])#\

        #.fetch(1000)
        def get_items_json():
            for item in items:
                try:
                    self.api.__is_readable__(self, item)
                except HTTPError as e:
                    pass
                else:
                    yield self.api.item_to_JSON(item)

        json_data = {}
        json_data[self.api.plural_name] = [i for i in get_items_json()]
        self.response.out.write(json.dumps(json_data))
예제 #3
0
 def query(self):
     body = self.request.body
     query = json.loads(body)['query']
     if query == 'count':
         count = '%s' % self.api.model.query().count(100)
         self.response.headers['Content-Type'] = 'text/plain'
         self.response.out.write(count)
         return
     self.response.headers['Content-Type'] = 'application/json'
     def values():
         for value in query['values']:
             if isinstance(value, dict):
                 kind = value['kind']
                 id = int(value['value'])
                 value = ndb.Key(kind, id)
             yield value
     items = self.api.model\
         .gql(query['string'], *[i for i in values()])#\
         #.fetch(1000)
     def get_items_json():
         for item in items:
             try:
                 self.api.__is_readable__(self, item)
             except HTTPError as e:
                 pass
             else:
                 yield self.api.item_to_JSON(item)
     json_data = {}
     json_data[self.api.plural_name] = [
         i for i in get_items_json()
     ]
     self.response.out.write(json.dumps(json_data))
예제 #4
0
    def call(self, payload, url='https://svcs.%spaypal.com/AdaptivePayments/Pay'):

        url = self.get_url(url)
        
        headers = {
            'X-PAYPAL-SECURITY-USERID' : user,
            'X-PAYPAL-SECURITY-PASSWORD' : password,
            'X-PAYPAL-SECURITY-SIGNATURE' : signature,
            'X-PAYPAL-APPLICATION-ID': app_id,
            'X-PAYPAL-REQUEST-DATA-FORMAT' : 'JSON',
            'X-PAYPAL-RESPONSE-DATA-FORMAT' : 'JSON',
            'Content-Type': 'application/json'
        }

        ctx = ndb.get_context()
        res = ctx.urlfetch(
            url,
            headers=headers,
            payload=json.dumps(payload),
            method=urlfetch.POST
        ).get_result()

        if res.status_code != 200:
            raise RequestError(res.content)

        data = json.loads(res.content)
        envelope = data['responseEnvelope']
        ack = envelope.get('ack') or envelope.get('ACK')

        if ack != 'Success':
            raise AckError(res.content)

        return data
예제 #5
0
    def _request(self, method, path, data={}):

        path = path.rstrip('/') + '/'

        if method == 'POST':

            authorization = 'Basic ' + base64.b64encode(self.auth_id+':'+self.auth_token)
            
            headers = {
                'Authorization': authorization,
                'Content-Type': 'application/json'
            }
            headers.update(self.headers)
            
            url = self._api + path

            payload = json.dumps(data)
            
            res = urlfetch.fetch(
                url,
                payload=payload,
                headers=headers,
                method=urlfetch.POST
            )

        # elif method == 'GET':
        #     r = requests.get(self._api + path, headers=self.headers,
        #                      auth=(self.auth_id, self.auth_token),
        #                      params=data)
        # elif method == 'DELETE':
        #     r = requests.delete(self._api + path, headers=self.headers,
        #                         auth=(self.auth_id, self.auth_token),
        #                         params=data)
        # elif method == 'PUT':
        #     headers = {'content-type': 'application/json'}
        #     headers.update(self.headers)
        #     r = requests.put(self._api + path, headers=headers,
        #                      auth=(self.auth_id, self.auth_token),
        #                      data=json.dumps(data))

        content = res.content
        if content:
            try:
                response = json.loads(content)
            except ValueError:
                response = content
        else:
            response = content
        return (res.status_code, response)
예제 #6
0
  def _lookup_user_info(self, access_token, access_secret):
    """Lookup User Info.

    Lookup the user on Dropbox.
    """

    response = self.make_request("http://api.dropbox.com/0/account/info",
                                 token=access_token, secret=access_secret,
                                 protected=True)

    data = json.loads(response.content)
    user_info = self._get_default_user_info()
    user_info["id"] = data["uid"]
    user_info["name"] = data["display_name"]
    user_info["country"] = data["country"]

    return user_info
예제 #7
0
  def _lookup_user_info(self, access_token, access_secret):
    """Lookup User Info.

    Lookup the user on Twitter.
    """

    response = self.make_request(
        "https://api.twitter.com/1.1/account/verify_credentials.json",
        token=access_token, secret=access_secret, protected=True)

    data = json.loads(response.content)
    user_info = self._get_default_user_info()
    user_info["id"] = data["id"]
    user_info["username"] = data["screen_name"]
    user_info["name"] = data["name"]
    user_info["picture"] = data["profile_image_url"]

    return user_info
예제 #8
0
 def update_item(self, view, item):
     data = json.loads(view.request.body)[self.name]
     for field in self.field_list:
         value = None
         if isinstance(field.field, ndb.KeyProperty):
             id = data.get(field.belongs_to_name, None)
             if id:
                 id = int(id)
                 kind = field.model
                 key = ndb.Key(kind, id)
                 value = key
         elif isinstance(field.field, ndb.UserProperty):
             email = data.get(field.underscored_name, None)
             if email:
                 value = users.User(email)
         else:
             value = data.get(field.underscored_name, None)
         if value:
             setattr(item, field.name, value)
예제 #9
0
 def update_item(self, view, item):
     data = json.loads(view.request.body)[self.name]
     for field in self.field_list:
         value = None
         if isinstance(field.field, ndb.KeyProperty):
             id = data.get(field.belongs_to_name, None)
             if id:
                 id = int(id)
                 kind = field.model
                 key = ndb.Key(kind, id)
                 value = key
         elif isinstance(field.field, ndb.UserProperty):
             email = data.get(field.underscored_name, None)
             if email:
                 value = users.User(email)
         else:
             value = data.get(field.underscored_name, None)
         if value:
             setattr(item, field.name, value)
예제 #10
0
  def _lookup_user_info(self, access_token, access_secret):
    """Lookup User Info.

    Lookup the user on MySpace.
    """

    response = self.make_request("http://api.myspace.com/v1/user.json",
        token=access_token, secret=access_secret, protected=True)

    data = json.loads(response.content)

    user_info = self._get_default_user_info()
    user_info["id"] = data["userId"]
    username = data["webUri"].replace("http://www.myspace.com/", "")
    user_info["username"] = username
    user_info["name"] = data["name"]
    user_info["picture"] = data["image"]

    return user_info
예제 #11
0
  def _lookup_user_info(self, access_token, access_secret):
    """Lookup User Info.

    Lookup the user on Yammer
    """

    user_info = self._get_default_user_info()

    # Grab the user's profile from Yammer.
    response = self.make_request("https://www.yammer.com/api/v1/users/current.json",
                                 token=access_token,
                                 secret=access_secret,
                                 protected=False,
                                 headers={"x-li-format":"json"})

    data = json.loads(response.content)
    user_info = self._get_default_user_info()
    user_info["id"] = data["name"]
    user_info["picture"] = data["mugshot_url"]
    user_info["name"] = data["full_name"]
    return user_info
예제 #12
0
  def _lookup_user_info(self, access_token, access_secret):
    """Lookup User Info.

    Lookup the user on LinkedIn
    """

    user_info = self._get_default_user_info()

    # Grab the user's profile from LinkedIn.
    response = self.make_request("http://api.linkedin.com/v1/people/~:"
                                 "(picture-url,id,first-name,last-name)",
                                 token=access_token,
                                 secret=access_secret,
                                 protected=False,
                                 headers={"x-li-format":"json"})

    data = json.loads(response.content)
    user_info["id"] = data["id"]
    user_info["picture"] = data["pictureUrl"]
    user_info["name"] = data["firstName"] + " " + data["lastName"]
    return user_info
예제 #13
0
 def post(self):
     body = self.request.body
     if json.loads(body).get('query', None):
         return self.query()
     self.create()
예제 #14
0
 def get_request_method(self):
     if self.request.method == 'POST' and json.loads(self.request.body).get(
             'query', None):
         return 'GET'
     return self.request.method
예제 #15
0
 def post(self):
     body = self.request.body
     if json.loads(body).get('query', None):
         return self.query()
     self.create()
예제 #16
0
 def get_request_method(self):
     if self.request.method == 'POST' and json.loads(self.request.body).get('query', None):
         return 'GET'
     return self.request.method