def getObj2add(self): """Return resulting obj due to user input data""" if issubtype(self.objType, bool): obj = self.widget.isChecked() elif issubtype(self.objType, str): obj = self.widget.text() elif issubtype(self.objType, int): obj = int(self.widget.text()) elif issubtype(self.objType, float): obj = float(self.widget.text()) elif issubtype(self.objType, (Enum, Type)): obj = self.widget.currentData() return obj
def setVal(self, val): if issubtype(self.objType, bool) and isoftype(val, bool): self.widget.setChecked(bool(val)) elif issubtype(self.objType, str) and isoftype(val, str): self.widget.setText(val) elif issubtype(self.objType, int) and isoftype(val, int): self.widget.setText(str(val)) elif issubtype(self.objType, float) and isoftype(val, (int, float)): self.widget.setText(str(val)) elif issubtype(self.objType, (Enum, Type)): index = self.widget.findData(val) if index >= 0: self.widget.setCurrentIndex(index)
def getObj2add(self): """Return resulting obj due to user input data""" if issubtype(self.objType, datetime.tzinfo): text = self.widget.currentData() if text is not None: obj = pytz.timezone(text) else: obj = None elif issubtype(self.objType, datetime.datetime): obj = self.widget.dateTime() elif issubtype(self.objType, datetime.date): obj = self.widget.date() elif issubtype(self.objType, datetime.time): obj = self.widget.time() elif issubtype(self.objType, dateutil.relativedelta.relativedelta): obj = self.widget.duration() elif issubtype(self.objType, decimal.Decimal): obj = decimal.Decimal.from_float(float(self.widget.text())) elif issubtype(self.objType, bytes): obj = self.widget.getObj2add() elif issubtype(self.objType, bytearray): obj = self.widget.getObj2add() if obj is not None: obj = bytearray(obj) return obj
def getObj2add(self): """Return resulting obj due to user input data""" listObj = [] for widget in self.inputWidgets: listObj.append(widget.getObj2add()) if issubtype(self.objType, tuple): obj = tuple(listObj) elif issubtype(self.objType, list): obj = list(listObj) elif issubtype(self.objType, set): obj = set(listObj) elif issubtype(self.objType, dict): obj = dict(listObj) else: obj = list(listObj) return obj
def _addInputWidget(self, objVal=None): if ... in self.argTypes: self.argTypes.remove(...) if not issubtype(self.objType, dict): if len(self.argTypes) == 1: argType = self.argTypes[0] else: raise TypeError( f"expected 1 argument, got {len(self.argTypes)}", self.argTypes) else: # if parentType = dict if len(self.argTypes) == 2: DictItem._field_types["key"] = self.argTypes[0] DictItem._field_types["value"] = self.argTypes[1] argType = DictItem else: raise TypeError( f"expected 2 arguments, got {len(self.argTypes)}", self.argTypes) self.kwargs.update({ "objType": argType, "title": f"{getTypeName(argType)} {len(self.inputWidgets)}", "rmDefParams": self.rmDefParams, "objVal": objVal }) widget = getInputWidget(**self.kwargs) if not isinstance(widget, GroupBox): widget = SingleWidgetGroupBox(widget) widget.setClosable(True) widget.setFlat(True) widget.toggled.connect(lambda: self.delInputWidget(widget)) self.inputWidgets.append(widget) self.layout().insertWidget(self.layout().count() - 1, widget)
def getInputWidget(objType, rmDefParams=True, title="", attrsToHide: dict = None, parent=None, objVal=None, **kwargs) -> QWidget: print(objType, objType.__str__, objType.__repr__, objType.__class__) if objVal and not isoftype(objVal, objType): print("Given object type does not match to real object type:", objType, objVal) objVal = None attrsToHide = attrsToHide if attrsToHide else DEFAULT_ATTRS_TO_HIDE.copy() kwargs = { "rmDefParams": rmDefParams, "title": title, "attrsToHide": attrsToHide, "parent": parent, "objVal": objVal, **kwargs } if isabstract(objType) and not isIterableType(objType): objTypes = inheritors(objType) widget = TypeOptionObjGroupBox(objTypes, **kwargs) elif isSimpleIterableType(objType): widget = IterableGroupBox(objType, **kwargs) elif issubtype(objType, Union): objTypes = objType.__args__ widget = TypeOptionObjGroupBox(objTypes, **kwargs) elif issubtype(objType, AASReference): widget = AASReferenceGroupBox(objType, **kwargs) elif issubtype(objType, SpecialInputWidget.types): widget = SpecialInputWidget(objType, **kwargs) elif issubtype(objType, StandardInputWidget.types): widget = StandardInputWidget(objType, **kwargs) else: widget = ObjGroupBox(objType, **kwargs) return widget
def _initWidget(self, **kwargs): if issubtype(self.objType, datetime.tzinfo): timezones = pytz.all_timezones widget = CompleterComboBox(self) widget.addItem("None", None) for timezone in timezones: widget.addItem(timezone, timezone) elif issubtype(self.objType, datetime.datetime): widget = DateTimeEdit(self) elif issubtype(self.objType, datetime.date): widget = DateEdit(self) elif issubtype(self.objType, datetime.time): widget = TimeEdit(self) elif issubtype(self.objType, dateutil.relativedelta.relativedelta): widget = DurationEdit(self) elif issubtype(self.objType, decimal.Decimal): widget = LineEdit(self) widget.setValidator(QDoubleValidator()) elif issubtype(self.objType, (bytes, bytearray)): widget = BytesEdit(self) return widget
def setVal(self, val): if val is not None: if issubtype(self.objType, datetime.datetime) and isoftype( val, datetime.datetime): self.widget.setDateTime(val) elif issubtype(self.objType, datetime.date) and isoftype( val, datetime.date): self.widget.setDate(val) elif issubtype(self.objType, datetime.time) and isoftype( val, datetime.time): self.widget.setTime(val) elif issubtype(self.objType, datetime.tzinfo) and isoftype( val, datetime.tzinfo): self.widget.setCurrentIndex(self.widget.findData(val)) elif issubtype(self.objType, dateutil.relativedelta.relativedelta) \ and isoftype(val, dateutil.relativedelta.relativedelta): self.widget.setDuration(val) elif issubtype(self.objType, decimal.Decimal) and isoftype( val, (decimal.Decimal, int, float)): self.widget.setText(str(float(val))) elif issubtype(self.objType, bytes) and isoftype(val, bytes): text = val.decode("utf-8") self.widget.setPlainText(text)
def _initWidget(self, **kwargs): if issubtype(self.objType, bool): widget = QCheckBox(self) elif issubtype(self.objType, str): widget = LineEdit(self) if kwargs.get("completions"): completer = QCompleter(kwargs["completions"], self) widget.setCompleter(completer) elif issubtype(self.objType, int): widget = LineEdit(self) widget.setValidator(QIntValidator()) elif issubtype(self.objType, float): widget = LineEdit(self) widget.setValidator(QDoubleValidator()) elif issubtype(self.objType, (Enum, Type)): if issubtype(self.objType, Enum): # add enum types to types types = [member for member in self.objType] else: # Type union = self.objType.__args__[0] if type(union) == TypeVar: # add Type inheritors to types baseType = union.__bound__ types = inheritors(baseType) else: # add Union Type attrs to types types = union.__args__ if len(types) <= 6: widget = QComboBox(self) else: widget = CompleterComboBox(self) for typ in types: widget.addItem(getTypeName(typ), typ) widget.model().sort(0, Qt.AscendingOrder) if widget.count(): widget.setCurrentIndex(0) return widget
def test_issubtype(self): self.assertTrue(issubtype(int, int)) self.assertTrue(issubtype(AASReference, AASReference)) self.assertTrue(issubtype(AASReference, Reference)) self.assertTrue(issubtype(AASReference, AASReference[str])) self.assertTrue(issubtype(list, List[int])) self.assertTrue(issubtype(list, Optional[List[int]])) self.assertTrue(issubtype(Type, Type)) self.assertTrue(issubtype(str, Type[str])) self.assertTrue(issubtype(str, Type[Union[int, float, str]])) self.assertTrue(issubtype(float, Union[int, float, str])) self.assertTrue(issubtype(IdentifierType, Enum)) self.assertTrue(issubtype(int, (int, str))) self.assertTrue(issubtype(list, (set, List[int]))) self.assertTrue(issubtype(list, Optional[List[int]])) self.assertTrue( issubtype(IdentifierType, (bool, str, int, float, Enum, Type))) self.assertTrue( issubtype( str, typing.Type[typing.Union[ dateutil.relativedelta.relativedelta, datetime.datetime, aas.model.datatypes.Date, datetime.time, aas.model.datatypes.GYearMonth, aas.model.datatypes.GYear, aas.model.datatypes.GMonthDay, aas.model.datatypes.GMonth, aas.model.datatypes.GDay, bool, aas.model.datatypes.Base64Binary, aas.model.datatypes.HexBinary, aas.model.datatypes.Float, float, decimal.Decimal, int, aas.model.datatypes.Long, aas.model.datatypes.Int, aas.model.datatypes.Short, aas.model.datatypes.Byte, aas.model.datatypes.NonPositiveInteger, aas.model.datatypes.NegativeInteger, aas.model.datatypes.NonNegativeInteger, aas.model.datatypes.PositiveInteger, aas.model.datatypes.UnsignedLong, aas.model.datatypes.UnsignedInt, aas.model.datatypes.UnsignedShort, aas.model.datatypes.UnsignedByte, aas.model.datatypes.AnyURI, str, aas.model.datatypes.NormalizedString]])) self.assertFalse(issubtype(list, Set[str])) self.assertFalse(issubtype(AASReference, Submodel)) self.assertFalse(issubtype(Submodel, AASReference[str])) self.assertFalse(issubtype(Submodel, Union[int, float, str])) self.assertFalse(issubtype(str, Union)) self.assertFalse(issubtype(str, Type)) self.assertFalse(issubtype(int, (float, str)))