Commit 881f3413 by Piotr Mitros

All properties in djobject hidden, so they won't conflict with ones in views/queries

parent 3e1a9e66
...@@ -8,9 +8,14 @@ import requests ...@@ -8,9 +8,14 @@ import requests
import urllib import urllib
import json import json
def http_rpc_helper(baseurl, function, headers = {}): schema = None
def http_rpc_helper(baseurl, view_or_query, function, headers = {}):
if baseurl:
baseembedurl = baseurl+view_or_query+"/"
def rpc_call(**kwargs): def rpc_call(**kwargs):
url = urllib.basejoin(baseurl, function) url = urllib.basejoin(baseembedurl, function)
if kwargs: if kwargs:
url = url+"?"+urllib.urlencode(kwargs) url = url+"?"+urllib.urlencode(kwargs)
print url print url
...@@ -32,11 +37,17 @@ def local_call_helper(view_or_query, function): ...@@ -32,11 +37,17 @@ def local_call_helper(view_or_query, function):
class embed(): class embed():
def __init__(self, view_or_query, baseurl = None, headers = {}): def __init__(self, view_or_query, baseurl = None, headers = {}):
self.baseurl = baseurl global schema
if baseurl: self._baseurl = baseurl
self.baseembedurl = baseurl+view_or_query if not schema:
self.view_or_query = view_or_query if baseurl:
self.headers = headers url = baseurl+"schema"
schema = json.loads(requests.get(url).content)
else:
import djobject.views
schema = djobject.views.schema_helper()
self._view_or_query = view_or_query
self._headers = headers
def __getattr__(self, attr): def __getattr__(self, attr):
## Disallow internal. This is necessary both for analytics, ## Disallow internal. This is necessary both for analytics,
...@@ -44,23 +55,23 @@ class embed(): ...@@ -44,23 +55,23 @@ class embed():
## and similar overwritten ## and similar overwritten
if attr[0] == '_': if attr[0] == '_':
return return
if self.baseurl: if self._baseurl:
return http_rpc_helper(self.baseembedurl+"/", attr) return http_rpc_helper(self._baseurl, self._view_or_query, attr)
else: else:
return local_call_helper(self.view_or_query, attr) return local_call_helper(self._view_or_query, attr)
## TODO: Use probe/schema to populate this ## TODO: Use probe/schema to populate this
def __dir__(self): def __dir__(self):
results = [] results = []
probeurl = self.baseurl+"probe/"+self.view_or_query probeurl = self._baseurl+"probe/"+self._view_or_query
classes = requests.get(probeurl, headers = self.headers).content.split('\n') classes = requests.get(probeurl, headers = self._headers).content.split('\n')
for param_set in classes: for param_set in classes:
items = requests.get(probeurl+"/"+param_set, headers = self.headers).content.split('\n') items = requests.get(probeurl+"/"+param_set, headers = self._headers).content.split('\n')
results = results + items results = results + items
return results return results
def __repr__(self): def __repr__(self):
return self.view_or_query+" object host: ["+self.baseurl+"]" return self._view_or_query+" object host: ["+self._baseurl+"]"
class djobject(): class djobject():
def __init__(self, baseurl = None, headers = {}): def __init__(self, baseurl = None, headers = {}):
...@@ -71,4 +82,4 @@ if __name__ == "__main__": ...@@ -71,4 +82,4 @@ if __name__ == "__main__":
djo = djobject(baseurl = "http://127.0.0.1:8000/") djo = djobject(baseurl = "http://127.0.0.1:8000/")
print djo.query.djt_event_count() print djo.query.djt_event_count()
print djo.query.djt_user_event_count(user = "bob") print djo.query.djt_user_event_count(user = "bob")
print djo.query.__dir__() #print djo.query.__dir__()
...@@ -81,6 +81,7 @@ class SimpleTest(TestCase): ...@@ -81,6 +81,7 @@ class SimpleTest(TestCase):
auth.settings = temp auth.settings = temp
def test_urls(self): def test_urls(self):
''' Simple test to make sure we're not throwing 500s. '''
from django.test.client import Client from django.test.client import Client
c = Client() c = Client()
urls = ["/event_properties", "/schema"] urls = ["/event_properties", "/schema"]
......
...@@ -64,16 +64,20 @@ def event_properties(request): ...@@ -64,16 +64,20 @@ def event_properties(request):
# return HttpResponse("".join(l), mimetype='text/html') # return HttpResponse("".join(l), mimetype='text/html')
# return HttpResponse("\n".join(l), mimetype='text/text') # return HttpResponse("\n".join(l), mimetype='text/text')
@auth.auth def schema_helper():
def schema(request):
''' Returns all available views and queries as a JSON
object.
'''
endpoints = [] endpoints = []
for cls in request_handlers: for cls in request_handlers:
for name in request_handlers[cls]: for name in request_handlers[cls]:
rh = request_handlers[cls][name] rh = request_handlers[cls][name]
endpoints.append({'category' : rh['category'], 'class': cls, 'name' : name, 'doc' : rh['doc']}) endpoints.append({'category' : rh['category'], 'class': cls, 'name' : name, 'doc' : rh['doc']})
return endpoints
@auth.auth
def schema(request):
''' Returns all available views and queries as a JSON
object.
'''
endpoints = schema_helper()
if request.GET.get("f", "") == "html": if request.GET.get("f", "") == "html":
return HttpResponse("\n".join(sorted(["<dt><p><b>{class}/{name}</b> <i>{category}</i></dt><dd>{doc}</dd>".format(**rh) for rh in endpoints]))) return HttpResponse("\n".join(sorted(["<dt><p><b>{class}/{name}</b> <i>{category}</i></dt><dd>{doc}</dd>".format(**rh) for rh in endpoints])))
return HttpResponse(json.dumps(endpoints)) return HttpResponse(json.dumps(endpoints))
......
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