turicas/rows

Create Schema class

Aberta

#344 aberto em 25 de mar. de 2020

 (0 comentário) (0 reação) (0 responsável)Python (136 forks)github user discovery
enhancementhelp wantedrows.tableutils

Métricas do repositório

Stars
 (886 estrelas)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

Table.fields is currently an OrderedDict, but we can't make some operations off of an OrderedDict, like deserializing an entire row. We must create a class Schema, set it to Table.schema and use it internally whenever possible (like in pgimport and all functions that are currently calling load_schema - they should receive a Schema object instead).

I've created a basic implementation to start:

rows.fields:

from .utils import load_schema

class Schema:
    @classmethod
    def from_file(cls, filename):
        obj = cls()
        obj.filename = filename
        obj.fields = load_schema(
            str(filename)
        )
        return obj

    def deserialize(self, row):
        field_names = list(row.keys())
        field_mapping = {
            old: self.fields[new]
            for old, new in zip(field_names, make_header(field_names))
        }
        return {
            key: field_mapping[key].deserialize(value) for key, value in row.items()
        }

We may need to check for schema serialization formats, such as datapackage, avro, protocol buffers etc. so we can serialize/deserialize these schema definitions to these formats (and maybe also SQL, at least for serialization, using postgresql and sqlite plugins' code).

Guia do colaborador