from dbt.utils import translate_aliases from dbt.logger import GLOBAL_LOGGER as logger from typing_extensions import Protocol from dbt.dataclass_schema import (dbtClassMixin, StrEnum, ExtensibleDbtClassMixin, HyphenatedDbtClassMixin, ValidatedStringMixin, register_pattern) from dbt.contracts.util import Replaceable class Identifier(ValidatedStringMixin): ValidationRegex = r'^[A-Za-z_][A-Za-z0-9_]+$' # we need register_pattern for jsonschema validation register_pattern(Identifier, r'^[A-Za-z_][A-Za-z0-9_]+$') @dataclass class AdapterResponse(dbtClassMixin): _message: str code: Optional[str] = None rows_affected: Optional[int] = None def __str__(self): return self._message class ConnectionState(StrEnum): INIT = 'init' OPEN = 'open'
ExtensibleDbtClassMixin, register_pattern, ValidatedStringMixin ) from dataclasses import dataclass, field from typing import Optional, List, Dict, Union, Any from mashumaro.types import SerializableType PIN_PACKAGE_URL = 'https://docs.getdbt.com/docs/package-management#section-specifying-package-versions' # noqa DEFAULT_SEND_ANONYMOUS_USAGE_STATS = True class Name(ValidatedStringMixin): ValidationRegex = r'^[^\d\W]\w*$' register_pattern(Name, r'^[^\d\W]\w*$') class SemverString(str, SerializableType): def _serialize(self) -> str: return self @classmethod def _deserialize(cls, value: str) -> 'SemverString': return SemverString(value) # this does not support the full semver (does not allow a trailing -fooXYZ) and # is not restrictive enough for full semver, (allows '1.0'). But it's like # 'semver lite'. register_pattern(
f'Got an invalid merge_behavior: {merge_behavior}') def insensitive_patterns(*patterns: str): lowercased = [] for pattern in patterns: lowercased.append(''.join('[{}{}]'.format(s.upper(), s.lower()) for s in pattern)) return '^({})$'.format('|'.join(lowercased)) class Severity(str): pass register_pattern(Severity, insensitive_patterns('warn', 'error')) @dataclass class Hook(dbtClassMixin, Replaceable): sql: str transaction: bool = True index: Optional[int] = None T = TypeVar('T', bound='BaseConfig') @dataclass class BaseConfig(AdditionalPropertiesAllowed, Replaceable, MutableMapping[str, Any]):