|
1 | 1 | from __future__ import annotations |
2 | | -from typing import Any, Callable, Generator, Literal as Lit, TYPE_CHECKING |
| 2 | +from typing import Any, Callable, Generator, Literal as Lit, TYPE_CHECKING, Self |
3 | 3 | import re |
4 | 4 | from dataclasses import dataclass, asdict, field as datacls_field |
5 | 5 | import hashlib |
@@ -183,8 +183,8 @@ class Field: |
183 | 183 | sep: str | None = None |
184 | 184 |
|
185 | 185 | @classmethod |
186 | | - def from_dsl(cls, dsl: str) -> Field: |
187 | | - self = Field() |
| 186 | + def from_dsl(cls, dsl: str) -> Self: |
| 187 | + self = cls() |
188 | 188 | DSLParser(self).parse(dsl) |
189 | 189 | return self |
190 | 190 |
|
@@ -356,26 +356,21 @@ def _apply_modifier(self, mod: str): |
356 | 356 | @dataclass(frozen=True) |
357 | 357 | class Schema(object): |
358 | 358 | name: Field | None |
359 | | - attrs: dict[str, Field] | Field |
| 359 | + attrs: dict[str, Field] |
360 | 360 | content: Field | None |
361 | 361 |
|
362 | 362 | @classmethod |
363 | 363 | def from_dsl( |
364 | 364 | cls, |
365 | 365 | name: str | None = None, |
366 | | - attrs: str | dict[str, str] = {}, |
367 | | - content=str | None, |
368 | | - ) -> Schema: |
| 366 | + attrs: dict[str, str] = {}, |
| 367 | + content: str | None = None, |
| 368 | + ) -> Self: |
369 | 369 | name_field = Field.from_dsl(name) if name else None |
| 370 | + attrs_field = {k: Field.from_dsl(v) for k, v in attrs.items()} |
| 371 | + cont_field = Field.from_dsl(content) if content else None |
370 | 372 |
|
371 | | - if isinstance(attrs, str): |
372 | | - attrs_field = Field.from_dsl(attrs) |
373 | | - else: |
374 | | - attrs_field = {k: Field.from_dsl(v) for k, v in attrs.items()} |
375 | | - |
376 | | - cont_field = Field.from_dsl(name) if name else None |
377 | | - |
378 | | - return Schema(name_field, attrs_field, cont_field) |
| 373 | + return cls(name_field, attrs_field, cont_field) |
379 | 374 |
|
380 | 375 | def _parse_single( |
381 | 376 | self, field: tuple[str, Field | None], rawval: str | None |
|
0 commit comments