####################################################################################################
#
# PyValentina - A Python implementation of Valentina Pattern Drafting Software
# Copyright (C) 2017 Fabrice Salvaire
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
####################################################################################################
####################################################################################################
import logging
from .Calculator import Calculator, NamedExpression
####################################################################################################
_module_logger = logging.getLogger(__name__)
####################################################################################################
[docs]class Personal:
##############################################
def __init__(self, first_name=None, last_name=None, birth_date=None, gender=None, email=None):
self._first_name = first_name
self._last_name = last_name
self._birth_date = birth_date
self._gender = gender
self._email = email
##############################################
@property
def first_name(self):
return self._first_name
@first_name.setter
def first_name(self, value):
self._first_name = value
@property
def last_name(self):
return self._last_name
@last_name.setter
def last_name(self, value):
self._last_name = value
@property
def birth_date(self):
return self._birth_date
@birth_date.setter
def birth_date(self, value):
self._birth_date = value
@property
def gender(self):
return self._gender
@gender.setter
def gender(self, value):
self._gender = value
@property
def email(self):
return self._email
@email.setter
def email(self, value):
self._email = value
####################################################################################################
[docs]class Measurements:
_logger = _module_logger.getChild('Measurements')
##############################################
def __init__(self):
self._unit = None
self._pattern_making_system = None
self._personal = Personal()
self._measures = []
self._measure_dict = {}
self._calculator = Calculator(self)
##############################################
@property
def calculator(self):
return self._calculator
@property
def personal(self):
return self._personal
@property
def unit(self):
return self._unit
@unit.setter
def unit(self, value):
self._unit = value
@property
def pattern_makin_system(self):
return self._pattern_makin_system
@pattern_makin_system.setter
def pattern_makin_system(self, value):
self._pattern_makin_system = value
##############################################
def __iter__(self):
return iter(self._measures)
##############################################
def __getitem__(self, name):
return self._measure_dict[name]
##############################################
[docs] def add(self, *args, **kgwars):
measurement = Measurement(self, *args, **kgwars)
self._measures.append(measurement)
self._measure_dict[measurement.name] = measurement
if measurement.is_custom():
self._measure_dict[measurement.valentina_name] = measurement
##############################################
[docs] def eval(self):
# Fixme: eval / compute a graph from the ast to evaluate
self._logger.info('Eval all measurements')
for measure in self:
measure.eval()
##############################################
[docs] def dump(self):
print("\nDump measurements:")
for measure in self:
print(measure.name, '=', measure.expression)
print(' =', measure.value)
####################################################################################################
[docs]class Measurement(NamedExpression):
##############################################
def __init__(self, measurements, name, value, full_name='', description=''):
self._valentina_name = name
if self.is_custom():
name = '__custom__' + name[1:]
NamedExpression.__init__(self, name, value, calculator=measurements.calculator)
self._full_name = full_name
self._description = description
##############################################
@property
def valentina_name(self):
return self._valentina_name
@property
def full_name(self):
return self._full_name
@property
def description(self):
return self._description
##############################################
[docs] def is_custom(self):
return self._valentina_name.startswith('@')
##############################################
[docs] def eval(self):
super(Measurement, self).eval()
self._calculator._update_cache(self)