Skip to content

Fields declaration order really matters when using multi-variables pattern #334

@devlounge

Description

@devlounge

It looks to me that the order in which the dataclass fields are declared is super important.

Example directory structure:

environments
  dev
    config
      servers
        server-1
          server.yaml
        server-2
          server.yaml
        server-3
          server.yaml

Datafile definition:

@datafile("./environments/{self.environment}/config/servers/{self.name}/server.yaml")
class Server:
    name: str
    environment: str

When running:

import os

from manager.models import Cluster


if __name__ == '__main__':

    clusters = list(Server.objects.all())

It ends up raising:

FileNotFoundError: [Errno 2] No such file or directory: '/project/configuration/environments/server-1/config/servers/dev/server.yaml'

This seems to come from when the manager.all method does yield self.get(*values) with values ["server-1", "dev"] which ends up building the path posted above as manager.get iterates on the fields in the order they are declared and sets the values accordingly.

If I declare:

@datafile("./environments/{self.environment}/config/servers/{self.name}/server.yaml")
class Server:
    environment: str
    name: str

It works.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions