88import sys
99from dataclasses import dataclass
1010from pathlib import Path
11- from typing import Any , Dict , List , Literal , Optional , Union
12-
13- import msgspec
11+ from typing import Dict , List , Literal , Optional , Union
1412
1513from .util .python_path import find_object
1614from .util .schema import Schema , optionally_keyed_by , validate_schema
@@ -55,17 +53,18 @@ class Workers(Schema, rename=None):
5553 aliases : Dict [str , WorkerAlias ]
5654
5755
58- class Repository (Schema ):
59- """Repository configuration."""
56+ class Repository (Schema , forbid_unknown_fields = False ):
57+ """Repository configuration.
58+
59+ This schema allows extra fields for repository-specific configuration.
60+ """
6061
6162 # Required fields first
6263 name : str
6364
6465 # Optional fields
6566 project_regex : Optional [str ] = None # Maps from "project-regex"
6667 ssh_secret_name : Optional [str ] = None # Maps from "ssh-secret-name"
67- # Allow extra fields for flexibility
68- __extras__ : Dict [str , Any ] = msgspec .field (default_factory = dict )
6968
7069
7170class RunConfig (Schema ):
@@ -89,8 +88,11 @@ class TaskGraphConfig(Schema):
8988 run : Optional [RunConfig ] = None
9089
9190
92- class GraphConfigSchema (Schema ):
93- """Main graph configuration schema."""
91+ class GraphConfigSchema (Schema , forbid_unknown_fields = False ):
92+ """Main graph configuration schema.
93+
94+ This schema allows extra fields for flexibility in graph configuration.
95+ """
9496
9597 # Required fields first
9698 trust_domain : str # Maps from "trust-domain"
@@ -106,8 +108,6 @@ class GraphConfigSchema(Schema):
106108 None # Maps from "task-deadline-after", can be keyed-by project
107109 )
108110 task_expires_after : Optional [str ] = None # Maps from "task-expires-after"
109- # Allow extra fields for flexibility
110- __extras__ : Dict [str , Any ] = msgspec .field (default_factory = dict )
111111
112112 def __post_init__ (self ):
113113 """Validate keyed-by fields."""
0 commit comments