Skip to content

Commit

Permalink
Merge branch 'master' into debug-corpus-search
Browse files Browse the repository at this point in the history
  • Loading branch information
fsimonjetz committed Sep 5, 2023
2 parents 7ca612a + 42d3677 commit 753c8f6
Show file tree
Hide file tree
Showing 30 changed files with 576 additions and 50 deletions.
1 change: 1 addition & 0 deletions ebl/common/domain/scopes.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class Scope(ScopeItem):
READ_CAIC_FRAGMENTS = ("read:CAIC-fragments", RESTRICTED)
READ_ITALIANNINEVEH_FRAGMENTS = ("read:ITALIANNINEVEH-fragments", RESTRICTED)
READ_SIPPARLIBRARY_FRAGMENTS = ("read:SIPPARLIBRARY-fragments", RESTRICTED)
READ_SIPPARISTANBUL_FRAGMENTS = ("read:SIPPARISTANBUL-fragments", RESTRICTED)
READ_URUKLBU_FRAGMENTS = ("read:URUKLBU-fragments", RESTRICTED)
READ_ARG_FOLIOS = ("read:ARG-folios", RESTRICTED)
READ_EVW_FOLIOS = ("read:EVW-folios", RESTRICTED)
Expand Down
2 changes: 1 addition & 1 deletion ebl/corpus/application/schemas.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from ebl.corpus.domain.provenance import Provenance
from marshmallow import (
Schema,
ValidationError,
Expand All @@ -24,7 +25,6 @@
Manuscript,
ManuscriptType,
OldSiglum,
Provenance,
is_invalid_non_standard_text,
is_invalid_standard_text,
)
Expand Down
2 changes: 1 addition & 1 deletion ebl/corpus/domain/chapter_transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
from ebl.corpus.domain.line_variant import LineVariant
from ebl.corpus.domain.manuscript import (
Manuscript,
Provenance,
ManuscriptType,
Siglum,
)
from ebl.corpus.domain.provenance import Provenance
from ebl.transliteration.domain.line_transformer import LineTransformer


Expand Down
39 changes: 2 additions & 37 deletions ebl/corpus/domain/manuscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

from ebl.bibliography.domain.reference import Reference
from ebl.common.domain.period import Period, PeriodModifier
from ebl.common.domain.named_enum import NamedEnum, NamedEnumWithParent
from ebl.common.domain.named_enum import NamedEnum
from ebl.corpus.domain.provenance import Provenance
from ebl.fragmentarium.domain.joins import Joins
from ebl.transliteration.domain.museum_number import MuseumNumber
from ebl.transliteration.domain.text import Text
Expand All @@ -22,42 +23,6 @@ class ManuscriptType(NamedEnum):
NONE = ("None", "")


class Provenance(NamedEnumWithParent):
STANDARD_TEXT = ("Standard Text", "Std", None)
ASSYRIA = ("Assyria", "Assa", None)
ASSUR = ("Aššur", "Ašš", "Assyria")
HUZIRINA = ("Ḫuzirina", "Huz", "Assyria")
KALHU = ("Kalḫu", "Kal", "Assyria")
KHORSABAD = ("Khorsabad", "Kho", "Assyria")
NINEVEH = ("Nineveh", "Nin", "Assyria")
TARBISU = ("Tarbiṣu", "Tar", "Assyria")
BABYLONIA = ("Babylonia", "Baba", None)
BABYLON = ("Babylon", "Bab", "Babylonia")
BORSIPPA = ("Borsippa", "Bor", "Babylonia")
CUTHA = ("Cutha", "Cut", "Babylonia")
DILBAT = ("Dilbat", "Dil", "Babylonia")
ISIN = ("Isin", "Isn", "Babylonia")
KIS = ("Kiš", "Kiš", "Babylonia")
LARSA = ("Larsa", "Lar", "Babylonia")
METURAN = ("Meturan", "Met", "Babylonia")
NEREBUN = ("Nērebtum", "Nēr", "Babylonia")
NIPPUR = ("Nippur", "Nip", "Babylonia")
SIPPAR = ("Sippar", "Sip", "Babylonia")
SADUPPUM = ("Šaduppûm", "Šad", "Babylonia")
UR = ("Ur", "Ur", "Babylonia")
URUK = ("Uruk", "Urk", "Babylonia")
PERIPHERY = ("Periphery", "", None)
ALALAKS = ("Alalakh", "Ala", "Periphery")
TELL_EL_AMARNA = ("Tell el-Amarna", "Ama", "Periphery")
EMAR = ("Emar", "Emr", "Periphery")
HATTUSA = ("Ḫattuša", "Hat", "Periphery")
MARI = ("Mari", "Mar", "Periphery")
MEGIDDO = ("Megiddo", "Meg", "Periphery")
SUSA = ("Susa", "Sus", "Periphery")
UGARIT = ("Ugarit", "Uga", "Periphery")
UNCERTAIN = ("Uncertain", "Unc", None)


@attr.s(auto_attribs=True, frozen=True)
class Siglum:
provenance: Provenance
Expand Down
44 changes: 44 additions & 0 deletions ebl/corpus/domain/provenance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from ebl.common.domain.named_enum import NamedEnum


class ProvenanceEnum(NamedEnum):
def __init__(self, long_name, abbreviation, parent, cigs_key, sort_key=-1):
super().__init__(long_name, abbreviation, sort_key)
self.parent = parent
self.cigs_key = cigs_key


class Provenance(ProvenanceEnum):
STANDARD_TEXT = ("Standard Text", "Std", None, None)
ASSYRIA = ("Assyria", "Assa", None, None)
ASSUR = ("Aššur", "Ašš", "Assyria", "ASS")
HUZIRINA = ("Ḫuzirina", "Huz", "Assyria", "HUZ")
KALHU = ("Kalḫu", "Kal", "Assyria", "NIM")
KHORSABAD = ("Khorsabad", "Kho", "Assyria", "SAR")
NINEVEH = ("Nineveh", "Nin", "Assyria", "NNV")
TARBISU = ("Tarbiṣu", "Tar", "Assyria", "SKH")
BABYLONIA = ("Babylonia", "Baba", None, None)
BABYLON = ("Babylon", "Bab", "Babylonia", "BAB")
BORSIPPA = ("Borsippa", "Bor", "Babylonia", "BOR")
CUTHA = ("Cutha", "Cut", "Babylonia", "GUD")
DILBAT = ("Dilbat", "Dil", "Babylonia", "DLB")
ISIN = ("Isin", "Isn", "Babylonia", "ISN")
KIS = ("Kiš", "Kiš", "Babylonia", "KSH")
LARSA = ("Larsa", "Lar", "Babylonia", "LAR")
METURAN = ("Meturan", "Met", "Babylonia", "HDD")
NEREBUN = ("Nērebtum", "Nēr", "Babylonia", "NRB")
NIPPUR = ("Nippur", "Nip", "Babylonia", "NIP")
SIPPAR = ("Sippar", "Sip", "Babylonia", "SAP")
SADUPPUM = ("Šaduppûm", "Šad", "Babylonia", "SDP")
UR = ("Ur", "Ur", "Babylonia", "URI")
URUK = ("Uruk", "Urk", "Babylonia", "URU")
PERIPHERY = ("Periphery", "", None, None)
ALALAKS = ("Alalakh", "Ala", "Periphery", "ALA")
TELL_EL_AMARNA = ("Tell el-Amarna", "Ama", "Periphery", "AKH")
EMAR = ("Emar", "Emr", "Periphery", "EMR")
HATTUSA = ("Ḫattuša", "Hat", "Periphery", "HAT")
MARI = ("Mari", "Mar", "Periphery", "MAR")
MEGIDDO = ("Megiddo", "Meg", "Periphery", "MGD")
SUSA = ("Susa", "Sus", "Periphery", "SUS")
UGARIT = ("Ugarit", "Uga", "Periphery", "UGA")
UNCERTAIN = ("Uncertain", "Unc", None, None)
78 changes: 78 additions & 0 deletions ebl/fragmentarium/application/archaeology_schemas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
from ebl.bibliography.application.reference_schema import ReferenceSchema
from ebl.fragmentarium.application.date_schemas import (
DateRangeSchema,
DateWithNotesSchema,
)
from ebl.fragmentarium.domain.archaeology import Archaeology
from ebl.fragmentarium.domain.findspot import BuildingType, ExcavationPlan, Findspot
from ebl.schemas import NameEnumField
from marshmallow import Schema, fields, post_load, validate
from ebl.transliteration.domain.museum_number import MuseumNumber as ExcavationNumber
from ebl.corpus.domain.provenance import Provenance as ExcavationSite


class ExcavationNumberSchema(Schema):
prefix = fields.String(
required=True, validate=(validate.Length(min=1), validate.ContainsNoneOf("."))
)
number = fields.String(
required=True, validate=(validate.Length(min=1), validate.ContainsNoneOf("."))
)
suffix = fields.String(required=True, validate=validate.ContainsNoneOf("."))

@post_load
def create_excavation_number(self, data, **kwargs) -> ExcavationNumber:
return ExcavationNumber(**data)


class ExcavationPlanSchema(Schema):
svg = fields.String()
references = fields.Nested(ReferenceSchema, many=True, load_default=tuple())

@post_load
def create_excavation_plan(self, data, **kwargs) -> ExcavationPlan:
data["references"] = tuple(data["references"])
return ExcavationPlan(**data)


class FindspotSchema(Schema):
area = fields.String()
building = fields.String()
building_type = NameEnumField(BuildingType, data_key="buildingType")
lavel_layer_phase = fields.String(data_key="lavelLayerPhase")
date_range = fields.Nested(DateRangeSchema, data_key="dateRange")
plans = fields.Nested(ExcavationPlanSchema, many=True, load_default=tuple())
room = fields.String()
context = fields.String()
primary_context = fields.Boolean(data_key="primaryContext")
notes = fields.String()
references = fields.Nested(ReferenceSchema, many=True, load_default=tuple())

@post_load
def create_findspot(self, data, **kwargs) -> Findspot:
data["plans"] = tuple(data["plans"])
data["references"] = tuple(data["references"])
return Findspot(**data)


class ArchaeologySchema(Schema):
excavation_number = fields.Nested(
ExcavationNumberSchema, data_key="excavationNumber", allow_none=True
)
site = fields.Function(
lambda archaeology: getattr(archaeology.site, "long_name", None),
lambda value: ExcavationSite.from_name(value),
allow_none=True,
)
regular_excavation = fields.Boolean(
load_default=True, data_key="isRegularExcavation"
)
excavation_date = fields.Nested(
DateWithNotesSchema, data_key="excavationDate", many=True, load_default=tuple()
)
findspot = fields.Nested(FindspotSchema, allow_none=True, default=None)

@post_load
def create_archaeology(self, data, **kwargs) -> Archaeology:
data["excavation_date"] = tuple(data["excavation_date"])
return Archaeology(**data)
31 changes: 31 additions & 0 deletions ebl/fragmentarium/application/date_schemas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import datetime
from ebl.fragmentarium.domain.iso_date import DateRange, DateWithNotes
from marshmallow import Schema, fields, post_load
from dateutil.parser import isoparse


class IsoDateField(fields.Field):
def _serialize(self, date: datetime.date, *args, **kwargs) -> str:
return str(date)

def _deserialize(self, date_string: str, *args, **kwargs) -> datetime.date:
return isoparse(date_string).date()


class DateRangeSchema(Schema):
start = IsoDateField()
end = IsoDateField()
notes = fields.String()

@post_load
def create_date_range(self, data, **kwargs) -> DateRange:
return DateRange(**data)


class DateWithNotesSchema(Schema):
date = IsoDateField()
notes = fields.String()

@post_load
def create_date(self, data, **kwargs) -> DateWithNotes:
return DateWithNotes(**data)
2 changes: 2 additions & 0 deletions ebl/fragmentarium/application/fragment_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from ebl.bibliography.application.reference_schema import ReferenceSchema
from ebl.common.domain.period import Period, PeriodModifier
from ebl.fragmentarium.application.archaeology_schemas import ArchaeologySchema
from ebl.fragmentarium.application.genre_schema import GenreSchema
from ebl.transliteration.application.museum_number_schema import MuseumNumberSchema
from ebl.fragmentarium.domain.folios import Folio, Folios
Expand Down Expand Up @@ -192,6 +193,7 @@ class FragmentSchema(Schema):
dates_in_text = fields.Nested(
DateSchema, data_key="datesInText", many=True, allow_none=True, default=list()
)
archaeology = fields.Nested(ArchaeologySchema, allow_none=True, default=None)

@post_load
def make_fragment(self, data, **kwargs):
Expand Down
11 changes: 11 additions & 0 deletions ebl/fragmentarium/application/fragment_updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from ebl.files.application.file_repository import FileRepository
from ebl.fragmentarium.application.fragment_repository import FragmentRepository
from ebl.fragmentarium.application.fragment_schema import FragmentSchema
from ebl.fragmentarium.domain.archaeology import Archaeology
from ebl.fragmentarium.domain.fragment import Fragment, Genre, Script
from ebl.transliteration.application.parallel_line_injector import ParallelLineInjector
from ebl.transliteration.domain.museum_number import MuseumNumber
Expand Down Expand Up @@ -139,6 +140,16 @@ def update_references(

return self._create_result(self._repository.query_by_museum_number(number))

def update_archaeology(
self, number: MuseumNumber, archaeology: Archaeology, user: User
) -> Tuple[Fragment, bool]:
fragment = self._repository.query_by_museum_number(number)
updated_fragment = fragment.set_archaeology(archaeology)

self._repository.update_field("archaeology", updated_fragment)

return self._create_result(updated_fragment)

def _create_result(self, fragment: Fragment) -> Tuple[Fragment, bool]:
return (
fragment.set_text(
Expand Down
15 changes: 15 additions & 0 deletions ebl/fragmentarium/domain/archaeology.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import Optional, Sequence
import attr
from ebl.fragmentarium.domain.iso_date import DateWithNotes
from ebl.fragmentarium.domain.findspot import Findspot
from ebl.transliteration.domain.museum_number import MuseumNumber as ExcavationNumber
from ebl.corpus.domain.provenance import Provenance as ExcavationSite


@attr.s(auto_attribs=True, frozen=True)
class Archaeology:
excavation_number: Optional[ExcavationNumber] = None
site: Optional[ExcavationSite] = None
regular_excavation: bool = True
excavation_date: Sequence[DateWithNotes] = tuple()
findspot: Optional[Findspot] = None
35 changes: 35 additions & 0 deletions ebl/fragmentarium/domain/findspot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import attr
from typing import Optional, Sequence
from enum import Enum, auto
from ebl.bibliography.domain.reference import Reference
from ebl.fragmentarium.domain.iso_date import DateRange


class BuildingType(Enum):
RESIDENTIAL = auto()
TEMPLE = auto()
PALACE = auto()
OTHER_MONUMENTAL = auto()
UNKNOWN = auto()
NOT_IN_BUILDING = auto()


@attr.s(auto_attribs=True, frozen=True)
class ExcavationPlan:
svg: str
references: Sequence[Reference] = tuple()


@attr.s(auto_attribs=True, frozen=True)
class Findspot:
area: str = ""
building: str = ""
building_type: Optional[BuildingType] = None
lavel_layer_phase: str = ""
date_range: Optional[DateRange] = None
plans: Sequence[ExcavationPlan] = tuple()
room: str = ""
context: str = ""
primary_context: Optional[bool] = None
notes: str = ""
references: Sequence[Reference] = tuple()
5 changes: 5 additions & 0 deletions ebl/fragmentarium/domain/fragment.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from ebl.common.domain.period import Period, PeriodModifier
from ebl.common.domain.scopes import Scope
from ebl.fragmentarium.application.matches.create_line_to_vec import create_line_to_vec
from ebl.fragmentarium.domain.archaeology import Archaeology
from ebl.fragmentarium.domain.folios import Folios
from ebl.fragmentarium.domain.genres import genres
from ebl.fragmentarium.domain.joins import Joins
Expand Down Expand Up @@ -133,6 +134,7 @@ class Fragment:
external_numbers: ExternalNumbers = ExternalNumbers()
projects: Sequence[str] = tuple()
traditional_reference: Sequence[str] = list()
archaeology: Optional[Archaeology] = None

@property
def is_lowest_join(self) -> bool:
Expand Down Expand Up @@ -200,6 +202,9 @@ def set_date(self, date_new: Optional[Date]) -> "Fragment":
def set_dates_in_text(self, dates_in_text_new: Sequence[Date]) -> "Fragment":
return attr.evolve(self, dates_in_text=dates_in_text_new)

def set_archaeology(self, archaeology: Archaeology) -> "Fragment":
return attr.evolve(self, archaeology=archaeology)

def update_lemmatization(self, lemmatization: Lemmatization) -> "Fragment":
text = self.text.update_lemmatization(lemmatization)
return attr.evolve(self, text=text)
Expand Down
1 change: 1 addition & 0 deletions ebl/fragmentarium/domain/genres.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@
("CANONICAL", "Literature", "Narrative", "The Poor Man of Nippur"),
("CANONICAL", "Literature", "Narrative", "Toil of Babylon"),
("CANONICAL", "Literature", "Sidu"),
("CANONICAL", "Literature", "Taboo Text (CBS 16 and duplicates)"),
("CANONICAL", "Magic"),
("CANONICAL", "Magic", "Anti-witchcraft"),
("CANONICAL", "Magic", "Anti-witchcraft", "Maqlû"),
Expand Down
15 changes: 15 additions & 0 deletions ebl/fragmentarium/domain/iso_date.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import attr
import datetime


@attr.s(auto_attribs=True, frozen=True)
class DateRange:
start: datetime.date
end: datetime.date
notes: str = ""


@attr.s(auto_attribs=True, frozen=True)
class DateWithNotes:
date: datetime.date
notes: str = ""
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ def update_field(self, field, fragment):
"references": ("references",),
"script": ("script",),
"notes": ("notes",),
"archaeology": ("archaeology",),
"transliteration": (
"text",
"signs",
Expand Down
Loading

0 comments on commit 753c8f6

Please sign in to comment.