示例#1
0
 def _handle_HTTP_error(self, response):
     if response.code == 420:
         # We've been rate-limited.
         if self.reconnect_delay < self.RECONNECT_DELAY_RATE_LIMIT:
             self.reconnect_delay = self.RECONNECT_DELAY_RATE_LIMIT
         self.connection_lost(Failure(RateLimitedError(response.code)))
     else:
         # General HTTP error.
         self.connection_lost(Failure(TwitterAPIError(response.code)))
示例#2
0
 def _404(self):
     raise TwitterAPIError(
         404, "Not Found",
         json.dumps({
             "errors": [
                 {
                     "message": "Sorry, that page does not exist",
                     "code": 34
                 },
             ]
         }))
示例#3
0
    def direct_messages_show(self, id):
        dm = self._dm_or_404(id)

        if (dm.recipient_id_str != self._user_id_str and
                dm.sender_id_str != self._user_id_str):
            # The actual response given to us by Twitter
            raise TwitterAPIError(403, "Forbidden", json.dumps({
                "errors": [{
                    "message": "There was an error sending your message: .",
                    "code": 151
                }]}))

        return self._twitter_data.to_dicts(dm)
示例#4
0
    def direct_messages_destroy(self, id, include_entities=None):
        dm = self._dm_or_404(id)

        if (dm.recipient_id_str != self._user_id_str and
                dm.sender_id_str != self._user_id_str):
            # The actual response given to us by Twitter
            raise TwitterAPIError(403, "Forbidden", json.dumps({
                "errors": [{
                    "message": "There was an error sending your message: .",
                    "code": 151
                }]}))

        del self._twitter_data.dms[dm.id_str]
        return dm.to_dict(
            self._twitter_data, include_entities=include_entities)
示例#5
0
    def direct_messages_new(self, text, user_id=None, screen_name=None):
        if user_id is None and screen_name is None:
            raise TwitterAPIError(400, "Bad Request", json.dumps({
                "errors": [{
                    "message": (
                        "Recipient (user, screen name, or id) "
                        "parameter is missing."),
                    "code": 38
                }]}))

        if user_id is None:
            user = self._twitter_data.get_user_by_screen_name(screen_name)
            user_id = user.id_str

        dm = self._twitter_data.new_dm(text, self._user_id_str, user_id)
        return dm.to_dict(self._twitter_data)
示例#6
0
    def friendships_create(self, user_id=None, screen_name=None, follow=None):
        if follow is not None:
            raise NotImplementedError("follow param")

        user = None
        if screen_name is not None:
            user = self._twitter_data.get_user_by_screen_name(screen_name)
        elif user_id is not None:
            user = self._twitter_data.get_user(user_id)

        if user is None:
            # The actual response given to us by Twitter if no user was found
            # or if both user_id and screen_name were not specified
            raise TwitterAPIError(403, "Forbidden", json.dumps({
                "errors": [{
                    "message": "Cannot find specified user.",
                    "code": 108
                }]}))

        self._twitter_data.add_follow(self._user_id_str, user.id_str)
        return user.to_dict(self._twitter_data)
示例#7
0
    def _handle_error(self, response):
        if response.code < 400:
            return response

        return _read_body(response).addCallback(lambda body: Failure(
            TwitterAPIError(response.code, response=body)))