atviriduomenys / spinta

Spinta is a framework to describe, extract and publish data (a DEP Framework).
MIT License
13 stars 4 forks source link

Fix backref expression in property column #664

Closed sirex closed 3 weeks ago

sirex commented 4 months ago

In #161 task description an incorrect examples where given for array type usage with ref. The correct expression should look like this (correct, fixed example):

d | r | b | m | property    | type    | ref
example                     |         |
                            |         |
  |   |   | Language        |         |
  |   |   |   | name@en     | string  |
  |   |   |   | countries[] | backref | Country
                            |         |
  |   |   | Country         |         |
  |   |   |   | name@en     | string  |
  |   |   |   | languages   | array   | CountryLanguage[country, language]
  |   |   |   | languages[] | ref     | Language
                            |         |
  |   |   | CountryLanguage |         |
  |   |   |   | country     | ref     | Country
  |   |   |   | language    | ref     | Language

When using many-to-many relations, we must know order of references in order to correctly associate intermediate table.

Currently, following error is raised:

DataTypeCannotBeUsedForNesting: Type 'array_backref' cannot be used for nesting properties.

Related

karina-klinkeviciute commented 4 months ago

Pilnas traceback:

 /home/karina/work/ivpk/spinta/spinta/cli/manifest.py:62 in copy                                  │
│                                                                                                  │
│    59 ):                                                                                         │
│    60 │   """Copy models from CSV manifest files into another CSV manifest file"""               │
│    61 │   context: Context = ctx.obj                                                             │
│ ❱  62 │   copy_manifest(                                                                         │
│    63 │   │   context,                                                                           │
│    64 │   │   source=source,                                                                     │
│    65 │   │   access=access,                                                                     │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │            access = 'private'                                                                │ │
│ │           columns = None                                                                     │ │
│ │           context = <spinta.components.Context(cli:0) at 0x74f9861ddea0>                     │ │
│ │               ctx = <click.core.Context object at 0x74f9861deb60>                            │ │
│ │      format_names = False                                                                    │ │
│ │         manifests = [                                                                        │ │
│ │                     │                                                                        │ │
│ │                     '/home/karina/work/ivpk/spinta/xsds/ntr_result/dsa_715_NTR_NTR_Pastate_… │ │
│ │                     ]                                                                        │ │
│ │          order_by = None                                                                     │ │
│ │            output = '715.mmd'                                                                │ │
│ │ rename_duplicates = False                                                                    │ │
│ │            source = True                                                                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/cli/manifest.py:105 in copy_manifest                        │
│                                                                                                  │
│   102 │   │   output_type = "mermaid"                                                            │
│   103 │                                                                                          │
│   104 │   if internal or output_type == "mermaid":                                               │
│ ❱ 105 │   │   rows = _read_and_return_manifest(                                                  │
│   106 │   │   │   context,                                                                       │
│   107 │   │   │   manifests,                                                                     │
│   108 │   │   │   external=source,                                                               │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │            access = <Access.private: 0>                                                      │ │
│ │              cols = None                                                                     │ │
│ │           columns = None                                                                     │ │
│ │           context = <spinta.components.Context(cli:0) at 0x74f9861ddea0>                     │ │
│ │      format_names = False                                                                    │ │
│ │          internal = False                                                                    │ │
│ │         manifests = [                                                                        │ │
│ │                     │                                                                        │ │
│ │                     '/home/karina/work/ivpk/spinta/xsds/ntr_result/dsa_715_NTR_NTR_Pastate_… │ │
│ │                     ]                                                                        │ │
│ │          order_by = None                                                                     │ │
│ │            output = '715.mmd'                                                                │ │
│ │       output_type = 'mermaid'                                                                │ │
│ │ rename_duplicates = False                                                                    │ │
│ │            source = True                                                                     │ │
│ │           verbose = True                                                                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/cli/manifest.py:150 in _read_and_return_manifest            │
│                                                                                                  │
│   147 │   verbose: bool = True,                                                                  │
│   148 ) -> Iterator[ManifestRow]:                                                                │
│   149 │   context = configure_context(context, manifests)                                        │
│ ❱ 150 │   store = load_manifest(                                                                 │
│   151 │   │   context,                                                                           │
│   152 │   │   rename_duplicates=rename_duplicates,                                               │
│   153 │   │   load_internal=False,                                                               │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │            access = <Access.private: 0>                                                      │ │
│ │           context = <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200>       │ │
│ │          external = True                                                                     │ │
│ │      format_names = False                                                                    │ │
│ │         manifests = [                                                                        │ │
│ │                     │                                                                        │ │
│ │                     '/home/karina/work/ivpk/spinta/xsds/ntr_result/dsa_715_NTR_NTR_Pastate_… │ │
│ │                     ]                                                                        │ │
│ │          order_by = None                                                                     │ │
│ │ rename_duplicates = False                                                                    │ │
│ │           verbose = True                                                                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/cli/helpers/store.py:120 in load_manifest                   │
│                                                                                                  │
│   117 │   │   │   │   f"Loading {type(store.manifest).__name__} "                                │
│   118 │   │   │   │   f"manifest {store.manifest.name}"                                          │
│   119 │   │   │   )                                                                              │
│ ❱ 120 │   commands.load(                                                                         │
│   121 │   │   context, store.manifest,                                                           │
│   122 │   │   rename_duplicates=rename_duplicates,                                               │
│   123 │   │   load_internal=load_internal,                                                       │
│                                                                                                  │
│ ╭──────────────────────────────────────── locals ────────────────────────────────────────╮       │
│ │           context = <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200> │       │
│ │ ensure_config_dir = False                                                              │       │
│ │         full_load = True                                                               │       │
│ │     load_internal = False                                                              │       │
│ │ rename_duplicates = False                                                              │       │
│ │             store = <spinta.components.Store object at 0x74f98283d4b0>                 │       │
│ │           verbose = True                                                               │       │
│ ╰────────────────────────────────────────────────────────────────────────────────────────╯       │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/.venv/lib/python3.10/site-packages/multipledispatch/dispatcher.py: │
│ 279 in __call__                                                                                  │
│                                                                                                  │
│   276 │   │   │   │   )                                                                          │
│   277 │   │   │   self._cache[types] = func                                                      │
│   278 │   │   try:                                                                               │
│ ❱ 279 │   │   │   return func(*args, **kwargs)                                                   │
│   280 │   │                                                                                      │
│   281 │   │   except MDNotImplementedError:                                                      │
│   282 │   │   │   funcs = self.dispatch_iter(*types)                                             │
│                                                                                                  │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮             │
│ │   args = (                                                                       │             │
│ │          │   <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200>, │             │
│ │          │   <spinta.manifests.yaml.components.InlineManifest(name='default')>   │             │
│ │          )                                                                       │             │
│ │   func = <function load at 0x74f984e9e950>                                       │             │
│ │ kwargs = {'rename_duplicates': False, 'load_internal': False, 'full_load': True} │             │
│ │   self = <dispatched load>                                                       │             │
│ │  types = (                                                                       │             │
│ │          │   <class 'spinta.components.Context'>,                                │             │
│ │          │   <class 'spinta.manifests.yaml.components.InlineManifest'>           │             │
│ │          )                                                                       │             │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯             │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/yaml/commands/load.py:110 in load                 │
│                                                                                                  │
│   107 │   │   load_manifest_nodes(context, manifest, schemas)                                    │
│   108 │                                                                                          │
│   109 │   for source in manifest.sync:                                                           │
│ ❱ 110 │   │   commands.load(                                                                     │
│   111 │   │   │   context, source,                                                               │
│   112 │   │   │   into=into or manifest,                                                         │
│   113 │   │   │   freezed=freezed,                                                               │
│                                                                                                  │
│ ╭───────────────────────────────────────── locals ─────────────────────────────────────────╮     │
│ │           context = <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200>   │     │
│ │           freezed = True                                                                 │     │
│ │         full_load = True                                                                 │     │
│ │              into = None                                                                 │     │
│ │     load_internal = False                                                                │     │
│ │          manifest = <spinta.manifests.yaml.components.InlineManifest(name='default')>    │     │
│ │ rename_duplicates = False                                                                │     │
│ │           schemas = <generator object read_inline_manifest_schemas at 0x74f98280b220>    │     │
│ │            source = <spinta.manifests.tabular.components.XlsxManifest(name='manifest0')> │     │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯     │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/.venv/lib/python3.10/site-packages/multipledispatch/dispatcher.py: │
│ 279 in __call__                                                                                  │
│                                                                                                  │
│   276 │   │   │   │   )                                                                          │
│   277 │   │   │   self._cache[types] = func                                                      │
│   278 │   │   try:                                                                               │
│ ❱ 279 │   │   │   return func(*args, **kwargs)                                                   │
│   280 │   │                                                                                      │
│   281 │   │   except MDNotImplementedError:                                                      │
│   282 │   │   │   funcs = self.dispatch_iter(*types)                                             │
│                                                                                                  │
│ ╭──────────────────────────────────────── locals ─────────────────────────────────────────╮      │
│ │   args = (                                                                              │      │
│ │          │   <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200>,        │      │
│ │          │   <spinta.manifests.tabular.components.XlsxManifest(name='manifest0')>       │      │
│ │          )                                                                              │      │
│ │   func = <function load at 0x74f984e9ed40>                                              │      │
│ │ kwargs = {                                                                              │      │
│ │          │   'into': <spinta.manifests.yaml.components.InlineManifest(name='default')>, │      │
│ │          │   'freezed': True,                                                           │      │
│ │          │   'rename_duplicates': False,                                                │      │
│ │          │   'load_internal': False,                                                    │      │
│ │          │   'full_load': True                                                          │      │
│ │          }                                                                              │      │
│ │   self = <dispatched load>                                                              │      │
│ │  types = (                                                                              │      │
│ │          │   <class 'spinta.components.Context'>,                                       │      │
│ │          │   <class 'spinta.manifests.tabular.components.XlsxManifest'>                 │      │
│ │          )                                                                              │      │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────╯      │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/tabular/commands/load.py:59 in load               │
│                                                                                                  │
│   56 │   │   │   file=file,                                                                      │
│   57 │   │   │   rename_duplicates=rename_duplicates,                                            │
│   58 │   │   )                                                                                   │
│ ❱ 59 │   │   load_manifest_nodes(context, into, schemas, source=manifest)                        │
│   60 │   else:                                                                                   │
│   61 │   │   log.info(                                                                           │
│   62 │   │   │   'Loading freezed manifest %r from %s.',                                         │
│                                                                                                  │
│ ╭───────────────────────────────────────── locals ─────────────────────────────────────────╮     │
│ │           context = <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200>   │     │
│ │              file = None                                                                 │     │
│ │           freezed = True                                                                 │     │
│ │         full_load = True                                                                 │     │
│ │              into = <spinta.manifests.yaml.components.InlineManifest(name='default')>    │     │
│ │     load_internal = False                                                                │     │
│ │          manifest = <spinta.manifests.tabular.components.XlsxManifest(name='manifest0')> │     │
│ │ rename_duplicates = False                                                                │     │
│ │           schemas = <generator object read_tabular_manifest at 0x74f98280b680>           │     │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯     │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/helpers.py:133 in load_manifest_nodes             │
│                                                                                                  │
│   130 ) -> None:                                                                                 │
│   131 │   to_link = []                                                                           │
│   132 │   config = context.get('config')                                                         │
│ ❱ 133 │   for eid, schema in schemas:                                                            │
│   134 │   │   if schema.get('type') == 'manifest':                                               │
│   135 │   │   │   _load_manifest(context, manifest, schema, eid)                                 │
│   136 │   │   else:                                                                              │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │   config = <spinta.components.Config object at 0x74f98283db10>                               │ │
│ │  context = <spinta.components.Context(cli:0 < configure:0) at 0x74f982866200>                │ │
│ │      eid = 'Sheet1:58'                                                                       │ │
│ │     link = False                                                                             │ │
│ │ manifest = <spinta.manifests.yaml.components.InlineManifest(name='default')>                 │ │
│ │     node = <spinta.components.Model(name='n715_ntr_ntr_pastate_esanciu_patalpu_sarasas/Sist… │ │
│ │   schema = {                                                                                 │ │
│ │            │   'type': 'model',                                                              │ │
│ │            │   'id': None,                                                                   │ │
│ │            │   'name': 'n715_ntr_ntr_pastate_esanciu_patalpu_sarasas/SistemosInformacija',   │ │
│ │            │   'base': None,                                                                 │ │
│ │            │   'level': None,                                                                │ │
│ │            │   'access': None,                                                               │ │
│ │            │   'title': None,                                                                │ │
│ │            │   'description': None,                                                          │ │
│ │            │   'properties': {                                                               │ │
│ │            │   │   'data': {                                                                 │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'string',                                                     │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'rezultato (atsakymo) suformavimo data',               │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +4                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'db': {                                                                   │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'string',                                                     │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'RC aplinkos kodas',                                   │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +4                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'irasai': {                                                               │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'ref',                                                        │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'informacija apie paieškos rezultatų kiekį',           │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +6                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'salygos': {                                                              │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'ref',                                                        │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'paieškos (užklausos) sąlygos',                        │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +6                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'ssid': {                                                                 │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'string',                                                     │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'sesijos identifikatorius',                            │ │
│ │            │   │   │   'required': False,                                                    │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +4                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'text': {                                                                 │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'string',                                                     │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': None,                                                  │ │
│ │            │   │   │   'required': False,                                                    │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +4                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'trukme': {                                                               │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'string',                                                     │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'rezultato (atsakymo) suformavimui sugaištas laikas,   │ │
│ │            sek.',                                                                            │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +4                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'vartotojas': {                                                           │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'ref',                                                        │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'vartotojo duomenys',                                  │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +6                                                                │ │
│ │            │   │   },                                                                        │ │
│ │            │   │   'vei_id': {                                                               │ │
│ │            │   │   │   'id': None,                                                           │ │
│ │            │   │   │   'type': 'string',                                                     │ │
│ │            │   │   │   'type_args': [],                                                      │ │
│ │            │   │   │   'level': None,                                                        │ │
│ │            │   │   │   'access': None,                                                       │ │
│ │            │   │   │   'uri': None,                                                          │ │
│ │            │   │   │   'title': None,                                                        │ │
│ │            │   │   │   'description': 'veiksmo id RC audito sistemoje',                      │ │
│ │            │   │   │   'required': True,                                                     │ │
│ │            │   │   │   'unique': False,                                                      │ │
│ │            │   │   │   ... +4                                                                │ │
│ │            │   │   }                                                                         │ │
│ │            │   },                                                                            │ │
│ │            │   'uri': None,                                                                  │ │
│ │            │   ... +3                                                                        │ │
│ │            }                                                                                 │ │
│ │  schemas = <generator object read_tabular_manifest at 0x74f98280b680>                        │ │
│ │   source = <spinta.manifests.tabular.components.XlsxManifest(name='manifest0')>              │ │
│ │  to_link = []                                                                                │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/tabular/helpers.py:1640 in read_tabular_manifest  │
│                                                                                                  │
│   1637 │   else:                                                                                 │
│   1638 │   │   raise ValueError(f"Unknown tabular manifest format {format_!r}.")                 │
│   1639 │                                                                                         │
│ ❱ 1640 │   yield from _read_tabular_manifest_rows(                                               │
│   1641 │   │   path,                                                                             │
│   1642 │   │   rows,                                                                             │
│   1643 │   │   rename_duplicates=rename_duplicates,                                              │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │              file = None                                                                     │ │
│ │           format_ = <TabularFormat.XLSX: 'xlsx'>                                             │ │
│ │              path = '/home/karina/work/ivpk/spinta/xsds/ntr_result/dsa_715_NTR_NTR_Pastate_… │ │
│ │ rename_duplicates = False                                                                    │ │
│ │              rows = <generator object _read_xlsx_manifest at 0x74f98280b6f0>                 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/tabular/helpers.py:1595 in                        │
│ _read_tabular_manifest_rows                                                                      │
│                                                                                                  │
│   1592 │   │   dimension = _detect_dimension(path, line, row)                                    │
│   1593 │   │   Reader = READERS[dimension]                                                       │
│   1594 │   │   reader = Reader(state, path, line, allow_updates=allow_updates)                   │
│ ❱ 1595 │   │   reader.read(row)                                                                  │
│   1596 │   │   yield from state.release(reader)                                                  │
│   1597 │                                                                                         │
│   1598 │   yield from state.release()                                                            │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │                 _ = '1'                                                                      │ │
│ │     allow_updates = False                                                                    │ │
│ │          defaults = {                                                                        │ │
│ │                     │   'id': '',                                                            │ │
│ │                     │   'dataset': '',                                                       │ │
│ │                     │   'resource': '',                                                      │ │
│ │                     │   'base': '',                                                          │ │
│ │                     │   'model': '',                                                         │ │
│ │                     │   'property': '',                                                      │ │
│ │                     │   'type': '',                                                          │ │
│ │                     │   'ref': '',                                                           │ │
│ │                     │   'source': '',                                                        │ │
│ │                     │   'prepare': '',                                                       │ │
│ │                     │   ... +5                                                               │ │
│ │                     }                                                                        │ │
│ │         dimension = 'property'                                                               │ │
│ │            header = [                                                                        │ │
│ │                     │   'id',                                                                │ │
│ │                     │   'dataset',                                                           │ │
│ │                     │   'resource',                                                          │ │
│ │                     │   'base',                                                              │ │
│ │                     │   'model',                                                             │ │
│ │                     │   'property',                                                          │ │
│ │                     │   'type',                                                              │ │
│ │                     │   'ref',                                                               │ │
│ │                     │   'source',                                                            │ │
│ │                     │   'prepare',                                                           │ │
│ │                     │   ... +5                                                               │ │
│ │                     ]                                                                        │ │
│ │              line = 'Sheet1:71'                                                              │ │
│ │              path = '/home/karina/work/ivpk/spinta/xsds/ntr_result/dsa_715_NTR_NTR_Pastate_… │ │
│ │            reader = <spinta.manifests.tabular.helpers.PropertyReader object at               │ │
│ │                     0x74f98269f580>                                                          │ │
│ │            Reader = <class 'spinta.manifests.tabular.helpers.PropertyReader'>                │ │
│ │ rename_duplicates = False                                                                    │ │
│ │               row = {                                                                        │ │
│ │                     │   'id': None,                                                          │ │
│ │                     │   'dataset': None,                                                     │ │
│ │                     │   'resource': None,                                                    │ │
│ │                     │   'base': None,                                                        │ │
│ │                     │   'model': None,                                                       │ │
│ │                     │   'property': 'debug[].id',                                            │ │
│ │                     │   'type': 'string',                                                    │ │
│ │                     │   'ref': None,                                                         │ │
│ │                     │   'source': '@id',                                                     │ │
│ │                     │   'prepare': None,                                                     │ │
│ │                     │   ... +5                                                               │ │
│ │                     }                                                                        │ │
│ │              rows = <generator object _read_xlsx_manifest at 0x74f98280b6f0>                 │ │
│ │             state = <spinta.manifests.tabular.helpers.State object at 0x74f98269cc10>        │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/tabular/helpers.py:598 in read                    │
│                                                                                                  │
│    595 │   enums: Set[str]                                                                       │
│    596 │                                                                                         │
│    597 │   def read(self, row: Dict[str, str]) -> None:                                          │
│ ❱  598 │   │   full_prop, parent_prop, prop_name = _get_parent_data(self, row, row['property'])  │
│    599 │   │   prop_data = _handle_datatype(self, row)                                           │
│    600 │   │   if prop_data:                                                                     │
│    601 │   │   │   prop_name = _combine_parent_with_prop(prop_name, prop_data, parent_prop, ful  │
│                                                                                                  │
│ ╭───────────────────────────────────── locals ──────────────────────────────────────╮            │
│ │  row = {                                                                          │            │
│ │        │   'id': None,                                                            │            │
│ │        │   'dataset': None,                                                       │            │
│ │        │   'resource': None,                                                      │            │
│ │        │   'base': None,                                                          │            │
│ │        │   'model': None,                                                         │            │
│ │        │   'property': 'debug[].id',                                              │            │
│ │        │   'type': 'string',                                                      │            │
│ │        │   'ref': None,                                                           │            │
│ │        │   'source': '@id',                                                       │            │
│ │        │   'prepare': None,                                                       │            │
│ │        │   ... +5                                                                 │            │
│ │        }                                                                          │            │
│ │ self = <spinta.manifests.tabular.helpers.PropertyReader object at 0x74f98269f580> │            │
│ ╰───────────────────────────────────────────────────────────────────────────────────╯            │
│                                                                                                  │
│ /home/karina/work/ivpk/spinta/spinta/manifests/tabular/helpers.py:1061 in _get_parent_data       │
│                                                                                                  │
│   1058 │   │   else:                                                                             │
│   1059 │   │   │   prop_name = _clean_up_prop_name(prop)                                         │
│   1060 │   │   if current_parent and (current_parent['type'] not in ALLOWED_PARTIAL_TYPES and c  │
│ ❱ 1061 │   │   │   raise DataTypeCannotBeUsedForNesting(dtype=current_parent['type'])            │
│   1062 │   return full_prop, current_parent, prop_name                                           │
│   1063                                                                                           │
│   1064                                                                                           │
│                                                                                                  │
│ ╭────────────────────────────────────────── locals ───────────────────────────────────────────╮  │
│ │          count = 2                                                                          │  │
│ │ current_parent = {                                                                          │  │
│ │                  │   'id': None,                                                            │  │
│ │                  │   'type': 'array_backref',                                               │  │
│ │                  │   'type_args': [],                                                       │  │
│ │                  │   'prepare': None,                                                       │  │
│ │                  │   'level': None,                                                         │  │
│ │                  │   'access': None,                                                        │  │
│ │                  │   'uri': None,                                                           │  │
│ │                  │   'title': None,                                                         │  │
│ │                  │   'description': None,                                                   │  │
│ │                  │   'required': False,                                                     │  │
│ │                  │   ... +6                                                                 │  │
│ │                  }                                                                          │  │
│ │      full_name = ['debug[]']                                                                │  │
│ │      full_prop = {                                                                          │  │
│ │                  │   'id': None,                                                            │  │
│ │                  │   'type': 'array_backref',                                               │  │
│ │                  │   'type_args': [],                                                       │  │
│ │                  │   'prepare': None,                                                       │  │
│ │                  │   'level': None,                                                         │  │
│ │                  │   'access': None,                                                        │  │
│ │                  │   'uri': None,                                                           │  │
│ │                  │   'title': None,                                                         │  │
│ │                  │   'description': None,                                                   │  │
│ │                  │   'required': False,                                                     │  │
│ │                  │   ... +6                                                                 │  │
│ │                  }                                                                          │  │
│ │      given_row = {                                                                          │  │
│ │                  │   'id': None,                                                            │  │
│ │                  │   'dataset': None,                                                       │  │
│ │                  │   'resource': None,                                                      │  │
│ │                  │   'base': None,                                                          │  │
│ │                  │   'model': None,                                                         │  │
│ │                  │   'property': 'debug[].id',                                              │  │
│ │                  │   'type': 'string',                                                      │  │
│ │                  │   'ref': None,                                                           │  │
│ │                  │   'source': '@id',                                                       │  │
│ │                  │   'prepare': None,                                                       │  │
│ │                  │   ... +5                                                                 │  │
│ │                  }                                                                          │  │
│ │              i = 0                                                                          │  │
│ │           name = 'debug[].id'                                                               │  │
│ │           prop = 'debug[]'                                                                  │  │
│ │      prop_name = 'debug[].id'                                                               │  │
│ │         reader = <spinta.manifests.tabular.helpers.PropertyReader object at 0x74f98269f580> │  │
│ │           root = {                                                                          │  │
│ │                  │   'id': None,                                                            │  │
│ │                  │   'type': 'array_backref',                                               │  │
│ │                  │   'type_args': [],                                                       │  │
│ │                  │   'prepare': None,                                                       │  │
│ │                  │   'level': None,                                                         │  │
│ │                  │   'access': None,                                                        │  │
│ │                  │   'uri': None,                                                           │  │
│ │                  │   'title': None,                                                         │  │
│ │                  │   'description': None,                                                   │  │
│ │                  │   'required': False,                                                     │  │
│ │                  │   ... +6                                                                 │  │
│ │                  }                                                                          │  │
│ │    split_props = ['debug[]', 'id']                                                          │  │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────╯  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
DataTypeCannotBeUsedForNesting: Type 'array_backref' cannot be used for nesting properties.
  Context:
    dtype: array_backref
karina-klinkeviciute commented 4 months ago

Pavyzdys manifesto, su kuriuo gaunama ši klaida: image

sirex commented 1 month ago

Kol kas šiai užduočiai svarbu, kad veiktu DSA skaitymas/rašymas. O duomenų rašymas/skaitymas turėtu būti iškelti į atskiras užduots.