Beispiel #1
0
 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
Beispiel #2
0
 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)
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
    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)
Beispiel #6
0
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
Beispiel #7
0
 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
Beispiel #8
0
 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)
Beispiel #9
0
    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
Beispiel #10
0
    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)))