class ControlType(Entity): _URI = "controltypes" _TAG = "control-type" _PREFIX = 'ctrltp' name = StringAttributeDescriptor('name') supplier = StringDescriptor('supplier') archived = BooleanDescriptor('archived') single_step = BooleanDescriptor('single_step')
class Controltype(Entity): """Control sample.""" _URI = 'controltypes' _TAG = 'control-type' _PREFIX = 'ctrltp' name = StringAttributeDescriptor('name') supplier = StringDescriptor('supplier') catalogue_number = StringDescriptor('catalogue-number') website = StringDescriptor('website') concentration = StringDescriptor('concentration') archived = BooleanDescriptor('archived') single_step = BooleanDescriptor('single-step')
class File(Entity): "File attached to a project or a sample." attached_to = StringDescriptor('attached-to') content_location = StringDescriptor('content-location') original_location = StringDescriptor('original-location') is_published = BooleanDescriptor('is-published')
class ReagentKit(Entity): """Type of Reagent with information about the provider""" _URI = "reagentkits" _TAG = "reagent-kit" _PREFIX = 'kit' name = StringDescriptor('name') supplier = StringDescriptor('supplier') website = StringDescriptor('website') archived = BooleanDescriptor('archived')
class Instrument(Entity): """Lab Instrument """ _URI = "instruments" _TAG = "instrument" _PREFIX = "inst" name = StringDescriptor('name') type = StringDescriptor('type') serial_number = StringDescriptor('serial-number') expiry_date = StringDescriptor('expiry-date') archived = BooleanDescriptor('archived')
class Udfconfig(Entity): "Instance of field type (cnf namespace)." _URI = 'configuration/udfs' name = StringDescriptor('name') attach_to_name = StringDescriptor('attach-to-name') attach_to_category = StringDescriptor('attach-to-category') show_in_lablink = BooleanDescriptor('show-in-lablink') allow_non_preset_values = BooleanDescriptor('allow-non-preset-values') first_preset_is_default_value = BooleanDescriptor( 'first-preset-is-default-value') show_in_tables = BooleanDescriptor('show-in-tables') is_editable = BooleanDescriptor('is-editable') is_required = BooleanDescriptor('is-required') is_deviation = BooleanDescriptor('is-deviation') is_controlled_vocabulary = BooleanDescriptor('is-controlled-vocabulary') presets = StringListDescriptor('preset')
class ProcessTypeProcessInput(object): instance = None name = None root = None tag = '' artifact_type = StringDescriptor('artifact-type') display_name = StringDescriptor('display-name') remove_working_flag = BooleanDescriptor('remove-working-flag') def __init__(self, pt_instance, node): self.instance = pt_instance self.root = node def get(self): pass
class ProcessTypeProcessInput(object): instance = None name = None root = None tag = '' artifact_type = StringDescriptor('artifact-type') display_name = StringDescriptor('display-name') remove_working_flag = BooleanDescriptor('remove-working-flag') def __init__(self, pt_instance, node): self.instance = pt_instance self.root = node self.lims = pt_instance.lims def __repr__(self): return "{0}({1})".format(self.__class__.__name__, self.display_name) def get(self): pass
class Artifact(Entity): "Any process input or output; analyte or file." _URI = 'artifacts' _TAG = 'artifact' _PREFIX = 'art' name = StringDescriptor('name') type = StringDescriptor('type') output_type = StringDescriptor('output-type') parent_process = EntityDescriptor('parent-process', Process) volume = StringDescriptor('volume') concentration = StringDescriptor('concentration') qc_flag = StringDescriptor('qc-flag') location = LocationDescriptor('location') working_flag = BooleanDescriptor('working-flag') samples = EntityListDescriptor('sample', Sample) udf = UdfDictionaryDescriptor() files = EntityListDescriptor(nsmap('file:file'), File) reagent_labels = ReagentLabelList() # artifact_flags XXX # artifact_groups XXX def input_artifact_list(self): """Returns the input artifact ids of the parrent process.""" input_artifact_list = [] try: for tuple in self.parent_process.input_output_maps: if tuple[1]['limsid'] == self.id: input_artifact_list.append(tuple[0]['uri']) # ['limsid']) except: pass return input_artifact_list def get_state(self): "Parse out the state value from the URI." parts = urlparse(self.uri) params = parse_qs(parts.query) try: return params['state'][0] except (KeyError, IndexError): return None @property def container(self): "The container where the artifact is located, or None" try: return self.location[0] except: return None def stateless(self): "returns the artefact independently of it's state" parts = urlparse(self.uri) if 'state' in parts[4]: stateless_uri = urlunparse( [parts[0], parts[1], parts[2], parts[3], '', '']) return Artifact(self.lims, uri=stateless_uri) else: return self # XXX set_state ? state = property(get_state) stateless = property(stateless) def _get_workflow_stages_and_statuses(self): self.get() result = [] rootnode = self.root.find('workflow-stages') for node in rootnode.findall('workflow-stage'): result.append((Stage(self.lims, uri=node.attrib['uri']), node.attrib['status'], node.attrib['name'])) return result workflow_stages_and_statuses = property(_get_workflow_stages_and_statuses)