import urllib |
import urllib |
import json |
import json |
from pprint import pprint |
from pprint import pprint |
import logging |
import logging |
import ckan.logic as logic |
import ckan.logic as logic |
import hashlib |
import hashlib |
import threading |
import threading |
from ckan.common import _, c, request, response |
from ckan.common import _, c, request, response |
from pylons import config |
from pylons import config |
|
from webob.multidict import UnicodeMultiDict |
|
from paste.util.multidict import MultiDict |
|
|
log = logging.getLogger(__name__) |
log = logging.getLogger(__name__) |
|
|
from ckan.controllers.api import ApiController |
from ckan.controllers.api import ApiController |
|
|
class DGAApiController(ApiController): |
class DGAApiController(ApiController): |
|
|
def _post_analytics(self,user,request_obj_type,request_function,request_id): |
def _post_analytics(self,user,request_obj_type,request_function,request_id): |
if (config.get('googleanalytics.id') != None): |
if (config.get('googleanalytics.id') != None): |
data = urllib.urlencode({ |
data = urllib.urlencode({ |
"v":1, |
"v":1, |
"tid":config.get('googleanalytics.id'), |
"tid":config.get('googleanalytics.id'), |
"cid":hashlib.md5(user).hexdigest(), |
"cid":hashlib.md5(user).hexdigest(), |
"t":"event", |
"t":"event", |
"dh":c.environ['HTTP_HOST'], |
"dh":c.environ['HTTP_HOST'], |
"dp":c.environ['PATH_INFO'], |
"dp":c.environ['PATH_INFO'], |
"dr":c.environ.get('HTTP_REFERER',''), |
"dr":c.environ.get('HTTP_REFERER',''), |
"ec":"CKAN API Request", |
"ec":"CKAN API Request", |
"ea":request_obj_type+request_function, |
"ea":request_obj_type+request_function, |
"el":request_id, |
"el":request_id, |
}) |
}) |
log.debug("Sending API Analytics Data: "+data) |
log.debug("Sending API Analytics Data: "+data) |
# send analytics asynchronously |
# send analytics asynchronously |
threading.Thread(target=urllib.urlopen,args=("http://www.google-analytics.com/collect", data)).start() |
threading.Thread(target=urllib.urlopen,args=("http://www.google-analytics.com/collect", data)).start() |
|
|
|
|
def action(self, logic_function, ver=None): |
def action(self, logic_function, ver=None): |
try: |
try: |
function = logic.get_action(logic_function) |
function = logic.get_action(logic_function) |
except Exception,e: |
except Exception,e: |
log.debug(e) |
log.debug(e) |
pass |
pass |
try: |
try: |
side_effect_free = getattr(function, 'side_effect_free', False) |
side_effect_free = getattr(function, 'side_effect_free', False) |
request_data = self._get_request_data(try_url_params=side_effect_free) |
request_data = self._get_request_data(try_url_params=side_effect_free) |
if isinstance(request_data, dict): |
if isinstance(request_data, dict): |
id = request_data.get('id','') |
id = request_data.get('id','') |
if 'q' in request_data.keys(): |
if 'q' in request_data.keys(): |
id = request_data['q'] |
id = request_data['q'] |
if 'query' in request_data.keys(): |
if 'query' in request_data.keys(): |
id = request_data['query'] |
id = request_data['query'] |
self._post_analytics(c.user,logic_function,'', id) |
self._post_analytics(c.user,logic_function,'', id) |
except Exception,e: |
except Exception,e: |
print log.debug(e) |
print log.debug(e) |
pass |
pass |
|
|
return ApiController.action(self,logic_function, ver) |
return ApiController.action(self,logic_function, ver) |
|
|
def list(self, ver=None, register=None, subregister=None, id=None): |
def list(self, ver=None, register=None, subregister=None, id=None): |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"list",id) |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"list",id) |
return ApiController.list(self,ver, register, subregister, id) |
return ApiController.list(self,ver, register, subregister, id) |
def show(self, ver=None, register=None, subregister=None, id=None, id2=None): |
def show(self, ver=None, register=None, subregister=None, id=None, id2=None): |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"show",id) |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"show",id) |
return ApiController.show(self,ver, register, subregister, id,id2) |
return ApiController.show(self,ver, register, subregister, id,id2) |
def update(self, ver=None, register=None, subregister=None, id=None, id2=None): |
def update(self, ver=None, register=None, subregister=None, id=None, id2=None): |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"update",id) |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"update",id) |
return ApiController.update(self,ver, register, subregister, id,id2) |
return ApiController.update(self,ver, register, subregister, id,id2) |
def delete(self, ver=None, register=None, subregister=None, id=None, id2=None): |
def delete(self, ver=None, register=None, subregister=None, id=None, id2=None): |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"delete",id) |
self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"delete",id) |
return ApiController.delete(self,ver, register, subregister, id,id2) |
return ApiController.delete(self,ver, register, subregister, id,id2) |
def search(self, ver=None, register=None): |
def search(self, ver=None, register=None): |
id = None |
id = None |
try: |
try: |
params = MultiDict(self._get_search_params(request.params)) |
params = MultiDict(self._get_search_params(request.params)) |
if 'q' in params.keys(): |
if 'q' in params.keys(): |
id = params['q'] |
id = params['q'] |
if 'query' in params.keys(): |
if 'query' in params.keys(): |
id = params['query'] |
id = params['query'] |
except ValueError, e: |
except ValueError, e: |
print str(e) |
print str(e) |
pass |
pass |
self._post_analytics(c.user,register,"search",id) |
self._post_analytics(c.user,register,"search",id) |
|
|