mirri_utils/mirri/entities/growth_medium.py

48 lines
1.7 KiB
Python

class GrowthMedium:
fields = ['record_id', 'record_name', 'acronym', 'full_description',
'ingredients', 'description', 'other_name', 'ph',
'sterilization_conditions']
def __init__(self, **kwargs):
self._data = {}
for field in self.fields:
if field in kwargs and kwargs['field'] is not None:
value = kwargs['field']
setattr(self, field, value)
def __setattr__(self, attr, value):
if attr == '_data':
super().__setattr__(attr, value)
return
if attr not in self.fields:
raise TypeError(f'{attr} not an allowed attribute')
self._data[attr] = value
def __getattr__(self, attr):
if attr == '_data':
return super
if attr not in self.fields and attr != '_data':
raise TypeError(f'{attr} not an allowed attribute')
return self._data.get(attr, None)
def dict(self):
return self._data
def update(self, growth_media, include_fields=None):
for field in self.fields:
if include_fields and field in include_fields:
new_value = getattr(growth_media, field, None)
actual_value = getattr(self, field, None)
if new_value is not None and new_value != actual_value:
setattr(self, field, new_value)
def is_equal(self, other, exclude_fields=[]):
for field in self.fields:
if field in exclude_fields:
continue
value_of_other = getattr(other, field, None)
value_of_self = getattr(self, field, None)
if value_of_self is not None and value_of_self != value_of_other:
return False
return True