Skip to content

Commit fb367f5

Browse files
committed
Add function to generate a minimal collection
1 parent 92c92c3 commit fb367f5

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

vecorel_cli/conversion/flatdict.py

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
"""
42
FlatDict is a dict object that allows for single level, delimited
53
key/value pair mapping of nested dictionaries.
@@ -11,6 +9,7 @@
119
1210
Code slightly adapted for linting purposes.
1311
"""
12+
1413
try:
1514
from collections.abc import MutableMapping
1615
except ImportError: # pragma: nocover
@@ -27,9 +26,10 @@ class FlatDict(MutableMapping):
2726
or by calling :meth:`FlatDict.set_delimiter`.
2827
2928
"""
29+
3030
_COERCE = dict
3131

32-
def __init__(self, value=None, delimiter=':', dict_class=dict):
32+
def __init__(self, value=None, delimiter=":", dict_class=dict):
3333
super(FlatDict, self).__init__()
3434
self._values = dict_class()
3535
self._delimiter = delimiter
@@ -136,8 +136,7 @@ def __repr__(self):
136136
:rtype: str
137137
138138
"""
139-
return '<{} id={} {}>"'.format(self.__class__.__name__, id(self),
140-
str(self))
139+
return '<{} id={} {}>"'.format(self.__class__.__name__, id(self), str(self))
141140

142141
def __setitem__(self, key, value):
143142
"""Assign the value to the key, dynamically building nested
@@ -156,8 +155,7 @@ def __setitem__(self, key, value):
156155
self._values[pk] = self.__class__({ck: value}, self._delimiter)
157156
return
158157
elif not isinstance(self._values[pk], FlatDict):
159-
raise TypeError(
160-
'Assignment to invalid type for key {}'.format(pk))
158+
raise TypeError("Assignment to invalid type for key {}".format(pk))
161159
self._values[pk][ck] = value
162160
else:
163161
self._values[key] = value
@@ -168,8 +166,7 @@ def __str__(self):
168166
:rtype: str
169167
170168
"""
171-
return '{{{}}}'.format(', '.join(
172-
['{!r}: {!r}'.format(k, self[k]) for k in self.keys()]))
169+
return "{{{}}}".format(", ".join(["{!r}: {!r}".format(k, self[k]) for k in self.keys()]))
173170

174171
def as_dict(self):
175172
"""Return the :class:`~flatdict.FlatDict` as a :class:`dict`
@@ -290,9 +287,7 @@ def keys(self):
290287

291288
for key, value in self._values.items():
292289
if isinstance(value, (FlatDict, dict)):
293-
nested = [
294-
self._delimiter.join([str(key), str(k)])
295-
for k in value.keys()]
290+
nested = [self._delimiter.join([str(key), str(k)]) for k in value.keys()]
296291
keys += nested if nested else [key]
297292
else:
298293
keys.append(key)
@@ -340,8 +335,7 @@ def set_delimiter(self, delimiter):
340335
"""
341336
for key in self.keys():
342337
if delimiter in key:
343-
raise ValueError('Key {!r} collides with delimiter {!r}', key,
344-
delimiter)
338+
raise ValueError("Key {!r} collides with delimiter {!r}", key, delimiter)
345339
self._delimiter = delimiter
346340
for key in self._values.keys():
347341
if isinstance(self._values[key], FlatDict):
@@ -382,14 +376,15 @@ def _has_delimiter(self, key):
382376

383377
class FlatterDict(FlatDict):
384378
"""Like :class:`~flatdict.FlatDict` but also coerces lists and sets
385-
to child-dict instances with the offset as the key. Alternative to
386-
the implementation added in v1.2 of FlatDict.
379+
to child-dict instances with the offset as the key. Alternative to
380+
the implementation added in v1.2 of FlatDict.
387381
388382
"""
383+
389384
_COERCE = list, tuple, set, dict, FlatDict
390385
_ARRAYS = list, set, tuple
391386

392-
def __init__(self, value=None, delimiter=':', dict_class=dict):
387+
def __init__(self, value=None, delimiter=":", dict_class=dict):
393388
self.original_type = type(value)
394389
if self.original_type in self._ARRAYS:
395390
value = {str(i): v for i, v in enumerate(value)}
@@ -404,28 +399,25 @@ def __setitem__(self, key, value):
404399
:raises: TypeError
405400
406401
"""
407-
if isinstance(value, self._COERCE) and \
408-
not isinstance(value, FlatterDict):
402+
if isinstance(value, self._COERCE) and not isinstance(value, FlatterDict):
409403
value = self.__class__(value, self._delimiter)
410404
if self._has_delimiter(key):
411405
pk, ck = key.split(self._delimiter, 1)
412406
if pk not in self._values:
413407
self._values[pk] = self.__class__({ck: value}, self._delimiter)
414408
return
415-
if getattr(self._values[pk], 'original_type',
416-
None) in self._ARRAYS:
409+
if getattr(self._values[pk], "original_type", None) in self._ARRAYS:
417410
try:
418411
k, cck = ck.split(self._delimiter, 1)
419412
int(k)
420413
except ValueError:
421414
raise TypeError(
422-
'Assignment to invalid type for key {}{}{}'.format(
423-
pk, self._delimiter, ck))
415+
"Assignment to invalid type for key {}{}{}".format(pk, self._delimiter, ck)
416+
)
424417
self._values[pk][k][cck] = value
425418
return
426419
elif not isinstance(self._values[pk], FlatterDict):
427-
raise TypeError(
428-
'Assignment to invalid type for key {}'.format(pk))
420+
raise TypeError("Assignment to invalid type for key {}".format(pk))
429421
self._values[pk][ck] = value
430422
else:
431423
self._values[key] = value

vecorel_cli/registry.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import re
33
from typing import Union
44

5+
from .vecorel.schemas import Schemas
6+
57

68
class VecorelRegistry:
79
"""
@@ -77,6 +79,12 @@ def get_file_extensions(self) -> list[str]:
7779

7880
return extensions
7981

82+
def get_default_collection(self, id: str, extensions: set | list | None = None) -> dict:
83+
schemas = {Schemas.get_core_uri()}
84+
if extensions:
85+
schemas |= set(extensions)
86+
return {"schemas": {id: list(schemas)}, "collection": id}
87+
8088
def remove_command(self, command):
8189
from .basecommand import BaseCommand
8290

0 commit comments

Comments
 (0)