refactor(routing): address code review feedback - simplify list filter, fix docs example
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -170,18 +170,16 @@ def list_routing_rules(request: Request, db: DbSession) -> list[dict[str, Any]]:
|
|||||||
Rules are sorted by position.
|
Rules are sorted by position.
|
||||||
"""
|
"""
|
||||||
user_id = _get_user_id(request)
|
user_id = _get_user_id(request)
|
||||||
admin = _is_admin(request)
|
|
||||||
|
|
||||||
query = db.query(PipelineRoutingRule)
|
rules = (
|
||||||
if admin:
|
db.query(PipelineRoutingRule)
|
||||||
query = query.filter((PipelineRoutingRule.owner_id == user_id) | (PipelineRoutingRule.owner_id.is_(None)))
|
.filter((PipelineRoutingRule.owner_id == user_id) | (PipelineRoutingRule.owner_id.is_(None)))
|
||||||
else:
|
.order_by(
|
||||||
query = query.filter((PipelineRoutingRule.owner_id == user_id) | (PipelineRoutingRule.owner_id.is_(None)))
|
PipelineRoutingRule.owner_id.is_(None).asc(),
|
||||||
|
PipelineRoutingRule.position.asc(),
|
||||||
rules = query.order_by(
|
)
|
||||||
PipelineRoutingRule.owner_id.is_(None).asc(),
|
.all()
|
||||||
PipelineRoutingRule.position.asc(),
|
)
|
||||||
).all()
|
|
||||||
|
|
||||||
return [_serialize_rule(r) for r in rules]
|
return [_serialize_rule(r) for r in rules]
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -662,13 +662,18 @@ based on their properties — no manual pipeline selection required.
|
|||||||
| `regex` | Full Python regex match (case-insensitive) |
|
| `regex` | Full Python regex match (case-insensitive) |
|
||||||
| `gt` / `lt` / `gte` / `lte` | Numeric comparison (greater/less than) |
|
| `gt` / `lt` / `gte` / `lte` | Numeric comparison (greater/less than) |
|
||||||
|
|
||||||
**Example:** Route all invoices over 1 MB to a dedicated pipeline:
|
**Example:** Route invoices to one pipeline and large files to another:
|
||||||
|
|
||||||
```
|
```
|
||||||
Rule 1: field=document_type, operator=equals, value=Invoice, target_pipeline=3
|
Rule 1: field=document_type, operator=equals, value=Invoice, target_pipeline=3
|
||||||
Rule 2: field=size, operator=gt, value=1048576, target_pipeline=5
|
Rule 2: field=size, operator=gt, value=1048576, target_pipeline=5
|
||||||
```
|
```
|
||||||
|
|
||||||
|
With first-match-wins logic, an invoice of any size matches Rule 1 and is
|
||||||
|
routed to pipeline 3. A non-invoice file larger than 1 MB matches Rule 2
|
||||||
|
and is routed to pipeline 5. Everything else falls back to the default
|
||||||
|
pipeline.
|
||||||
|
|
||||||
You can test your rules without actually routing a document using the
|
You can test your rules without actually routing a document using the
|
||||||
**evaluate** endpoint (`POST /api/routing-rules/evaluate`). For the full
|
**evaluate** endpoint (`POST /api/routing-rules/evaluate`). For the full
|
||||||
API reference, see [API Documentation](API.md#routing-rules).
|
API reference, see [API Documentation](API.md#routing-rules).
|
||||||
|
|||||||
Reference in New Issue
Block a user