Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- name: Install chromedriver
uses: nanasess/setup-chromedriver@v2
with:
chromedriver-version: '137.0.7151.68'
chromedriver-version: '139.0.7258.66'

- name: Start chromedriver
run: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
DEFAULT_REPR = fields.Json


logger = logging.getLogger(__name__)


def get_default_repr(field_info: FieldInfo | None, annotation: type | None = None, **kwargs) -> BaseField: # noqa: PLR0911, PLR0912
"""Get default field representation."""
if "__class__" in kwargs:
Expand All @@ -45,7 +48,7 @@ def get_default_repr(field_info: FieldInfo | None, annotation: type | None = Non
repr_cls = getattr(fields, repr_type, None)
if repr_cls is not None:
return repr_cls(**kwargs)
logging.warning("Unknown repr_type: %s", repr_type)
logger.warning("Unknown repr_type: %s", repr_type)

ann = get_non_null_annotation(field_info.annotation)
type_ = Type.classify(field_info.annotation, discriminator=field_info.discriminator)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@
from .table_field import TableField as Table
from .transferlist_field import TransferListField as TransferList

logger = logging.getLogger(__name__)


def deprecated_field_factory(name: str, base_class: type):
"""Create a field class with a deprecation warning message."""
old_post_init = getattr(base_class, "model_post_init", None)

def post_init(self, _context):
logging.warning(f"{name} is deprecated, use {base_class.__name__.removesuffix('Field')} instead.")
logger.warning(f"{name} is deprecated, use {base_class.__name__.removesuffix('Field')} instead.")
if old_post_init is not None:
old_post_init(self, _context)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
VisibilityFilter = tuple[str, FilterOperator, Any]


logger = logging.getLogger(__name__)


class BaseField(BaseModel):
"""Base field representation class."""

Expand Down Expand Up @@ -136,7 +139,11 @@ def model_post_init(self, _context):
ignored_kwargs = set(self.input_kwargs) - set(valid_input_kwargs)
self.input_kwargs = valid_input_kwargs
if ignored_kwargs:
logging.debug("The following kwargs were ignored for %s: %s", self.__class__.__name__, ignored_kwargs)
logger.debug(
"The following kwargs were ignored for %s: %s",
self.__class__.__name__,
ignored_kwargs,
)
if self.read_only:
self.input_kwargs["className"] = self.input_kwargs.get("className", "") + " read-only"

Expand Down Expand Up @@ -194,7 +201,7 @@ def render( # noqa: PLR0913
)

if field_info.default == PydanticUndefined and field_info.default_factory is None:
logging.warning(
logger.warning(
"Conditional visibility is set on a field without default value, "
f"this will likely lead to validation errors. Field: {get_fullpath(parent, field)}"
)
Expand Down Expand Up @@ -635,7 +642,7 @@ def register_data_getter(cls, data_getter: Callable[[], list[str]], name: str |
"""Register a data_getter."""
name = name or str(data_getter)
if name in cls.getters:
logging.warning("Data getter %s already registered for Select field.", name)
logger.warning("Data getter %s already registered for Select field.", name)
cls.getters[name] = data_getter

def _get_data(self, field_info: FieldInfo, **kwargs) -> list[dict]:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
model_construct_recursive,
)

logger = logging.getLogger(__name__)


class ListField(BaseField):
"""List field, used for list of nested models or scalars.
Expand Down Expand Up @@ -700,7 +702,7 @@ def make_template_item(item: BaseModel, parent: str, field: str):
try:
default_val = field_info.default_factory()
except TypeError:
logging.warning("Default factory with validated data not supported in allow_default")
logger.warning("Default factory with validated data not supported in allow_default")
setattr(pointer, field, default_val)

return template_item
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
from dash_pydantic_form.ids import field_dependent_id
from dash_pydantic_utils import deep_merge, get_fullpath, get_non_null_annotation

logger = logging.getLogger(__name__)


class JSFunction(BaseModel):
"""JS function."""
Expand Down Expand Up @@ -391,7 +393,7 @@ def _generate_field_column( # noqa: PLR0913, PLR0912
try:
column_def["default_value"] = field_info.default_factory()
except TypeError:
logging.warning("Default factory with validated data not supported in allow_default")
logger.warning("Default factory with validated data not supported in allow_default")

# if select field, generate column of dropdowns
if isinstance(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
from dash_pydantic_form.fields.base_fields import BaseField
from dash_pydantic_form.i18n import _

logger = logging.getLogger(__name__)


def side_id( # noqa: PLR0913
component: str,
Expand Down Expand Up @@ -79,7 +81,7 @@ def register_data_getter(
"""Register a data_getter."""
name = name or str(data_getter)
if name in cls.getters:
logging.warning("Data getter %s already registered for TransferList field.", name)
logger.warning("Data getter %s already registered for TransferList field.", name)
cls.getters[name] = data_getter

@classmethod
Expand All @@ -88,9 +90,7 @@ def get_data(cls, data_getter: str, value: list, search: str | None = None, max_
try:
getter = cls.getters[data_getter]
except KeyError as exc:
logging.error(
"Data getter %s could not be found, make sure you register it at the root level.", data_getter
)
logger.error("Data getter %s could not be found, make sure you register it at the root level.", data_getter)
raise exc
search_data = getter(search, max_items + len(value) if max_items else max_items)
data = [x for x in search_data if x not in value]
Expand Down
8 changes: 5 additions & 3 deletions packages/dash-pydantic-utils/dash_pydantic_utils/path.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

SEP = ":"

logger = logging.getLogger(__name__)


def get_model_value(item: BaseModel | None, field: str, parent: str, allow_default: bool = True): # noqa: PLR0911, PLR0912
"""Get the value of a model (parent, field) pair.
Expand Down Expand Up @@ -54,7 +56,7 @@ def get_model_value(item: BaseModel | None, field: str, parent: str, allow_defau
try:
return field_info.default_factory()
except TypeError:
logging.warning("Default factory with validated data not supported in allow_default")
logger.warning("Default factory with validated data not supported in allow_default")
return None
raise

Expand Down Expand Up @@ -355,10 +357,10 @@ def from_form_data(data: dict, data_model: type[BaseModel]):
defaulted_fields.append(path)
break
except TypeError:
logging.warning("Default factory with validated data not supported in allow_default")
logger.warning("Default factory with validated data not supported in allow_default")

if defaulted_fields:
logging.info(
logger.info(
"Could not validate the following fields: %s for %s, using default values instead.",
defaulted_fields,
data_model.__name__,
Expand Down
Loading