SEP_DESIGN_DESC = ' #'
SEP_DESIGN_ATTR = '|'
CHAR_COLL_INDENT = ' '
+CHAR_SEP_LDRAW_MODES = ','
CHAR_COLL_IN = '+'
CHAR_COLL_OUT = '-'
CHAR_COLL_INACTIVE = '#'
TOK_SORT_BOX = 'box'
TOK_SORT_ID = 'id'
+LDRAW_MODE_FILL_PATHS = 'fill_paths'
+LDRAW_MODE_VERIFY_PATHS = 'verify_paths'
+LDRAW_MODE_VERIFY_N_STUDS = 'verify_n_studs'
+LDRAW_MODES = {LDRAW_MODE_FILL_PATHS,
+ LDRAW_MODE_VERIFY_PATHS,
+ LDRAW_MODE_VERIFY_N_STUDS}
+
BrickListing = tuple[int, str, str] # count, ID, comment
PageColumn = tuple[BrickListing, ...]
Page = tuple[PageColumn, ...]
setattr(self, name, cls.from_textfile((path_tables, f'{name}.txt'),
**kwargs))
self._path_ldraw = Path(path_ldraw).joinpath('parts')
- self._ldraw_modes = ldraw_modes.split(',')
- if 'fill' in self._ldraw_modes:
+ self._ldraw_modes = ldraw_modes.split(CHAR_SEP_LDRAW_MODES)
+ if LDRAW_MODE_FILL_PATHS in self._ldraw_modes:
for design in [design for design in self.designs.values()
if not (design.alternate_to or design.ldraw)]:
filename = f'{design.id_}.dat'
if v != 0]:
fails += [f'invalid count for brick of ID: {brick_id} ({count})']
- if 'verify' in self._ldraw_modes:
- for design in [
- design for design in self.designs.values()
- if (not design.alternate_to)
- and design.ldraw and design.ldraw != '!']:
- # hunt for dangling Design.ldraw references
+ for design in [
+ design for design in self.designs.values()
+ if (not design.alternate_to)
+ and design.ldraw and design.ldraw != '!']:
+ # hunt for dangling Design.ldraw references
+ if LDRAW_MODE_VERIFY_PATHS in self._ldraw_modes:
if not self._path_ldraw.joinpath(design.ldraw).exists():
fails += ['unresolved ldraw reference for design of ID: '
f'{design.id_} ({design.ldraw})']
continue
- # compare n_studs calculations to explicit records
+ # compare n_studs calculations to explicit records
+ if LDRAW_MODE_VERIFY_N_STUDS in self._ldraw_modes:
if design.n_studs <= -1:
continue
studs_counted = self._ldraw_studs_count(design.ldraw)
hint_sortmatch = 'use "?" to see what be available for chosen table'
hint_raw = ('only available for tables: '
+ ', '.join(BricksDb.textfiled_tables().keys()))
+ hint_ldraw = 'allowed: ' + ', '.join(sorted(list(LDRAW_MODES)))
parser.add_argument(
'item_id',
nargs='?', metavar='ITEM_ID')
parser.add_argument(
'-s', '--sort-by',
action='store', help=hint_sortmatch, default=TOK_SORT_ID)
- parser.add_argument(
+ action_ldraw = parser.add_argument(
'-l', '--ldraw',
- action='store', default='')
+ action='store', default='',
+ help=f'comma-separated; {hint_ldraw}')
action_raw = parser.add_argument(
'-r', '--raw',
action='store_true', help=f'NB: {hint_raw}')
args = parser.parse_args()
if args.table not in BricksDb.textfiled_tables() and args.raw:
parser.error(str(ArgumentError(action_raw, hint_raw)))
+ for _ in [m for m in args.ldraw.split(CHAR_SEP_LDRAW_MODES)
+ if m and m not in LDRAW_MODES]:
+ parser.error(str(ArgumentError(action_ldraw, hint_ldraw)))
return args
args = parse_args()