Formic2: Apache Ant FileSet and Globs

1.0.3 · maintenance · verified Sat Apr 11

Formic2 is a Python library that implements Apache Ant's FileSet and Globs patterns, including the `**` directory wildcard. It provides a programmatic and command-line interface for concisely specifying and retrieving sets of files based on inclusion and exclusion rules. Version 1.0.3 was released in May 2018, and the project's release cadence is considered stalled with no recent updates.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use `formic.FileSet` to define and iterate over files matching Ant-style glob patterns, including support for `**` for arbitrary directory matching. It creates a temporary directory structure to simulate a project and then uses `FileSet` to include and exclude files based on patterns.

import formic
import os
import tempfile
import shutil

# Create a temporary directory and some dummy files for demonstration
temp_dir = tempfile.mkdtemp()
current_dir = os.getcwd()
os.chdir(temp_dir) # Change to temp_dir to simulate working from there

print(f"Working in temporary directory: {temp_dir}")
os.makedirs("src/main/python", exist_ok=True)
os.makedirs("src/test/python", exist_ok=True)
os.makedirs("docs", exist_ok=True)

with open("src/main/python/app.py", "w") as f: f.write("print('app')")
with open("src/main/python/__init__.py", "w") as f: f.write("")
with open("src/test/python/test_app.py", "w") as f: f.write("print('test')")
with open("docs/README.md", "w") as f: f.write("# README")
with open("temp.bak", "w") as f: f.write("backup")

# Example 1: Find all Python files, excluding test files and __init__.py
print("\n--- Example 1: All Python files, excluding test files and __init__.py ---")
fileset1 = formic.FileSet(
    include="**/*.py",
    exclude=["**/test*/**", "**/__init__.py"],
    directory=".", # Specify current directory explicitly
    symlinks=False,
)
for file_name in fileset1:
    print(file_name)

# Example 2: Find all markdown files
print("\n--- Example 2: All Markdown files ---")
fileset2 = formic.FileSet(
    include="**/*.md",
    directory="."
)
for file_name in fileset2:
    print(file_name)

# Clean up
os.chdir(current_dir) # Change back to original directory
shutil.rmtree(temp_dir)
print(f"\nCleaned up temporary directory: {temp_dir}")

view raw JSON →