Skip to content
This repository was archived by the owner on Dec 20, 2024. It is now read-only.

Add the option to login with a crypted url #2

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
50 changes: 36 additions & 14 deletions pyade/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ def get_info(key, default_value=None):
try:
return(os.environ[ENV_VAR_KEY])
except:
logging.warning("You should pass %s using --%s or using environment variable %r" % (key, key, ENV_VAR_KEY))
#logging.warning("You should pass %s using --%s or using environment variable %r" % (key, key, ENV_VAR_KEY))
#user only provide crypted url, or login/password, the warning is no more appropriate
return(default_value)
else:
return(default_value)
Expand Down Expand Up @@ -115,13 +116,12 @@ class Config(HiddenDict):
password is never displayed but is stored in this class"""
def __init__(self, **kwargs):
super(Config, self).__init__(hidden_keys=['password'], **kwargs)
# super(Config, self).__init__(hidden_keys=['password'],
# replace_keys={'url': 'server'}, **kwargs)
#super(Config, self).__init__(hidden_keys=['password'],replace_keys={'url': 'server'}, **kwargs)

@staticmethod
def create(**default_values):
d = Config()
for key in ['url', 'login', 'password']:
for key in ['url', 'login', 'password', 'cryptedLogin']:
if key in default_values.keys():
d[key] = get_info(key, default_values[key])
else:
Expand Down Expand Up @@ -223,10 +223,11 @@ def create_object(self, typ, **kwargs):

class ADEWebAPI():
"""Class to manage ADE Web API (reader only)"""
def __init__(self, url, login, password):
def __init__(self, url, login, password, cryptedLogin):
self.url = url
self.login = login
self.password = password
self.cryptedLogin = cryptedLogin

self.sessionId = None

Expand All @@ -244,7 +245,7 @@ def __init__(self, url, login, password):
'type', 'email', 'url', 'size', 'quantity', 'code', 'address1',
'address2', 'zipCode', 'state', 'city', 'country', 'telephone',
'fax', 'timezone', 'jobCategory', 'manager', 'codeX', 'codeY',
'codeZ', 'info', 'detail']),
'codeZ', 'info', 'detail', 'fatherIds']),
'getActivities': set(['tree', 'id', 'name', 'resources', 'type', 'url',
'capacity', 'duration', 'repetition', 'code', 'timezone', 'codeX',
'codeY', 'codeZ', 'maxSeats', 'seatseLeft', 'info', 'detail']),
Expand Down Expand Up @@ -292,6 +293,21 @@ def _send_request(self, func, **params):

return(element)

def _send_crypted_request(self, data):
"""Send a request"""
params = dict()
params['data'] = data

self.logger.debug("send %s" % hide_dict_values(params))
response = requests.get(self.url, params=params)
self.logger.debug(response)
self.logger.debug(response.text)
element = ET.fromstring(response.text)

self._parse_error(element)

return(element)

def _parse_error(self, element):
"""Parses XML message and raises an Exception if
this XML message is an error on server side"""
Expand All @@ -301,9 +317,15 @@ def _parse_error(self, element):
def connect(self):
"""Connect to server"""
function = 'connect'
element = self._send_request(function,
login=self.login, password=self.password)
returned_sessionId = element.attrib["id"]
if(self.login!=None and self.password!=None):
element = self._send_request(function, login=self.login, password=self.password)
elif(self.cryptedLogin!=None):
element = self._send_crypted_request(self.cryptedLogin)

try:
returned_sessionId = element.attrib["id"]
except:
returned_sessionId = None
self.sessionId = returned_sessionId
return(returned_sessionId is not None)

Expand All @@ -320,7 +342,7 @@ def _test_opt_params(self, given_params, function):
opt_params = self.opt_params[function]
given_params = set(given_params.keys())
msg = "One (or many) parameters of '%s' call are not allowed. %s is not in %s" \
% ('getResources', given_params-opt_params, opt_params)
% (function, given_params-opt_params, opt_params)
assert given_params <= opt_params, msg

def _create_list_of_dicts(self, category, lst):
Expand All @@ -335,7 +357,7 @@ def _create_list_of_objects(self, category, lst):
def getProjects(self, **kwargs):
"""Returns (list of) projects"""
function = 'getProjects'
# element = self._send_request(function, detail=detail, id=id)
#element = self._send_request(function, detail=detail, id=id)
element = self._send_request(function, **kwargs)
lst_projects = element.findall('project')
lst_projects = self._create_list_of('project', lst_projects)
Expand Down Expand Up @@ -412,7 +434,7 @@ def getCaracteristics(self, **kwargs):
def getDate(self, week, day, slot):
"""Returns date object from week, day, slot"""
function = 'getDate'
# self._test_opt_params(kwargs, function) # no keyword arguments (kwargs)
#self._test_opt_params(kwargs, function) # no keyword arguments (kwargs)
element = self._send_request(function, week=week, day=day, slot=slot)
date = Date(**element.attrib)
return(date)
Expand All @@ -425,7 +447,7 @@ def imageET(self, **kwargs):
if 'function' not in kwargs.keys():
kwargs['function'] = function

# self._test_opt_params(kwargs, function)
#self._test_opt_params(kwargs, function)

if 'sessionId' not in kwargs.keys():
if self.sessionId is not None:
Expand All @@ -450,7 +472,7 @@ def first_date(self):

def week_id(self, date=datetime.date.today()):
"""Returns week number for a given date"""
# week = ((date1-date0)/7).days
#week = ((date1-date0)/7).days

if self._first_date is None:
self._first_date = self.first_date()
Expand Down