Skip to main content

Python Implementation of the Ant-style path patterns, inspired by Spring Framework's AntPathMatcher.

Project description

AntPathMatcher

Python Implementation of the Ant-style path patterns, inspired by Spring Framework's AntPathMatcher.

References

Spring framework - AntPathMatcher

Features

  • Match URL paths and file paths using Ant-style patterns
  • Support for wildcards:
    • ? - matches exactly one character (except path separators)
    • * - matches zero or more characters (except path separators)
    • ** - matches zero or more directories in a path
  • Extract variables from URI templates (e.g., /users/{id} matches /users/123 with id=123)
  • Customizable path separators (default is / but can be changed)
  • Fully type-hinted for modern Python development
  • Compatible with Python 3.10+

Installation

pip install antpathmatcher

Or with uv:

uv add antpathmatcher

Quick Start

Basic Pattern Matching

from antpathmatcher import AntPathMatcher

# Create a matcher with default path separator (/)
matcher = AntPathMatcher()

# Basic matching with single character wildcard
matcher.match("com/t?st.jsp", "com/test.jsp")  # True
matcher.match("com/t?st.jsp", "com/tast.jsp")  # True
matcher.match("com/t?st.jsp", "com/txst.jsp")  # True
matcher.match("com/t?st.jsp", "com/tst.jsp")   # False (? requires exactly one character)

# Matching with * wildcard (matches within a path segment)
matcher.match("com/*.jsp", "com/demo.jsp")     # True
matcher.match("com/*.jsp", "com/test.jsp")     # True
matcher.match("com/*.jsp", "com/sub/test.jsp") # False (doesn't cross path boundaries)

# Matching with ** wildcard (matches across path segments)
matcher.match("com/**/test.jsp", "com/test.jsp")           # True
matcher.match("com/**/test.jsp", "com/sub/test.jsp")       # True
matcher.match("com/**/test.jsp", "com/sub/dir/test.jsp")   # True

# Complex patterns
matcher.match("org/demo/**/*.jsp", "org/demo/views/home.jsp")           # True
matcher.match("org/demo/**/*.jsp", "org/demo/templates/views/home.jsp") # True

Extracting URI Template Variables

from antpathmatcher import AntPathMatcher

matcher = AntPathMatcher()

# Basic variable extraction
variables = matcher.extract_uri_template_variables("/hotels/{hotel}", "/hotels/1")
print(variables)  # {'hotel': '1'}

# Multiple variables
variables = matcher.extract_uri_template_variables(
    "/users/{user_id}/posts/{post_id}", 
    "/users/123/posts/456"
)
print(variables)  # {'user_id': '123', 'post_id': '456'}

Custom Path Separators

from antpathmatcher import AntPathMatcher

# Create a matcher with custom path separator
# Useful for matching things like Java package names
matcher = AntPathMatcher(path_separator=".")

# Now the patterns use dots as separators
matcher.match("com.example.*.service", "com.example.user.service")  # True
matcher.match("com.example.???.service", "com.example.api.service") # True
matcher.match("com.**.service", "com.example.module.api.service")   # True

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

antpathmatcher-1.0.0.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

antpathmatcher-1.0.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file antpathmatcher-1.0.0.tar.gz.

File metadata

  • Download URL: antpathmatcher-1.0.0.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for antpathmatcher-1.0.0.tar.gz
Algorithm Hash digest
SHA256 16b659ca7baf676bdee305f2dcbf6c9d1bc1ebd81fa43f25b9add603c08c1098
MD5 8caa3a4814783f6f0f1cae2da2195470
BLAKE2b-256 806bacef3e2b12e9ffe1bf87ed4777e074dfaea1a53c05eedab6ea2a00e5420f

See more details on using hashes here.

File details

Details for the file antpathmatcher-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: antpathmatcher-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for antpathmatcher-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d41f8d445d12c211aaee655d928d152377b20bc9e4a43693566268c151a99728
MD5 8877db55ee27d822801eaa597eb14299
BLAKE2b-256 3f1bafc290ae4a25a7d627bf789baca83b1bf3425a5bd88555c35ff65afc6658

See more details on using hashes here.

Supported by

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