removed clean_str concept from words

This commit is contained in:
Peter Boin 2017-07-11 11:35:49 +10:00
parent 0c5670c4ff
commit 0d398d5330
4 changed files with 20 additions and 43 deletions

View File

@ -12,6 +12,7 @@ __all__ = [
# GCodes # GCodes
'words2gcodes', 'text2gcodes', 'split_gcodes', 'words2gcodes', 'text2gcodes', 'split_gcodes',
# $ python -c "from pygcode.gcodes import GCode, _subclasses as sc; print(',\\n '.join(sorted('\\'%s\\'' % g.__name__ for g in sc(GCode))))"python -c "from pygcode.gcodes import GCode, _subclasses as sc; print(',\\n '.join(sorted('\\'%s\\'' % g.__name__ for g in sc(GCode))))"
'GCode', 'GCode',
'GCodeAbsoluteArcDistanceMode', 'GCodeAbsoluteArcDistanceMode',
'GCodeAbsoluteDistanceMode', 'GCodeAbsoluteDistanceMode',
@ -133,7 +134,7 @@ __all__ = [
'GCodeUseInches', 'GCodeUseInches',
'GCodeUseMillimeters', 'GCodeUseMillimeters',
'GCodeUserDefined', 'GCodeUserDefined',
'GCodeWaitOnInput', 'GCodeWaitOnInput'
] ]
# Machine # Machine
@ -162,7 +163,7 @@ from .words import (
from .gcodes import ( from .gcodes import (
words2gcodes, text2gcodes, split_gcodes, words2gcodes, text2gcodes, split_gcodes,
# $ python -c "from pygcode.gcodes import _gcode_class_infostr; print(_gcode_class_infostr())" # $ python -c "from pygcode.gcodes import _gcode_class_infostr as x; print(x(prefix=' # '))"
# - GCode: # - GCode:
# - GCodeCannedCycle: # - GCodeCannedCycle:
# G89 - GCodeBoringCycleDwellFeedOut: G89: Boring Cycle, Dwell, Feed Out # G89 - GCodeBoringCycleDwellFeedOut: G89: Boring Cycle, Dwell, Feed Out
@ -286,7 +287,7 @@ from .gcodes import (
# G20 - GCodeUseInches: G20: use inches for length units # G20 - GCodeUseInches: G20: use inches for length units
# G21 - GCodeUseMillimeters: G21: use millimeters for length units # G21 - GCodeUseMillimeters: G21: use millimeters for length units
# $ python -c "from pygcode.gcodes import GCode, _subclasses; print(',\\n'.join(sorted(g.__name__ for g in _subclasses(GCode))))"python -c "from pygcode.gcodes import GCode, _subclasses; print(',\\n'.join(sorted(g.__name__ for g in _subclasses(GCode))))" # $ python -c "from pygcode.gcodes import GCode, _subclasses as sc; print(',\\n '.join(sorted(g.__name__ for g in sc(GCode))))"
GCode, GCode,
GCodeAbsoluteArcDistanceMode, GCodeAbsoluteArcDistanceMode,
GCodeAbsoluteDistanceMode, GCodeAbsoluteDistanceMode,
@ -408,5 +409,5 @@ from .gcodes import (
GCodeUseInches, GCodeUseInches,
GCodeUseMillimeters, GCodeUseMillimeters,
GCodeUserDefined, GCodeUserDefined,
GCodeWaitOnInput, GCodeWaitOnInput
) )

View File

@ -77,4 +77,4 @@ class Block(object):
)) ))
def __str__(self): def __str__(self):
return ' '.join(str(x) for x in (self.gcodes + [p.clean_str for p in self.modal_params])) return ' '.join(str(x) for x in (self.gcodes + self.modal_params))

View File

@ -191,11 +191,11 @@ class GCode(object):
param_str = '' param_str = ''
if self.params: if self.params:
param_str += ' ' + ' '.join([ param_str += ' ' + ' '.join([
"{}".format(self.params[k].clean_str) "{}".format(self.params[k])
for k in sorted(self.params.keys()) for k in sorted(self.params.keys())
]) ])
return "{gcode}{parameters}".format( return "{gcode}{parameters}".format(
gcode=self.word.clean_str, gcode=self.word,
parameters=param_str, parameters=param_str,
) )
@ -1237,7 +1237,7 @@ def _subclasses(root_class):
yield cls yield cls
def _gcode_class_infostr(base_class=GCode): def _gcode_class_infostr(base_class=GCode, prefix=''):
""" """
List all ineheriting classes for the given gcode class List all ineheriting classes for the given gcode class
:param base_class: root of hierarcy :param base_class: root of hierarcy
@ -1247,8 +1247,9 @@ def _gcode_class_infostr(base_class=GCode):
for (cls, level) in _subclasses_level(base_class): for (cls, level) in _subclasses_level(base_class):
word_str = '' word_str = ''
if cls.word_key: if cls.word_key:
word_str = cls.word_key.clean_str word_str = str(cls.word_key)
info_str += "{word} {indent}- {name}: {description}\n".format( info_str += "{prefix}{word} {indent}- {name}: {description}\n".format(
prefix=prefix,
word="%-5s" % word_str, word="%-5s" % word_str,
indent=(level * " "), indent=(level * " "),
name=cls.__name__, name=cls.__name__,

View File

@ -208,21 +208,15 @@ class Word(object):
(letter, value) = args (letter, value) = args
else: else:
# Word('G90') # Word('G90')
word_str = args[0] letter = args[0][0] # first letter
letter = word_str[0] # first letter value = args[0][1:] # rest of string
value = word_str[1:] # rest of string letter = letter.upper()
self.letter = letter.upper() self._value_class = WORD_MAP[letter]['class']
self._value_clean = WORD_MAP[letter]['clean_value']
self._value_str = None self.letter = letter
self._value = None self._value = self._value_class(value)
if isinstance(value, six.string_types):
self._value_str = value
else:
self._value = value
self._value_class = WORD_MAP[self.letter]['class']
self._value_clean = WORD_MAP[self.letter]['clean_value']
def __str__(self): def __str__(self):
return "{letter}{value}".format( return "{letter}{value}".format(
@ -230,14 +224,6 @@ class Word(object):
value=self.value_str, value=self.value_str,
) )
@property
def clean_str(self):
"""same as __str__ but with a cleaned value (eg: X.4 is X0.4)"""
return "{letter}{value}".format(
letter=self.letter,
value=self.value_cleanstr,
)
def __repr__(self): def __repr__(self):
return "<{class_name}: {string}>".format( return "<{class_name}: {string}>".format(
class_name=self.__class__.__name__, class_name=self.__class__.__name__,
@ -255,30 +241,19 @@ class Word(object):
def __hash__(self): def __hash__(self):
return hash((self.letter, self.value)) return hash((self.letter, self.value))
# Value Properties
@property @property
def value_str(self): def value_str(self):
"""Value string, or string representation of value"""
if self._value_str is None:
return str(self._value)
return self._value_str
@property
def value_cleanstr(self):
"""Clean string representation, for consistent file output""" """Clean string representation, for consistent file output"""
return self._value_clean(self.value) return self._value_clean(self.value)
# Value Properties
@property @property
def value(self): def value(self):
if self._value is None:
return self._value_class(self._value_str)
return self._value return self._value
@value.setter @value.setter
def value(self, new_value): def value(self, new_value):
self._value = self._value_class(new_value) self._value = self._value_class(new_value)
self._value_str = None
# Order # Order
def __lt__(self, other): def __lt__(self, other):