Skip to main content

Simple and fast path template resolver.

Project description

resolva

Simple and fast path template resolver.
Inspired by and derived from Lucidity.

What is resolva ?

resolva is a python library that extracts data from a string by matching configurated patterns.

"/mnt/prods/hamlet/shots/sq010" => "/mnt/prods/{prod}/shots/{seq}" => {"prod": "hamlet", "seq": "sq010"}

Typical usage:

  • for a path or string input,
  • loops through a series of configured patterns,
  • once a matching pattern found,
  • extracts data and returns a dictionary

Instead of bare regex, the pattern uses a simpler "format" style syntax.

resolva can also format the data back to a string.

Path resolving

Template based path resolving is a typical need in CG pipeline tools.

Examples include:

  • Shotgrid Toolkit (SGTK) - Leading commercial CG and VFX Project Management and pipeline toolkit
  • CGWire's kitsu file trees - Kitsu is an Open Source collaboration platform for Animation and VFX studios.
  • Lucidity - Inspired by SGTK templating, in turn inspiration and base of resolva
  • spil - Uses resolva at its core

Usage Example

Configuration:

from resolva import Resolver

template = {"maya_file": "/mnt/prods/{prod}/shots/{seq}/{shot}_{version:(v\d\d\d)}.{ext:(ma|mb)}",
            "hou_file": "/mnt/prods/{prod}/shots/{seq}/{shot}_{version:(v\d\d\d)}.{ext:(hip|hipnc)}"}
Resolver("id", template)  # create the Resolver in an instance cache

Usage:

from resolva import Resolver
r = Resolver.get("id")  # read the Resolver from the instance cache

input = "/mnt/prods/hamlet/shots/sq010/sh010_v012.ma"
label, data = r.resolve_first(input)

# result:
print(f'Detected type "{label}" and extracted "{data}"')

Output:

Detected type "maya_file" and extracted 
{"prod": "hamlet", "seq": "sq010", "shot": "sh010", "version": "v012", "ext": "ma"}

Features

  • simple template format
    • Example: /{shot}/{version}/{name}.{extension:(ma|mb)}
    • handles duplicate placeholders
  • very simple API
    • resolve with one, first, or all patterns
    • format with one, first, or all patterns
    • format including reverse resolve check
  • high speed using caches
    • instance cache (keep regex compilations in memory)
    • lru_caches (speed up immutable resolves)

Why not Lucidity ?

resolva is a simplified version of Lucidity, a filesystem templating library.

resolva is now used at the core of spil.
A large amount of strings and paths need to be resolved at high speed.

The end goal is to build a rust path template resolver.
Rust development not started yet - contributions are highly welcomed :)

To prepare this in python, we reduced the Lucidity library to its essence (around 100 lines of code).

On top of these essential features, we built a simple Resolver class with an instance cache (to keep regex compiles in memory), and a lru cache, to memoize resolves that have no reason to change.

The result is a fast and very simple toolset.

resolva keeps essential Lucidity's features:

  • simple template format
  • handles duplicate placeholders
  • pattern anchoring (start:^,end:$)

resolva lacks some Lucidity features, that were left out:

  • individual template API
  • nested data structures
  • template discovery
  • templates referencing templates
  • python 2 support

If you need one of these, go for the original :)

Installation

resolva works in Python >=3.7.
It is available on pypi and can be installed using pip install resolva,
or from github pip install git+https://github.com/MichaelHaussmann/resolva.git

resolva is open source, License: MIT.

TODO:

  • docstrings (+doctests)
  • pytests calling the existing tests
  • Usage documentation, dev documentation + API documentation (readthedocs or github?)
  • black, refurb, etc.
  • pip installable and python bound rust implementation

Acknowledgements

resolva is inspired by, and derived from Lucidity.

Lucidity

https://gitlab.com/4degrees/lucidity/
https://lucidity.readthedocs.io
copyright: Copyright (c) 2013 Martin Pengelly-Phillips
licence: Apache License, Version 2.0

resolva

https://github.com/MichaelHaussmann/resolva
(c) 2024 Michael Haussmann
licence: MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

resolva-0.0.1.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

resolva-0.0.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file resolva-0.0.1.tar.gz.

File metadata

  • Download URL: resolva-0.0.1.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for resolva-0.0.1.tar.gz
Algorithm Hash digest
SHA256 cd7d73bd6d170c8afbce11b6e1d4cba0d2085a48e506419acae2b0416beed77e
MD5 678cae51e34461c6d3c7970832bf284f
BLAKE2b-256 3a31f1b1b9283a436a45adea2dbcc3be8a613edaabf21b0068a1250d0b67dee5

See more details on using hashes here.

File details

Details for the file resolva-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: resolva-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for resolva-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7f02d7eec1079e013877d83dbbfcc6788dca84e673c6019630464ebe3963684c
MD5 dadb64f3f5a30b57d227534369f133a2
BLAKE2b-256 a95f44d4894205ed54a4c226d292728ccd502ade3727cf9345aad51537933d44

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page