splor-mg / dpm

https://splor-mg.github.io/dpm/
0 stars 0 forks source link

KeyError: 'target' during column rename in normalize_resource #31

Closed fjuniorr closed 1 year ago

fjuniorr commented 1 year ago
2023-08-25T14:07:37-0300 INFO  [scripts.transform] Transforming resource base_qdd_plurianual
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /Users/macbook/Projects/splor/sisor-dados/scripts/transform.py:13 in transform_resource          │
│                                                                                                  │
│   10 │   logger.info(f'Transforming resource {resource_name}')                                   │
│   11 │   package = Package(descriptor)                                                           │
│   12 │   resource = package.get_resource(resource_name)                                          │
│ ❱ 13 │   target = normalize_resource(resource, path = Path(f'data/{resource_name}.csv'))         │
│   14                                                                                             │
│                                                                                                  │
│ /Users/macbook/Projects/splor/dpm/src/dpm/steps.py:123 in normalize_resource                     │
│                                                                                                  │
│   120 │   │   target = field.custom['target']                                                    │
│   121 │   │   field_descriptor = {'name': target, 'source': field.name}                          │
│   122 │   │   transform(resource, steps=[steps.field_update(name = field.name, descriptor = fi   │
│ ❱ 123 │   │   resource.schema.get_field(target).custom.pop('target')                             │
│   124 │                                                                                          │
│   125 │   transform(resource, steps=[steps.table_normalize()])                                   │
│   126                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
KeyError: 'target'
make: *** [data/base_qdd_plurianual.csv] Error 1
fjuniorr commented 1 year ago

Na verdade isso não é um bug. A mensagem de erro apareceu porque o recurso tinha fields com nomes duplicados. Isso fez com que depois que o primeiro fosse excluído, o segundo gerasse a mensagem de KeyError.

Achei os nomes de colunas duplicadas com o snippet:

for resource in target_descriptor['resources']:
    names = [field['name'] for field in resource['schema']['fields']]
    duplicates = set([x for x in names if names.count(x) > 1])

    if duplicates:
        print(f"Resource {resource['name']} has duplicate field names: {duplicates}")