Caracara Filters
A new filter system for Caracara.
Caracara's previous filter system was inflexible, and tailored too heavily toward the Hosts API module. This project aims to provide an FQL generator that is dialect-aware (i.e., contextual, based on the API module that the request will be sent to).
Basic Concepts
Instead of declaring each filter as a class, we now have them defined in a dictionary which is significantly easier to work with. Dynamic functionality is provided by storing (partial) functions into each filter.
Each filter derives from the 'default' / base filter, which is configured with identity transforms and validators that return the input value and True, respectively, and expects a string input. These settings can be overridden per-filter, and are enforced when a filter is added to the FQLGenerator object. We call this process rebasing, as each filter is rebased from a smaller dictionary over the top of the default filter, thus ensuring that all expected values will be present.
When a filter is created, the input goes through these processing stages:
- Validation: the filter's input is passed into a validation function that always returns a
bool.Truemeans that the input is valid, andFalsewill raise aValueErrorexception. At this stage, we also validate the input type; incorrect input types will result in aTypeError. - Transformation: each filter value can be transformed from a human-defined input into something machine-readable, expected by the API. For example, relative timestamps (such as
-30m) are transformed to a UTC ISO8601 timestamp ready for the Falcon API, andContainment Pendingis rewritten tocontainment_pendingas expected by the Hosts API. - Storage: the validated, transformed input is stored alongside the FQL property name and the operator (e.g., equality,
>=, etc.), ready for FQL generation.
When FQL is generated, each of the filters are iterated over and converted to FQL individually, and then chained together with + to form an AND condition.
Limitations
We currently only support a limited subset of FQL. For example:
- We can generate a condition like "all systems that run Windows or Linux, AND have an IP address in the range 192.168.0.0/16 OR 10.0.0.0/8".
- We cannot generate a condition like "all systems that run Windows AND have an IP address in the 192.168.0.0/16 range, as well as all Linux systems in the 10.0.0.0/8 range".
The latter is out of scope as it requires chaining together multiple filters. You can effectively create this functionality for yourself by creating two FQL generators, wrapping their outputs in parentheses, and chaining them together with a '+'.join().
Metadata
Release files for caracara-filters 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| caracara_filters-1.3.0.tar.gz | 16.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| caracara_filters-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.9 kB
Release files / caracara_filters-1.3.0.tar.gz
| Download URL | caracara_filters-1.3.0.tar.gz |
|---|---|
| Size | 16.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a033a8febcd1cfdbee7febc42571ca653f5f8655de6ec3ea032d740c667e3685
|
|
BLAKE2b-256 checksum How to use checksums |
38ef52556a87014ed1e81de24312ae70d4f3fabc089746cf207a049e289e5c31
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 18, 2026.
Transparency logRelease files / caracara_filters-1.3.0-py3-none-any.whl
| Download URL | caracara_filters-1.3.0-py3-none-any.whl |
|---|---|
| Size | 25.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
976e6d3be6f4b9d43f24b48e7c518c2ff70111141e8f4665c41a68990a9fe325
|
|
BLAKE2b-256 checksum How to use checksums |
b1788cb632d8f1e363666011d45a2bd99eb9b378007af96338e165b24c159432
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 18, 2026.
Transparency logSecurity for caracara-filters 1.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for caracara_filters-1.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.