pyebus.types module

Type Engine.

class pyebus.types.Type[source]

Bases: object

Abstract Type.

with_divider(divider)[source]

Return copy and apply divider.

decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.EnumType(values)[source]

Bases: Type

Enumeration of values.

Pure integer values are passed through, as they have an unknown coding.

>>> t = EnumType(('on', 'auto', 'off'))
>>> t
EnumType(('on', 'auto', 'off'))
>>> t.values
('on', 'auto', 'off')
>>> t.comment
'on, auto, off'
>>> t.encode('auto')
'auto'
>>> t.encode(5)
'5'
>>> t.encode('5')
'5'
>>> t.encode('super')
Traceback (most recent call last):
  ...
ValueError: Unknown value 'super'. Allowed values are on, auto, off.
>>> t.encode(None)
'-'
>>> t.decode('-') is None
True
>>> t.decode('auto')
'auto'
>>> t.decode('7')
7
>>> t.decode('super')
Traceback (most recent call last):
  ...
ValueError: Unknown value 'super'. Allowed values are on, auto, off.
property values

Enumeration Values.

decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.StrType(length=None)[source]

Bases: Type

String with optional maximum length.

>>> t = StrType()
>>> t
StrType()
>>> t.length is None
True
>>> t.encode('a string')
'a string'
>>> t.decode('a string')
'a string'
>>> t.comment is None
True

With length:

>>> t = StrType(10)
>>> t
StrType(length=10)
>>> t.length
10
>>> t.encode('a string')
'a string'
>>> t.decode('a string')
'a string'
>>> t.encode('a very long string')
Traceback (most recent call last):
  ...
ValueError: a very long string exceeds maximum length 10.
>>> t.decode('a very long string')
Traceback (most recent call last):
  ...
ValueError: a very long string exceeds maximum length 10.
>>> t.comment
'Up to 10 characters'
property length

Length.

decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.HexType(length=None)[source]

Bases: Type

Space Separated Hex Value with an optional length in number of Bytes.

>>> t = HexType()
>>> t.length is None
True
>>> t
HexType()
>>> t.decode('11 22 FF')
(0x11, 0x22, 0xFF)
>>> t.encode('0x11 0x22 0xFF')
'11 22 FF'
>>> t.encode('11 22 FF')
'11 22 FF'
>>> t.encode((0x11, 0x22, 0xFF))
'11 22 FF'
>>> t.comment
'Hex Bytes'

With length:

>>> t = HexType(3)
>>> t
HexType(length=3)
>>> t.length
3
>>> t.decode('11 22 FF')
(0x11, 0x22, 0xFF)
>>> t.decode('11 22')
Traceback (most recent call last):
  ...
ValueError: Hex value 11 22 has not expected length of 3
>>> t.encode((0x11, 0x22, 0xFF))
'11 22 FF'
>>> t.encode((0x11, 0x22))
Traceback (most recent call last):
  ...
ValueError: Hex value (17, 34) has not expected length of 3
>>> t.comment
'3 Hex Bytes'
property length

Width.

decode(value)[source]

Decode value.

encode(value)[source]

Decode value.

property comment

Get Comment on allowed values.

class pyebus.types.IntType(min_, max_, divider=None)[source]

Bases: Type

Integer in the range of [min_, max_] with granularity of 1 / divider.

>>> t = IntType(-4, 3)
>>> t
IntType(-4, 3)
>>> t.min_
-4
>>> t.max_
3
>>> t.divider is None
True
>>> t.frac is None
True
>>> t.comment
'Integer within [-4:3]'
>>> t.decode('2')
2
>>> t.decode('-') is None
True
>>> t.decode('7')
Traceback (most recent call last):
  ...
ValueError: Value 7 exceeds upper limit of 3
>>> t.decode('-5')
Traceback (most recent call last):
  ...
ValueError: Value -5 deceeds lower limit of -4
>>> t.encode('2')
2
>>> t.encode(2)
2
>>> t.encode(None)
'-'
>>> t.encode(7)
Traceback (most recent call last):
  ...
ValueError: Value 7 exceeds upper limit of 3
>>> t.encode(-5)
Traceback (most recent call last):
  ...
ValueError: Value -5 deceeds lower limit of -4

With divider:

>>> t = IntType(-4, 3, divider=2)
>>> t
IntType(-4, 3, divider=2)
>>> t.min_
-4
>>> t.max_
3
>>> t.divider
2
>>> t.frac
0.5
>>> t.comment
'Float within [-4:3] with 0.5 fraction'
>>> t.decode('2')
2.0
>>> t.decode('-') is None
True
>>> t.decode('7')
Traceback (most recent call last):
  ...
ValueError: Value 7.0 exceeds upper limit of 3
>>> t.decode('-5')
Traceback (most recent call last):
  ...
ValueError: Value -5.0 deceeds lower limit of -4
>>> t.encode(2)
2.0
>>> t.encode(None)
'-'
>>> t.encode(7)
Traceback (most recent call last):
  ...
ValueError: Value 7.0 exceeds upper limit of 3
>>> t.encode(-5)
Traceback (most recent call last):
  ...
ValueError: Value -5.0 deceeds lower limit of -4
property min_

Lower Limit.

property max_

Upper Limit.

property divider

Divider.

property frac

Fraction.

with_divider(divider)[source]

Return copy and apply divider.

decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.BoolType[source]

Bases: Type

Boolean Type.

>>> t = BoolType()
>>> t
BoolType()
>>> t.comment
'0 or 1'
>>> t.decode('0')
False
>>> t.decode('1')
True
>>> t.decode('-') is None
True
>>> t.encode(0)
0
>>> t.encode(1)
1
>>> t.encode('0')
0
>>> t.encode('1')
1
>>> t.encode('false')
0
>>> t.encode('true')
1
>>> t.encode('FALSE')
0
>>> t.encode('TRUE')
1
>>> t.encode(None)
'-'
>>> t.encode('blub')
Traceback (most recent call last):
    ...
ValueError: blub is not a valid boolean
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.FloatType[source]

Bases: Type

Floating Type.

>>> t = FloatType()
>>> t
FloatType()
>>> t.comment
'Float'
>>> t.decode('-') is None
True
>>> t.decode('0')
0.0
>>> t.decode('1.456')
1.456
>>> t.encode(15.6)
'15.6'
>>> t.encode(None)
'-'
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.DateType[source]

Bases: Type

Date Type.

>>> import datetime
>>> t = DateType()
>>> t
DateType()
>>> t.comment
'DAY.MONTH.YEAR'
>>> t.decode('30.12.2020')
datetime.date(2020, 12, 30)
>>> t.decode('-.-.-') is None
True
>>> t.encode('30.12.2020')
'30.12.2020'
>>> t.encode(datetime.date(2020, 12, 30))
'30.12.2020'
>>> t.encode(None)
'-.-.-'
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.TimeType[source]

Bases: Type

Time.

>>> t = TimeType()
>>> t
TimeType()
>>> t.comment
'HOUR:MINUTE:SECOND'
>>> t.decode('23:59:59')
Time(23, 59, 59)
>>> t.decode('-:-:-') is None
True
>>> t.encode('23:59:59')
'23:59:59'
>>> t.encode(Time(23, 59, 59))
'23:59:59'
>>> t.encode(None)
'-:-:-'
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.HourMinuteType(minres=None)[source]

Bases: TimeType

Time.

Keyword Arguments:

minres – Minute Resolution

>>> t = HourMinuteType()
>>> t
HourMinuteType()
>>> t.minres is None
True
>>> t.comment
'HOUR:MINUTE'
>>> t.decode('23:59')
HourMinute(23, 59)
>>> t.decode('-:-') is None
True
>>> t.encode('23:59')
'23:59'
>>> t.encode(HourMinute(23, 59))
'23:59'
>>> t.encode(None)
'-:-'

With Minimum Resolution

>>> t = HourMinuteType(minres=10)
>>> t
HourMinuteType(minres=10)
>>> t.minres
10
>>> t.comment
'HOUR:MINUTE with 10min granularity'
>>> t.decode('23:50')
HourMinute(23, 50)
>>> t.decode('-:-') is None
True
>>> t.decode('23:51')
Traceback (most recent call last):
  ...
ValueError: Minute of 23:51 must be multiple of 10
>>> t.encode('23:50')
'23:50'
>>> t.encode(HourMinute(23, 50))
'23:50'
>>> t.encode(HourMinute(23, 52))
Traceback (most recent call last):
  ...
ValueError: Minute of 23:52 must be multiple of 10
>>> t.encode(None)
'-:-'
property minres

Minute Resolution.

decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.DateTimeType[source]

Bases: Type

Date Time.

>>> t = DateTimeType()
>>> t
DateTimeType()
>>> t.comment
'DAY.MONTH.YEAR HOUR:MINUTE:SECOND'
>>> t.decode('30.12.2020 23:59:59')
DateTime(2020, 12, 30, 23, 59, 59)
>>> t.decode('-.-.- -:-:-') is None
True
>>> t.encode('30.12.2020 23:59:59')
'30.12.2020 23:59:59'
>>> t.encode(DateTime(2020, 12, 30, 23, 59, 59))
'30.12.2020 23:59:59'
>>> t.encode(None)
'-.-.- -:-:-'
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.WeekdayType[source]

Bases: Type

Weekday Type.

>>> t = WeekdayType()
>>> t.comment
''
>>> t.decode('a')
'a'
>>> t.encode('a')
'a'
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.PinType[source]

Bases: Type

Pin.

>>> t = PinType()
>>> t.comment
''
>>> t.decode('a')
'a'
>>> t.encode('a')
'a'
decode(value)[source]

Decode value.

encode(value)[source]

Encode value.

property comment

Get Comment on allowed values.

class pyebus.types.DateTime[source]

Bases: datetime

DateTime.

>>> t = DateTime(2020, 12, 31, 23, 59, 59)
>>> t
DateTime(2020, 12, 31, 23, 59, 59)
>>> str(t)
'31.12.2020 23:59:59'
class pyebus.types.Time[source]

Bases: time

Time.

>>> t = Time(23, 59, 59)
>>> t
Time(23, 59, 59)
>>> str(t)
'23:59:59'
class pyebus.types.HourMinute[source]

Bases: time

Time without Seconds.

>>> t = HourMinute(23, 59)
>>> t
HourMinute(23, 59)
>>> str(t)
'23:59'
class pyebus.types.Hex[source]

Bases: int

Integer with Hex Representation.