| 579 | |
| 580 | @classmethod |
| 581 | def extend(cls, dialect, fmtparams=None): |
| 582 | if isinstance(dialect, str): |
| 583 | dialect = get_dialect(dialect) |
| 584 | |
| 585 | if fmtparams is None: |
| 586 | return dialect |
| 587 | |
| 588 | defaults = cls.defaults() |
| 589 | |
| 590 | if any(param not in defaults for param in fmtparams): |
| 591 | raise TypeError('Invalid fmtparam') |
| 592 | |
| 593 | specified = dict( |
| 594 | (attr, getattr(dialect, attr, None)) |
| 595 | for attr in cls.defaults() |
| 596 | ) |
| 597 | |
| 598 | specified.update(fmtparams) |
| 599 | return type(str('ExtendedDialect'), (cls,), specified) |
| 600 | |
| 601 | @classmethod |
| 602 | def combine(cls, dialect, fmtparams): |