Source code for s4.clarity.researcher
# Copyright 2017 Semaphore Solutions, Inc.
# ---------------------------------------------------------------------------
from ._internal import FieldsMixin, ClarityElement
from s4.clarity.role import Role
from ._internal.props import subnode_property, subnode_links, subnode_link
from s4.clarity import ETree
from s4.clarity.lab import Lab
[docs]class Researcher(FieldsMixin, ClarityElement):
UNIVERSAL_TAG = "{http://genologics.com/ri/researcher}researcher"
ATTACH_TO_NAME = "ClientResearcher"
first_name = subnode_property("first-name")
last_name = subnode_property("last-name")
email = subnode_property("email")
initials = subnode_property("initials")
_locked = subnode_property("credentials/account-locked")
@property
def locked(self):
val = self._locked
return str(val).lower() == "true" if val is not None else False
@locked.setter
def locked(self, value):
self._locked = "true" if value else "false"
# Alias for locked property (UI terminology)
@property
def archived(self):
return self.locked
@archived.setter
def archived(self, value):
self.locked = value
lab = subnode_link(Lab, "lab", attributes=("uri",))
username = subnode_property("credentials/username")
password = subnode_property("credentials/password")
roles = subnode_links(Role, "credentials/role")
[docs] def add_role(self, new_role):
credentials_node = self.xml_find("credentials")
for child in credentials_node:
if child.tag == "role" and child.get("name") == new_role.name:
return
ETree.SubElement(credentials_node, "role", {"uri": new_role.uri})
[docs] def remove_role(self, role):
credentials_node = self.xml_find("credentials")
nodes_to_remove = []
for child in credentials_node:
if child.tag == "role" and child.get("name") == role.name:
nodes_to_remove.append(child)
for n in nodes_to_remove:
credentials_node.remove(n)