Commit c43983b2 by Raphael Lullis

A phenomenal hack to allow us to have a connection parameter set. Implemented a…

A phenomenal hack to allow us to have a connection parameter set. Implemented a register method on ParseBase to replace the setting of parse_rest variables (that could not be seen on other modules). Application code can do from parse_rest.__init__ import ParseBase, and from there call register.
parent 4035d500
...@@ -19,16 +19,53 @@ import datetime ...@@ -19,16 +19,53 @@ import datetime
API_ROOT = 'https://api.parse.com/1' API_ROOT = 'https://api.parse.com/1'
APPLICATION_ID = ''
REST_API_KEY = '' class ParseError(Exception):
MASTER_KEY = '' '''Base exceptions from requests made to Parse'''
pass
class ResourceRequestBadRequest(ParseError):
'''Request returns a 400'''
pass
class ResourceRequestLoginRequired(ParseError):
'''Request returns a 401'''
pass
class ResourceRequestForbidden(ParseError):
'''Request returns a 403'''
pass
class ResourceRequestNotFound(ParseError):
'''Request returns a 404'''
pass
class ParseBase(object): class ParseBase(object):
ENDPOINT_ROOT = API_ROOT ENDPOINT_ROOT = API_ROOT
@classmethod @classmethod
def register(cls, app_id, rest_key, master_key, **kw):
ParseBase.CONNECTION = {
'APPLICATION_ID': app_id,
'REST_API_KEY':rest_key,
'MASTER_KEY': master_key
}
@classmethod
def execute(cls, uri, http_verb, extra_headers=None, **kw): def execute(cls, uri, http_verb, extra_headers=None, **kw):
if not ParseBase.CONNECTION:
raise ParseError('Missing connection credentials')
app_id = ParseBase.CONNECTION.get('APPLICATION_ID')
rest_key = ParseBase.CONNECTION.get('REST_API_KEY')
headers = extra_headers or {} headers = extra_headers or {}
url = uri if uri.startswith(API_ROOT) else cls.ENDPOINT_ROOT + uri url = uri if uri.startswith(API_ROOT) else cls.ENDPOINT_ROOT + uri
data = kw and json.dumps(kw) or "{}" data = kw and json.dumps(kw) or "{}"
...@@ -36,14 +73,10 @@ class ParseBase(object): ...@@ -36,14 +73,10 @@ class ParseBase(object):
url += '?%s' % urllib.urlencode(kw) url += '?%s' % urllib.urlencode(kw)
data = None data = None
if APPLICATION_ID == "" or REST_API_KEY == "":
raise ParseError("Must set parse_rest.APPLICATION_ID and " +
"parse_rest.REST_API_KEY")
request = urllib2.Request(url, data, headers) request = urllib2.Request(url, data, headers)
request.add_header('Content-type', 'application/json') request.add_header('Content-type', 'application/json')
request.add_header("X-Parse-Application-Id", APPLICATION_ID) request.add_header("X-Parse-Application-Id", app_id)
request.add_header("X-Parse-REST-API-Key", REST_API_KEY) request.add_header("X-Parse-REST-API-Key", rest_key)
request.get_method = lambda: http_verb request.get_method = lambda: http_verb
...@@ -76,26 +109,7 @@ class ParseBase(object): ...@@ -76,26 +109,7 @@ class ParseBase(object):
return cls.execute(uri, 'DELETE', **kw) return cls.execute(uri, 'DELETE', **kw)
class ParseError(Exception): __all__ = [
'''Base exceptions from requests made to Parse''' 'ParseBase', 'ResourceRequestBadRequest', 'ResourceLoginRequired',
pass 'ResourceRequestForbidden', 'ResourceRequestNotFound'
]
class ResourceRequestBadRequest(ParseError):
'''Request returns a 400'''
pass
class ResourceRequestLoginRequired(ParseError):
'''Request returns a 401'''
pass
class ResourceRequestForbidden(ParseError):
'''Request returns a 403'''
pass
class ResourceRequestNotFound(ParseError):
'''Request returns a 404'''
pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment