From cd3cdc787505b9b873b7ceb847e4f47103664b5f Mon Sep 17 00:00:00 2001 From: Reto Tschuppert Date: Fri, 30 Aug 2024 11:56:24 +0200 Subject: [PATCH] Remove backup file --- .../directory/models/directory_entry.py.bak | 176 ------------------ 1 file changed, 176 deletions(-) delete mode 100644 src/onegov/directory/models/directory_entry.py.bak diff --git a/src/onegov/directory/models/directory_entry.py.bak b/src/onegov/directory/models/directory_entry.py.bak deleted file mode 100644 index b1d6687fa4..0000000000 --- a/src/onegov/directory/models/directory_entry.py.bak +++ /dev/null @@ -1,176 +0,0 @@ -from sqlalchemy.ext.hybrid import hybrid_property - -from onegov.core.orm import Base -from onegov.core.orm.mixins import ContentMixin -from onegov.core.orm.mixins import TimestampMixin -from onegov.core.orm.mixins import UTCPublicationMixin -from onegov.core.orm.types import UUID -from onegov.file import AssociatedFiles -from onegov.gis import CoordinatesMixin -from onegov.search import SearchableContent -from sqlalchemy import Column, func, text, cast, ARRAY, String -from sqlalchemy import ForeignKey -from sqlalchemy import Index -from sqlalchemy import Text -from sqlalchemy.dialects.postgresql import HSTORE -from sqlalchemy.ext.mutable import MutableDict -from sqlalchemy.orm import relationship -from uuid import uuid4 - - -from typing import Any, TYPE_CHECKING -if TYPE_CHECKING: - import uuid - from collections.abc import Collection - from .directory import Directory - - -class DirectoryEntry(Base, ContentMixin, CoordinatesMixin, TimestampMixin, - SearchableContent, AssociatedFiles, UTCPublicationMixin): - """ A single entry of a directory. """ - - __tablename__ = 'directory_entries' - - es_properties = { - 'title': {'type': 'localized'}, - 'lead': {'type': 'localized'}, - 'keywords': {'type': 'keyword'}, - '_directory_id': {'type': 'keyword'}, - - # since the searchable text might include html, we remove it - # even if there's no html -> possibly decreasing the search - # quality a bit - 'text': {'type': 'localized_html'} - } - - @property - def es_public(self) -> bool: - return False # to be overridden downstream - - #: An interal id for references (not public) - id: 'Column[uuid.UUID]' = Column( - UUID, # type:ignore[arg-type] - primary_key=True, - default=uuid4 - ) - - #: The public id of the directory entry - name: 'Column[str]' = Column(Text, nullable=False) - - #: The directory this entry belongs to - directory_id: 'Column[UUID]' = Column( - ForeignKey('directories.id'), nullable=False) - # _directory_id: 'Column[UUID]' = Column( - # 'directory_id', UUID, ForeignKey('directories.id'), nullable=False) - # _directory_id: 'Column[UUID]' = Column( - # UUID, ForeignKey('directories.id'), nullable=False) - - #: the polymorphic type of the entry - type: 'Column[str]' = Column( - Text, - nullable=False, - default=lambda: 'generic' - ) - - #: The order of the entry in the directory - order: 'Column[str]' = Column(Text, nullable=False, index=True) - - #: The title of the entry - title: 'Column[str]' = Column(Text, nullable=False) - - #: Describes the entry briefly - lead: 'Column[str | None]' = Column(Text, nullable=True) - - #: All keywords defined for this entry (indexed) - _keywords: 'Column[dict[str, str] | None]' = Column( # type:ignore - MutableDict.as_mutable(HSTORE), - nullable=True, - name='keywords' - ) - - __mapper_args__ = { - 'polymorphic_on': type, - 'polymorphic_identity': 'generic', - } - - __table_args__ = ( - Index('inverted_keywords', 'keywords', postgresql_using='gin'), - Index('unique_entry_name', 'directory_id', 'name', unique=True), - ) - - directory: 'relationship[Directory]' = relationship( - 'Directory', - back_populates='entries' - ) - - # @hybrid_property - # def directory_id(self) -> UUID: - # return self.directory_id - - # @directory_id.setter - # def directory_id(self, value: UUID): - # self._directory_id = value - # - # @directory_id.expression - # def directory_id(cls): # type:ignore[no-redef] - # return cast(cls._directory_id, String) - - # @hybrid_property - # def directory_id_str(self) -> str: - # return str(self._directory_id) - # - # @directory_id_str.expression - # def directory_id_str(cls): # type:ignore[no-redef] - # return cast(cls._directory_id, String) - @hybrid_property - def _directory_id(self): - return cast(self.directory_id, Text) - - @property - def external_link(self) -> str | None: - return self.directory.configuration.extract_link(self.values) - - @property - def external_link_title(self) -> str | None: - return self.directory.configuration.link_title - - @property - def external_link_visible(self) -> bool | None: - return self.directory.configuration.link_visible - - @property - def directory_name(self) -> str: - return self.directory.name - - @hybrid_property - def keywords(self) -> set[str]: - return set(self._keywords.keys()) if self._keywords else set() - - # FIXME: asymmetric properties are not supported by mypy, switch to - # a custom descriptor, if desired. - @keywords.setter - def keywords(self, value: 'Collection[str] | None') -> None: - self._keywords = dict.fromkeys(value, '') if value else None - - @keywords.expression - def keywords(cls): # type:ignore[no-redef] - return func.array_to_string( - func.array_agg( - cast(func.jsonb_each_text(cls._keywords).keys(), ARRAY(String)) - ), - ' ' - ) - - @hybrid_property - def text(self) -> str: - return self.directory.configuration.extract_searchable(self.values) - - @property - def values(self) -> dict[str, Any]: - return self.content.get('values', {}) if self.content else {} - - @values.setter - def values(self, values: dict[str, Any]) -> None: - self.content = self.content or {} - self.content['values'] = values - self.content.changed() # type:ignore[attr-defined]