Skip to content

Parse settings from pyproject.toml: TOMLLoader #560

@hasansezertasan

Description

@hasansezertasan

There are many tools in the python ecosystem adopting pyproject.toml files. I like to have static configuration when I can and I like to keep things clean and tidy. I am trying to do it with pyproject.toml. It would be very convenient to support pyproject.toml.

I don't have a great TOML design in my mind but I converted a YAML config from the tests and added tool.webassets prefix. Here are the results:

  • test_load_bundles:
standard:
  filters: cssmin,jsmin
  output: output.css
  contents:
    - file1
    - file2
empty-bundle:
single-content-as-string-bundle:
  contents: only-this
nested:
  output: nested.css
  filters: cssmin
  contents:
    - cssfile1
    - filters: less
      contents:
        - lessfile1
        - lessfile2
        - contents: reallynested.css
          config:
            closure_bin: /tmp/closure
        - lessfile3
[tool.webassets.standard]
filters = "cssmin,jsmin"
output = "output.css"
contents = ["file1", "file2"]

[tool.webassets.single-content-as-string-bundle]
contents = "only-this"

[tool.webassets.nested]
output = "nested.css"
filters = "cssmin"
contents = [
  "cssfile1",
  { filters = "less", contents = [
    "lessfile1",
    "lessfile2",
    { contents = "reallynested.css", config = { closure_bin = "/tmp/closure" } },
    "lessfile3",
  ] },
]

  • test_load_recursive_bundles
standard:
    filters: cssmin,jsmin
    output: output.css
    contents:
        - file1
        - file2
recursive:
    output: recursive.css
    filters: jsmin
    contents:
        - cssfile1
        - standard
        - cssfile2
[tool.webassets.standard]
filters = "cssmin,jsmin"
output = "output.css"
contents = [ "file1", "file2" ]

[tool.webassets.recursive]
output = "recursive.css"
filters = "jsmin"
contents = [ "cssfile1", "standard", "cssfile2" ]

  • test_load_environment
url: /foo
directory: something
versions: 'timestamp'
auto_build: true
url_expire: true
config:
    compass_bin: /opt/compass

bundles:
    test:
        output: foo
[tool.webassets]
url = "/foo"
directory = "something"
versions = "timestamp"
auto_build = true
url_expire = true

[tool.webassets.config]
compass_bin = "/opt/compass"

[tool.webassets.bundles.test]
output = "foo"

  • test_load_environment_directory_base
url: /foo
directory: ../something
[tool.webassets]
url = "/foo"
directory = "../something"
  • test_load_extra_default
foo:
    output: foo
[tool.webassets.foo]
output = "foo"

We can use pydantic-settings to extract, parse and validate the configuration. Checkout the related documentation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions