def get(self): helper = RequestHelper(self) try: if not users.is_current_user_admin(): helper.error(403, "admin required") return oauth_token = self.request.get("oauth_token") if not oauth_token: # initial request, I store the request token key/secret as cookies and redirect to twitter's auth page request_token, auth_url = TwitterConnector.get_request_token_and_auth_url() logging.debug("request token key:%s, secret:%s" % (request_token.key, request_token.secret)) helper.set_cookie("%s=%s; path=/" % (self._rtoken_key_cookie, request_token.key)) helper.set_cookie("%s=%s; path=/" % (self._rtoken_secret_cookie, request_token.secret)) helper.write_text("redirecting request token %s to %s" % (request_token.to_string(), auth_url)) self.redirect(auth_url) else: # post verification request key = self.request.cookies.get(self._rtoken_key_cookie, None) secret = self.request.cookies.get(self._rtoken_secret_cookie, None) if not (key and secret): helper.error(400, "key and secret not stored as cookies") return access_token = TwitterConnector.get_access_token(key, secret) token_string = access_token.to_string() ConfigurationAccessor.update(twitter_access_token=token_string) helper.write_text("saved access token %s" % token_string) except Exception, e: msg = traceback.print_exc() helper.error(500, msg)
def put(self, key): helper = RequestHelper(self) if not self.request.body: helper.error(400, "body required") return value = self.request.body logging.info("%s=%s" % (key, value)) try: ConfigurationAccessor.update(**{key: value}) except IllegalArgumentException, e: helper.error(400, "invalid key") return
def test_read_only(self): m = Mox() config = m.CreateMock(Configuration) config.twitter_access_token = "oauth_token=1234&oauth_token_secret=5678" config.twitter_read_only = "1" m.StubOutWithMock(ConfigurationAccessor, "get_or_create") ConfigurationAccessor.get_or_create().AndReturn(config) m.ReplayAll() api = TwitterConnector.new_api() self.__assert_is_instance(api, ReadOnlyTwitterApi) m.VerifyAll()
def act(self, force_act=False, action=None, skip_responses=False): """ returns: (action, response) tuple. response type depends on the action that was performed. """ if not force_act: config = ConfigurationAccessor.get_or_create() if config and (config.is_tweeting is not None) and (not safe_int(config.is_tweeting)): logging.debug("config.is_tweeting is False; hiding") return () result = [] responded = False if not skip_responses: try: direct, response = self.respond() if (direct or response): # a response to a direct message or mention was generated responded = True if direct: result.append(direct.AsDict()) if response: result.append(response.AsDict()) except Exception, e: logging.error(e)
def new_api(cls): config = ConfigurationAccessor.get_or_create() if config and config.twitter_oauth_enabled and config.twitter_access_token: logging.debug("creating OAuth API instance") api = cls._new_oauth_api(config.twitter_access_token) else: raise Exception("no OAuth token stored in config") if safe_int(config.twitter_read_only): logging.debug("creating read-only Twitter API") api = ReadOnlyTwitterApi(api) return api
def get(self): helper = RequestHelper(self) try: if not users.is_current_user_admin(): helper.error(403, "admin required") return oauth_token = self.request.get("oauth_token") if not oauth_token: # initial request, I store the request token key/secret as cookies and redirect to twitter's auth page request_token, auth_url = TwitterConnector.get_request_token_and_auth_url( ) logging.debug("request token key:%s, secret:%s" % (request_token.key, request_token.secret)) helper.set_cookie("%s=%s; path=/" % (self._rtoken_key_cookie, request_token.key)) helper.set_cookie( "%s=%s; path=/" % (self._rtoken_secret_cookie, request_token.secret)) helper.write_text("redirecting request token %s to %s" % (request_token.to_string(), auth_url)) self.redirect(auth_url) else: # post verification request key = self.request.cookies.get(self._rtoken_key_cookie, None) secret = self.request.cookies.get(self._rtoken_secret_cookie, None) if not (key and secret): helper.error(400, "key and secret not stored as cookies") return access_token = TwitterConnector.get_access_token(key, secret) token_string = access_token.to_string() ConfigurationAccessor.update(twitter_access_token=token_string) helper.write_text("saved access token %s" % token_string) except Exception, e: msg = traceback.print_exc() helper.error(500, msg)
def get(self, key): helper = RequestHelper(self) config = ConfigurationAccessor.get_or_create() result = None if config: if key: if entity_has_property(config, key): result = getattr(config, key) else: helper.error(400, "invalid key") return else: result = entity_to_hash(config) else: result = {} helper.write_json(result)
def delete(self, key): helper = RequestHelper(self) ConfigurationAccessor.update(**{key: None}) helper.set_status(204)
def _build_standard_config(moxer): moxer.StubOutWithMock(ConfigurationAccessor, "get_or_create") config = moxer.CreateMock(Configuration) ConfigurationAccessor.get_or_create().AndReturn(config) config.is_tweeting = None return config
def __mock_config(self, config, moxer): moxer.StubOutWithMock(ConfigurationAccessor, "get_or_create") ConfigurationAccessor.get_or_create().AndReturn(config)