def register_table(table: typing.NamedTuple) -> None: keyspace = getattr(table, '__keyspace__', None) if keyspace is None: raise NotImplementedError(f'Table[{table.__class__}] missing Keyspace') field_names = [] field_transliterators = [] for field_name, annotation in table.__annotations__.items(): field_names.append(field_name) try: transliterator = DT_MAP[annotation] except KeyError: if isinstance(annotation, Set): import pdb pdb.set_trace() pass elif issubclass(annotation, enum.Enum): transliterator = EnumTransliterator(annotation) else: transliterator = UDT_MAP.get(annotation, None) if transliterator is None: raise NotImplementedError field_transliterators.append(transliterator) pk_fields = getattr(table, '__primary_keys__', [])[:] or field_names[:] for pk_field in pk_fields: if not pk_field in field_names: raise NotImplementedError( f'Field[{pk_field}] not in Table[{table.__class__}]') ordered_by_primary_keys = getattr(table, '__ordered_by_primary_keys__', TableOrdering.Nope) assert ordered_by_primary_keys.__class__ is TableOrdering, 'Invalid Datatype. Using corm.datatypes.TableOrdering object' corm_details = CORMDetails(table.__keyspace__, table.__name__.lower(), field_names, field_transliterators, pk_fields, ordered_by_primary_keys) TABLES[corm_details.table_name] = corm_details table._corm_details = corm_details
def register_table(table: typing.NamedTuple) -> None: keyspace = getattr(table, '__keyspace__', None) if keyspace is None: raise NotImplementedError(f'Table[{table.__class__}] missing Keyspace') field_names = [] field_transliterators = [] for field_name, annotation in table.__annotations__.items(): field_names.append(field_name) field_transliterators.append(DT_MAP[annotation]) pk_fields = getattr(table, 'primary_key', None) or field_names[:] for pk_field in pk_fields: if not pk_field in field_names: raise NotImplementedError( f'Field[{pk_field}] not in Table[{table.__class__}]') corm_details = CORMDetails(table.__keyspace__, table.__name__.lower(), field_names, field_transliterators, pk_fields) TABLES[corm_details.table_name] = corm_details table._corm_details = corm_details