Package libSBtab :: Module Column
[hide private]
[frames] | no frames]

Source Code for Module libSBtab.Column

  1  import re 
  2  import copy 
  3   
  4  import Parser 
  5  import Warning 
  6  import Exception 
  7  import Table 
  8  import Helper 
  9   
10 -class Column:
11 - def __init__(self, parser_function, default_key = None, default_parser_dict = None, name = None):
12 self.parser_function = parser_function 13 self.default_key = default_key 14 self.name = name 15 self.parser_dict = default_parser_dict or {} 16 self.attributes = {}
17
18 - def parse(self, string, part = None):
19 if part: 20 self.changeParserDict(part) 21 dictionary = {"str" : string} 22 dictionary.update(self.parser_dict) 23 return self.parser_function(dictionary)
24
25 - def changeParserDict(self, key_or_value, value = None):
26 if not value: 27 if not self.default_key: 28 return 29 key = self.default_key 30 value = key_or_value 31 else: 32 key = key_or_value 33 self.parser_dict[key] = value
34
35 - def getAttribute(self, name):
36 return self.attributes.get(name)
37
38 - def setAttribute(self, name, value):
39 self.attributes[name] = value
40
41 -class ColumnProxy:
42 - def __init__(self, string):
43 self.original_name = string 44 if string.endswith("*"): 45 string = string[:-1] 46 self.name = "" 47 self.parsing_value = None 48 self.unit = None 49 self.column = None 50 if not (string.startswith("'") and string.endswith("'")): 51 string, self.unit = Helper.split_column_name_and_unit(string) 52 self.name, self.parsing_value = Helper.split_column_name_and_default_value(string) 53 if self.unit is not None: 54 try: 55 if self.unit.startswith("[") and self.unit.endswith("]"): 56 self.unit = self.unit[1:-1] 57 self.setAttribute("Unit", self.unit) 58 else: 59 raise Exception.SimpleError("The unit in %(name)s must be surrounded with '[' and ']' (%(unit)s)" % self.__dict__) 60 except Exception.SimpleError, err: 61 Warning.warn(Warning.FirstLineWarning(None, str(err)))
62
63 - def mergeQuantity(self, quantity_row):
64 for key, value in quantity_row.attributes.iteritems(): 65 if not self.column.getAttribute(key): 66 if key != "Quantity" or not self.column.getAttribute("ColumnName"): 67 self.setAttribute(key, value)
68
69 - def getAttribute(self, name):
70 return self.column.getAttribute(name)
71
72 - def setAttribute(self, name, value):
73 if name in ["Quantity", "ColumnName"]: 74 if value: 75 self.name, self.parsing_value = Helper.split_column_name_and_default_value(value) 76 elif name == "Unit": 77 unit = Parser.parse_unit({"str" : value}) 78 self.unit = unit 79 if self.column: 80 self.column.setAttribute(name, value)
81
82 - def setColumn(self, table, column):
83 self.column = column 84 self.column.changeParserDict(self.parsing_value) 85 if self.column.name in ["ID", "ReactionID", "ReactionFormula", "Name"]: 86 try: 87 if self.parsing_value not in table.getDocument().knownValues(Table.ResourceTable, "ResourceName"): 88 Warning.warn(Warning.FirstLineWarning(table.filename, "The identifier value for %s is not known (%s)." % (self.column.name, self.parsing_value))) 89 else: 90 if self.column.name in ["ID", "ReactionID"]: 91 # find the id-pattern 92 resource_tables = table.getDocument().getTables(Table.ResourceTable) 93 for resource_table in resource_tables: 94 for resource in resource_table: 95 if resource.getResource() == self.parsing_value: 96 self.column.changeParserDict("re", re.compile(resource.getIDPattern())) 97 except Exception.NoDocumentError: 98 Warning.warn(Warning.FirstLineWarning(table.filename, "The identifier value for %s could not be validated (%s). For this Table, a Document with a ResourceTable should be present" % (self.column.name, self.parsing_value)))
99
100 - def __str__(self):
101 format_string = "%(name)s" 102 if self.parsing_value: 103 format_string = format_string + ":%(parsing_value)s" 104 if self.unit: 105 format_string = format_string + " [%(unit)s]" 106 return format_string % self.__dict__
107
108 - def __repr__(self):
109 return str(self)
110
111 - def __getslice__(self, begin, end):
112 copied = copy.deepcopy(self) 113 copied.name = self.name[begin:end] 114 return copied
115
116 - def __radd__(self, other):
117 return other + self.name
118
119 - def __getattr__(self, name):
120 return getattr(self.name, name)
121
122 -def DBName(): return Column(Parser.parse_database, name = "DBName")
123 -def URI(): return Column(Parser.parse_string, name = "URI")
124 -def URN(): return Column(Parser.parse_string, name = "URN")
125 -def IDPattern(): return Column(Parser.parse_string, name = "IDPattern")
126 -def Location(): return Column(Parser.parse_string, name = "Location")
127 -def Elements(): return Column(Parser.parse_string, name = "Elements")
128 -def Action(): return Column(Parser.parse_string, name = "Action")
129 -def IDInputHelper(): return Column(Parser.parse_string, name = "IDInputHelper")
130 -def AlternateURIs(): return Column(Parser.parse_string, name = "AlternateURIs")
131 -def ID(): return Column(Parser.parse_id, "database", name = "ID")
132 -def Name(): return Column(Parser.parse_id, "database", name = "Name")
133 -def ReferenceID(): return Column(Parser.parse_full_id, "database", name = "ReferenceID")
134 -def ReferenceName(): return Column(Parser.parse_nickname, name = "ReferenceName")
135 -def Position(): return Column(Parser.parse_position, name = "Position")
137 -def SimpleString(): return Column(Parser.parse_string_with_nan, name = "SimpleString")
138 -def Value(): return Column(Parser.parse_numerical, name = "Value")
139 -def Std(): return Column(Parser.parse_numerical, name = "Std")
140 -def Nickname(): return Column(Parser.parse_nickname, name = "Nickname")
141 -def ColumnName(): return Column(Parser.parse_column, name = "ColumnName")
142 -def BuildElement(): return Column(Parser.parse_bool, name = "BuildElement")
143 -def IsConstant(): return Column(Parser.parse_bool, name = "IsConstant")
144 -def Split(): return Column(Parser.parse_bool, name = "Split")
145 -def Charge(): return Column(Parser.parse_numerical, name = "Charge")
146 -def Mass(): return Column(Parser.parse_numerical, name = "Mass")
147 -def Size(): return Column(Parser.parse_numerical, name = "Size")
148 -def OuterCompartment(): return Column(Parser.parse_nickname, name = "OuterCompartment")
149 -def Unit(): return Column(Parser.parse_unit, name = "Unit")
150 -def ReactionID(): return Column(Parser.parse_reaction_id, "database", name = "ReactionID")
151 -def ReactionFormula(): return Column(Parser.parse_reaction_formula, "database", name = "ReactionFormula")
152 -def Gene(): return Column(Parser.parse_string_with_nan, name = "Gene")
153 -def EnzymeRegulators(): return Column(Parser.parse_reaction_formula, name = "EnzymeRegulators")
154 -def EnzymeRegulationBoolean(): return Column(Parser.parse_reaction_formula, name = "EnzymeRegulationBoolean")
155 -def TranscriptionalRegulation(): return Column(Parser.parse_string, name = "TranscriptionalRegulation")
156 -def TranslationalRegulation(): return Column(Parser.parse_string, name = "TranslationalRegulation")
157 -def Quantity(): return Column(Parser.parse_string, name = "Quantity")
158 -def Mean(): return Column(Parser.parse_numerical, name = "Mean")
159 -def MathDescriptor(): return Column(Parser.parse_string, name = "MathDescriptor")
160 -def Time(): return Column(Parser.parse_string, name = "Time")
161 -def Description(): return Column(Parser.parse_string, name = "Description")
162 -def DataType(): return Column(Parser.parse_datatype, name = "DataType")
163
164 -def Compartment(): return Column(Parser.parse_string, name = "Compartment")
165 -def Compound(): return Column(Parser.parse_string, name = "Compound")
166 -def Reaction(): return Column(Parser.parse_string, name = "Reaction")
167 -def Enzyme(): return Column(Parser.parse_string, name = "Enzyme")
168 -def QuantityType(): return Column(Parser.parse_string, name = "QuantityType")
169 -def SBMLid(): return Column(Parser.parse_string, name = "SBMLid")
170 -def MathTransformation(): return Column(Parser.parse_string, name = "MathTransformation")
171 -def pH(): return Column(Parser.parse_string, name = "pH")
172 -def Temperature(): return Column(Parser.parse_string, name = "Temperature")
173 -def CompartmentID_DB(): return Column(Parser.parse_string, name = "CompartmentID_DB")
174 -def CompartmentName(): return Column(Parser.parse_string, name = "CompartmentName")
175 -def CompartmentSBMLid(): return Column(Parser.parse_string, name = "CompartmentSBMLid")
176 -def CompoundID_KEGG_Compound(): return Column(Parser.parse_string, name = "CompoundID_KEGG_Compound")
177 -def CompoundID_KEGG_Compound(): return Column(Parser.parse_string, name = "CompoundID_KEGG_Compound")
178 -def CompoundName(): return Column(Parser.parse_string, name = "CompoundName")
179 -def CompoundSBMLid(): return Column(Parser.parse_string, name = "CompoundSBMLid")
180 -def ReactionID_KEGG_Reaction(): return Column(Parser.parse_string, name = "ReactionID_KEGG_Reaction")
181 -def ReactionName(): return Column(Parser.parse_string, name = "ReactionName")
182 -def ReactionSBMLid(): return Column(Parser.parse_string, name = "ReactionSBMLid")
183 -def EnzymeID_EC(): return Column(Parser.parse_string, name = "EnzymeID_EC")
184 -def EnzymeName(): return Column(Parser.parse_string, name = "EnzymeName")
185 -def EnzymeSBMLid(): return Column(Parser.parse_string, name = "EnzymeSBMLid")
186 -def GeneID_DB(): return Column(Parser.parse_string, name = "GeneID_DB")
187 -def GeneName(): return Column(Parser.parse_string, name = "GeneName")
188 -def OrganismName(): return Column(Parser.parse_string, name = "OrganismName")
189 -def OrganismID_DB(): return Column(Parser.parse_string, name = "OrganismID_DB")
190 -def Mean(): return Column(Parser.parse_string, name = "Mean")
191 -def Std(): return Column(Parser.parse_string, name = "Std")
192