Skip to content

Commit 7dddd22

Browse files
authored
Merge pull request #97 from wshlavacek/block-warning-cleanup
Clean up block warning paths
2 parents e9c3e5e + fbce1b3 commit 7dddd22

3 files changed

Lines changed: 375 additions & 58 deletions

File tree

bionetgen/modelapi/blocks.py

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import OrderedDict
33
except ImportError:
44
from collections import OrderedDict
5+
from bionetgen.core.utils.logging import BNGLogger
56
from .structs import Parameter, Compartment, Observable
67
from .structs import MoleculeType, Species, Function
78
from .structs import Rule, Action
@@ -14,6 +15,8 @@
1415
except ImportError:
1516
from collections import OrderedDict
1617

18+
logger = BNGLogger()
19+
1720

1821
###### BLOCK OBJECTS ######
1922
class ModelBlock:
@@ -105,10 +108,11 @@ def __setattr__(self, name, value) -> None:
105108
if name in self.items.keys():
106109
try:
107110
new_value = float(value)
111+
except (TypeError, ValueError):
112+
self.items[name] = value
113+
else:
108114
changed = True
109115
self.items[name] = new_value
110-
except:
111-
self.items[name] = value
112116
if changed:
113117
self._changes[name] = new_value
114118
self.__dict__[name] = new_value
@@ -166,9 +170,13 @@ def add_item(self, item_tpl) -> None:
166170
if isinstance(name, str):
167171
try:
168172
setattr(self, name, value)
169-
except:
170-
print("can't set {} to {}".format(name, value))
171-
pass
173+
except Exception as exc:
174+
logger.warning(
175+
f"Unable to bind attribute {name!r} for the {self.name} block;"
176+
" the item remains available via block.items. "
177+
f"Original error: {exc}",
178+
loc=f"{__file__} : ModelBlock.add_item()",
179+
)
172180
# we just added an item to a block, let's assume we need
173181
# to recompile if we have a compiled simulator
174182
self._recompile = True
@@ -214,16 +222,20 @@ def __setattr__(self, name, value) -> None:
214222
try:
215223
# try a new value, we need to make sure
216224
# to stop printing out the expression
217-
value = float(value)
218-
if self.items[name]["value"] != value:
225+
new_value = float(value)
226+
if self.items[name]["value"] != new_value:
219227
changed = True
220-
self.items[name]["value"] = value
228+
self.items[name]["value"] = new_value
221229
self.items[name].write_expr = False
222-
except:
223-
print(
224-
"can't set parameter {} to {}".format(
225-
self.items[name]["name"], value
226-
)
230+
value = new_value
231+
except (TypeError, ValueError):
232+
logger.warning(
233+
"Unable to set parameter {!r} to {!r}; keeping existing value {!r}".format(
234+
self.items[name]["name"],
235+
value,
236+
self.items[name]["value"],
237+
),
238+
loc=f"{__file__} : ParameterBlock.__setattr__()",
227239
)
228240
if changed:
229241
self._changes[name] = value
@@ -266,15 +278,19 @@ def __setattr__(self, name, value) -> None:
266278
self.items[name]["name"] = value
267279
else:
268280
try:
269-
value = float(value)
270-
if self.items[name]["size"] != value:
281+
new_value = float(value)
282+
if self.items[name]["size"] != new_value:
271283
changed = True
272-
self.items[name]["size"] = value
273-
except:
274-
print(
275-
"can't set compartment {} to {}".format(
276-
self.items[name]["name"], value
277-
)
284+
self.items[name]["size"] = new_value
285+
value = new_value
286+
except (TypeError, ValueError):
287+
logger.warning(
288+
"Unable to set compartment {!r} to {!r}; keeping existing size {!r}".format(
289+
self.items[name]["name"],
290+
value,
291+
self.items[name]["size"],
292+
),
293+
loc=f"{__file__} : CompartmentBlock.__setattr__()",
278294
)
279295
if changed:
280296
self._changes[name] = value
@@ -316,10 +332,13 @@ def __setattr__(self, name, value) -> None:
316332
changed = True
317333
self.items[name]["name"] = value
318334
else:
319-
print(
320-
"can't set observable {} to {}".format(
321-
self.items[name]["name"], value
322-
)
335+
logger.warning(
336+
"Unable to set observable {!r} to {!r}; keeping existing observable {!r}".format(
337+
self.items[name]["name"],
338+
value,
339+
self.items[name]["name"],
340+
),
341+
loc=f"{__file__} : ObservableBlock.__setattr__()",
323342
)
324343
if changed:
325344
self._changes[name] = value
@@ -361,10 +380,13 @@ def __setattr__(self, name, value) -> None:
361380
changed = True
362381
self.items[name]["name"] = value
363382
else:
364-
print(
365-
"can't set species {} to {}".format(
366-
self.items[name]["name"], value
367-
)
383+
logger.warning(
384+
"Unable to set species {!r} to {!r}; keeping existing species {!r}".format(
385+
self.items[name]["name"],
386+
value,
387+
self.items[name]["name"],
388+
),
389+
loc=f"{__file__} : SpeciesBlock.__setattr__()",
368390
)
369391
if changed:
370392
self._changes[name] = value

bionetgen/network/blocks.py

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import OrderedDict
33
except ImportError:
44
from collections import OrderedDict
5+
from bionetgen.core.utils.logging import BNGLogger
56
from .structs import NetworkParameter, NetworkCompartment, NetworkGroup
67
from .structs import NetworkSpecies, NetworkFunction, NetworkReaction
78
from .structs import NetworkEnergyPattern, NetworkPopulationMap
@@ -12,6 +13,8 @@
1213
except ImportError:
1314
from collections import OrderedDict
1415

16+
logger = BNGLogger()
17+
1518

1619
###### BLOCK OBJECTS ######
1720
class NetworkBlock:
@@ -42,6 +45,7 @@ class NetworkBlock:
4245
def __init__(self) -> None:
4346
self.name = "NetworkBlock"
4447
self.comment = (None, None)
48+
self._changes = OrderedDict()
4549
self.items = OrderedDict()
4650

4751
def __str__(self) -> str:
@@ -87,10 +91,11 @@ def __setattr__(self, name, value) -> None:
8791
if name in self.items.keys():
8892
try:
8993
new_value = float(value)
94+
except (TypeError, ValueError):
95+
self.items[name] = value
96+
else:
9097
changed = True
9198
self.items[name] = new_value
92-
except:
93-
self.items[name] = value
9499
if changed:
95100
self._changes[name] = new_value
96101
self.__dict__[name] = new_value
@@ -129,9 +134,13 @@ def add_item(self, item_tpl) -> None:
129134
if isinstance(name, str):
130135
try:
131136
setattr(self, name, value)
132-
except:
133-
# print("can't set {} to {}".format(name, value))
134-
pass
137+
except Exception as exc:
138+
logger.warning(
139+
f"Unable to bind attribute {name!r} for the {self.name} block;"
140+
" the item remains available via block.items. "
141+
f"Original error: {exc}",
142+
loc=f"{__file__} : NetworkBlock.add_item()",
143+
)
135144
# we just added an item to a block, let's assume we need
136145
# to recompile if we have a compiled simulator
137146
self._recompile = True
@@ -174,16 +183,20 @@ def __setattr__(self, name, value) -> None:
174183
try:
175184
# try a new value, we need to make sure
176185
# to stop printing out the expression
177-
value = float(value)
178-
if self.items[name]["value"] != value:
186+
new_value = float(value)
187+
if self.items[name]["value"] != new_value:
179188
changed = True
180-
self.items[name]["value"] = value
189+
self.items[name]["value"] = new_value
181190
self.items[name].write_expr = False
182-
except:
183-
print(
184-
"can't set parameter {} to {}".format(
185-
self.items[name]["name"], value
186-
)
191+
value = new_value
192+
except (TypeError, ValueError):
193+
logger.warning(
194+
"Unable to set parameter {!r} to {!r}; keeping existing value {!r}".format(
195+
self.items[name]["name"],
196+
value,
197+
self.items[name]["value"],
198+
),
199+
loc=f"{__file__} : NetworkParameterBlock.__setattr__()",
187200
)
188201
if changed:
189202
self._changes[name] = value
@@ -226,15 +239,19 @@ def __setattr__(self, name, value) -> None:
226239
self.items[name]["name"] = value
227240
else:
228241
try:
229-
value = float(value)
230-
if self.items[name]["size"] != value:
242+
new_value = float(value)
243+
if self.items[name]["size"] != new_value:
231244
changed = True
232-
self.items[name]["size"] = value
233-
except:
234-
print(
235-
"can't set compartment {} to {}".format(
236-
self.items[name]["name"], value
237-
)
245+
self.items[name]["size"] = new_value
246+
value = new_value
247+
except (TypeError, ValueError):
248+
logger.warning(
249+
"Unable to set compartment {!r} to {!r}; keeping existing size {!r}".format(
250+
self.items[name]["name"],
251+
value,
252+
self.items[name]["size"],
253+
),
254+
loc=f"{__file__} : NetworkCompartmentBlock.__setattr__()",
238255
)
239256
if changed:
240257
self._changes[name] = value
@@ -276,10 +293,13 @@ def __setattr__(self, name, value) -> None:
276293
changed = True
277294
self.items[name]["name"] = value
278295
else:
279-
print(
280-
"can't set group {} to {}".format(
281-
self.items[name]["name"], value
282-
)
296+
logger.warning(
297+
"Unable to set group {!r} to {!r}; keeping existing group {!r}".format(
298+
self.items[name]["name"],
299+
value,
300+
self.items[name]["name"],
301+
),
302+
loc=f"{__file__} : NetworkGroupBlock.__setattr__()",
283303
)
284304
if changed:
285305
self._changes[name] = value
@@ -321,10 +341,13 @@ def __setattr__(self, name, value) -> None:
321341
changed = True
322342
self.items[name]["name"] = value
323343
else:
324-
print(
325-
"can't set species {} to {}".format(
326-
self.items[name]["name"], value
327-
)
344+
logger.warning(
345+
"Unable to set species {!r} to {!r}; keeping existing species {!r}".format(
346+
self.items[name]["name"],
347+
value,
348+
self.items[name]["name"],
349+
),
350+
loc=f"{__file__} : NetworkSpeciesBlock.__setattr__()",
328351
)
329352
if changed:
330353
self._changes[name] = value

0 commit comments

Comments
 (0)