Ejemplo n.º 1
0
    def __init__(self, consumer_key, consumer_secret, connection_params=None):

        self.scheme = 'http'
        self.host = 'localhost'
        #self.host = 'indivo.genepartnership.org'
        #self.host = 'indivo-staging.informedcohort.org'
        #self.host = 'indivobig.genepartnership.org'
        #self.host = 'x-staging.indivo.org'
        self.port = '8000'

        if connection_params:
            if connection_params.has_key('scheme'):
                self.scheme = connection_params['scheme']
            if connection_params.has_key('host'):
                self.host = connection_params['host']
            if connection_params.has_key('port'):
                self.port = connection_params['port']

        if self.scheme and self.host and self.port:
            self.utils_obj = IUtils(self.scheme, self.host, self.port)
        else:
            raise APIConnectorError("Scheme, host, port needed")

        self.api = API(self.utils_obj)
        self.ds = DataStore()
        self.ds.reset()
        self.ds.app_info['consumer_key'] = consumer_key
        self.ds.app_info['consumer_secret'] = consumer_secret
        self.count = 0
Ejemplo n.º 2
0
  def __init__(self, consumer_key, consumer_secret, connection_params=None):

    self.scheme = 'http'
    self.host = 'localhost'
    #self.host = 'indivo.genepartnership.org'
    #self.host = 'indivo-staging.informedcohort.org'
    #self.host = 'indivobig.genepartnership.org'
    #self.host = 'x-staging.indivo.org'
    self.port = '8000'

    if connection_params:
      if connection_params.has_key('scheme'): self.scheme = connection_params['scheme']
      if connection_params.has_key('host'):   self.host = connection_params['host']
      if connection_params.has_key('port'):   self.port = connection_params['port']

    if self.scheme and self.host and self.port:
      self.utils_obj = IUtils(self.scheme, self.host, self.port)
    else:
      raise APIConnectorError("Scheme, host, port needed")

    self.api = API(self.utils_obj)
    self.ds = DataStore()
    self.ds.reset()
    self.ds.app_info['consumer_key'] = consumer_key
    self.ds.app_info['consumer_secret'] = consumer_secret 
    self.count = 0
Ejemplo n.º 3
0
class APIConnector:
    def __init__(self, consumer_key, consumer_secret, connection_params=None):

        self.scheme = 'http'
        self.host = 'localhost'
        #self.host = 'indivo.genepartnership.org'
        #self.host = 'indivo-staging.informedcohort.org'
        #self.host = 'indivobig.genepartnership.org'
        #self.host = 'x-staging.indivo.org'
        self.port = '8000'

        if connection_params:
            if connection_params.has_key('scheme'):
                self.scheme = connection_params['scheme']
            if connection_params.has_key('host'):
                self.host = connection_params['host']
            if connection_params.has_key('port'):
                self.port = connection_params['port']

        if self.scheme and self.host and self.port:
            self.utils_obj = IUtils(self.scheme, self.host, self.port)
        else:
            raise APIConnectorError("Scheme, host, port needed")

        self.api = API(self.utils_obj)
        self.ds = DataStore()
        self.ds.reset()
        self.ds.app_info['consumer_key'] = consumer_key
        self.ds.app_info['consumer_secret'] = consumer_secret
        self.count = 0

    def call(self, method, url, options=None):
        options = options or {}

        data = {}
        oauth_token = {}
        parameters = {}
        if options.has_key(DATA): data = options[DATA]
        if options.has_key(PARAMETERS): parameters = options[PARAMETERS]
        #if options.has_key(OAUTH_TOKEN): oauth_token = options[OAUTH_TOKEN]
        #if options.has_key(OAUTH_TOKEN_SECRET): oauth_token_secret = options[OAUTH_TOKEN_SECRET]
        if self.ds.app_info:
            try:
                retval = self.utils_obj.http_conn(method,
                                                  url,
                                                  self.ds.app_info,
                                                  parameters=parameters,
                                                  data=data)
            except:
                return False

            if retval:
                if isinstance(retval, dict) and retval.has_key(CONTENT):
                    return retval[CONTENT]
                else:
                    return retval
        return False

    def _handle_response(self, response):
        PRD = 'prd'
        # SZ: Abstarct this out
        prd_vals = {
            'Account': 'account_id',
            'Document': 'document_id',
            'Record': 'record_id'
        }
        for prd_name, attr in prd_vals.items():
            if response \
                    and response.has_key(PRD) \
                    and isinstance(response[PRD], dict) \
                    and response[PRD].has_key(prd_name):
                id = response[PRD][prd_name]
                if len(id) > 0 and attr:
                    setattr(self.ds, attr, id[0])
        return True

    def __getattr__(self, func_name):
        cr = CallRes()

        def internal_getattr(*args, **kwargs):
            if hasattr(self.api, func_name):
                _args, _, _, _defaults = inspect.getargspec(
                    getattr(self.api, func_name))
                kw = {}
                count = 0
                for arg in _args[1:]:
                    if kwargs.has_key(arg):
                        kw[arg] = kwargs[arg]
                    elif hasattr(self.ds, arg) \
                        and not (getattr(self.ds, arg) is None or getattr(self.ds, arg) == ''):
                        kw[arg] = getattr(self.ds, arg)
                    else:
                        kw[arg] = _defaults[_args.index(arg) -
                                            (len(_args) - len(_defaults))]
                    count += 1
                cr.response = getattr(self.api, func_name)(**kw)
                self._handle_response(cr.response)
                return cr
            return False

        return internal_getattr

    def __call__(self, func_name, *args, **kwargs):
        if hasattr(self.api, func_name):
            self.count += 1
            kw = self._get_kwargs(func_name, args, kwargs)
            call_res = getattr(self.api, func_name)(**kw)
            return self.post_call(call_res)
        else:
            raise APIConnectorError("No such API call " + func_name)

    def _get_kwargs(self, func_name, args, kwargs):
        SELF = 'self'
        _kw = {}
        _args, _, _, _defaults = inspect.getargspec(
            getattr(self.api, func_name))
        for arg in _args:
            # Get passed in kwarg
            if len(kwargs) > 0 and kwargs.has_key(arg):
                _kw[arg] = kwargs[arg]
            # If it is an arg it is required, therefore must be non-empty
            elif hasattr(self.ds, arg):
                if not (getattr(self.ds, arg) is None
                        or getattr(self.ds, arg) == ''):
                    _kw[arg] = getattr(self.ds, arg)
                else:
                    raise APIConnectorError(arg + ' is missing')
            # Get passed in arg
            elif len(args) > 1 and args[1].has_key(arg):
                _kw[arg] = args[1][arg]
            # Get defaults
            else:
                _kw[arg] = _defaults[_args.index(arg) -
                                     (len(_args) - len(_defaults))]
        if _kw.has_key(SELF):
            del _kw[SELF]
        return _kw

    # SZ: Remove this from IndivoClient
    def post_call(self, call_res):
        PRD = 'prd'
        CONTENT = 'content'
        prd_vals = {
            'Account': 'account_id',
            'Document': 'document_id',
            'Entry': None,
            'Measurements': None,
            'Record': 'record_id',
            'Result': None
        }
        if call_res['response_content_type'] == 'text/plain':
            return call_res[PRD]
        elif call_res.has_key(PRD) and isinstance(call_res[PRD], dict):
            for prd_name, attr in prd_vals.items():
                if call_res[PRD].has_key(prd_name):
                    id = call_res[PRD][prd_name]
                    if len(id) > 0:
                        if attr:
                            setattr(self.ds, attr, id[0])
                            #return getattr(self.ds, attr)
                        #else:
                        #    return True
                    #else:
                    #    return False
            #if call_res[PRD].has_key(CONTENT):
            #    return call_res[PRD][CONTENT]
            return call_res
        else:
            return call_res
            #if call_res.has_key(PRD):
            #    raise APIConnectorError(call_res[PRD], include_traceback=True)
        raise APIConnectorError()
Ejemplo n.º 4
0
class APIConnector:
    def __init__(self, consumer_key, consumer_secret, connection_params=None):
        self.scheme = 'http'
        self.host = 'localhost'
        self.port = '8000'
        
        if connection_params:
            if connection_params.has_key('scheme'):
            	self.scheme = connection_params['scheme']
            if connection_params.has_key('host'):
            	self.host = connection_params['host']
            if connection_params.has_key('port'):
            	self.port = connection_params['port']
        
        if self.scheme and self.host and self.port:
            self.utils_obj = IUtils(self.scheme, self.host, self.port)
        else:
            raise APIConnectorError("Scheme, host, port needed")
        
        self.api = API(self.utils_obj)
        self.ds = DataStore()
        self.ds.reset()
        self.ds.app_info['consumer_key'] = consumer_key
        self.ds.app_info['consumer_secret'] = consumer_secret 
        self.count = 0
    
    def call(self, method, url, options=None):
        options = options or {}
        
        data = {}
        oauth_token = {}
        parameters = {}
        if options.has_key(DATA): data = options[DATA]
        if options.has_key(PARAMETERS): parameters = options[PARAMETERS]
        #if options.has_key(OAUTH_TOKEN): oauth_token = options[OAUTH_TOKEN]
        #if options.has_key(OAUTH_TOKEN_SECRET): oauth_token_secret = options[OAUTH_TOKEN_SECRET]
        if self.ds.app_info:
            retval = self.utils_obj.http_conn(method, url, self.ds.app_info, parameters=parameters, data=data)
            if retval:
                if isinstance(retval, dict) and retval.has_key(CONTENT):
                    return retval[CONTENT]
                else:
                    return retval
        return False
    
    # produces a GET call to the server with the given method and the given parameters
    def get_response(self, method, parameters=None, debug=False):
    	return self.utils_obj.get_response('post_document', 
					'get', 
					method, 
					[], 
					self.ds.app_info, 
					parameters, 
					debug=debug)
    
    
    def __getattr__(self, func_name):
        cr = CallRes()
        
        def handle_response(response):
            PRD  = 'prd'
            # SZ: Abstarct this out
            prd_vals = {'Account' : 'account_id', 'Document' : 'document_id', 'Record' : 'record_id'}
            for prd_name, attr in prd_vals.items():
                if response.has_key(PRD) and \
                    isinstance(cr.response[PRD], dict) and \
                    response[PRD].has_key(prd_name):
                    id = response[PRD][prd_name]
                    if len(id) > 0 and attr:
                        setattr(self.ds, attr, id[0])
            return True
        
        def internal_getattr(*args, **kwargs):
            if hasattr(self.api, func_name):
                _args, _, _, _defaults = inspect.getargspec(getattr(self.api, func_name))
                kw = {}
                count = 0
                for arg in _args[1:]:
                    if kwargs.has_key(arg):
                        kw[arg] = kwargs[arg]    
                    elif hasattr(self.ds, arg) and \
                        not (getattr(self.ds, arg) is None or getattr(self.ds, arg) == ''):
                            kw[arg] = getattr(self.ds, arg)
                    else:
                        kw[arg] = _defaults[_args.index(arg) - (len(_args) - len(_defaults))]
                    count += 1
                cr.response = getattr(self.api, func_name)(**kw)
                handle_response(cr.response)
                return cr
            return False
        return internal_getattr
    
    def __call__(self, func_name, *args, **kwargs):
        if hasattr(self.api, func_name):
            self.count += 1
            kw = self._get_kwargs(func_name, args, kwargs)
            call_res = getattr(self.api, func_name)(**kw)
            return self.post_call(call_res)
        else:
            raise APIConnectorError("No such API call " + func_name)
    
    def _get_kwargs(self, func_name, args, kwargs):
        SELF = 'self'
        _kw = {}
        _args, _, _, _defaults = inspect.getargspec(getattr(self.api, func_name))
        for arg in _args:
            # Get passed in kwarg
            if len(kwargs) > 0 and kwargs.has_key(arg):
                _kw[arg] = kwargs[arg]
            # If it is an arg it is required, therefore must be non-empty
            elif hasattr(self.ds, arg):
                if not (getattr(self.ds, arg) is None or getattr(self.ds, arg) == ''):
                    _kw[arg] = getattr(self.ds, arg)
                else:
                    raise APIConnectorError(arg + ' is missing')
            # Get passed in arg
            elif len(args) > 1 and args[1].has_key(arg):
                _kw[arg] = args[1][arg]
            # Get defaults
            else:
                _kw[arg] = _defaults[_args.index(arg) - (len(_args) - len(_defaults))]
        if _kw.has_key(SELF):
            del _kw[SELF]
        return _kw
    
    
    def post_call(self, call_res):
        PRD  = 'prd'
        CONTENT = 'content'
        prd_vals = {'Account': 'account_id',
                   'Document': 'document_id',
                      'Entry': None,
               'Measurements': None,
                     'Record': 'record_id',
                     'Result': None}
        if call_res['response_content_type'] == 'text/plain':
            return call_res[PRD]
        elif call_res.has_key(PRD) and isinstance(call_res[PRD], dict):
            for prd_name, attr in prd_vals.items():
                if call_res[PRD].has_key(prd_name):
                    id = call_res[PRD][prd_name]
                    if len(id) > 0:
                        if attr:
                            setattr(self.ds, attr, id[0])
                            #return getattr(self.ds, attr)
                        #else:
                        #    return True
                    #else:
                    #    return False
            #if call_res[PRD].has_key(CONTENT):
            #    return call_res[PRD][CONTENT]
            return call_res
        else:
            return call_res
            #if call_res.has_key(PRD):
            #    raise APIConnectorError(call_res[PRD], include_traceback=True)
        raise APIConnectorError()