class ApiHandlerMixin(object): handler_cls = None path = "/" def setUp(self): super(ApiHandlerMixin, self).setUp() # Create a WSGI application. app = webapp2.WSGIApplication([(self.path, self.handler_cls)]) # Wrap the app with WebTest’s TestApp. self.testapp = webtest.TestApp(app) self._default_access = AppAccess(secret="meine weihnacht").put() def _sign(self, method, url, params, key=None, secret=None): if not key: key = self._default_access.urlsafe() if not secret: secret = self._default_access.get().secret.encode("utf-8") params["_key"] = key encoded = urllib.urlencode(params) query = "&".join((method.upper(), url, encoded)) encoded += "&_signature=" + urllib.quote(binascii.b2a_base64( hmac.new(secret, query, hashlib.sha256).digest())) return encoded def ResetKindMap(self): # we run on live models pass def get(self, key=None, secret=None, status=None, expect_errors=False, **params): signed_url = self._sign("GET", "http://localhost" + self.path, params, key, secret) return self.testapp.get(self.path, status=status, expect_errors=expect_errors, params=signed_url) def post(self, key=None, secret=None, status=None, expect_errors=False, **params): signed_url = self._sign("POST", "http://localhost" + self.path, params, key, secret) return self.testapp.post(self.path, status=status, expect_errors=expect_errors, params=signed_url)