Skip to content

Commit f8a36e9

Browse files
feat: split the monolithic document.py into focused modules (#664)
refactored the docling-core for the document.py Signed-off-by: Peter Staar <taa@zurich.ibm.com>
1 parent 500a6e7 commit f8a36e9

31 files changed

Lines changed: 3376 additions & 2860 deletions

docling_core/types/doc/__init__.py

Lines changed: 151 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,141 @@
11
"""Package for models defined by the Document type."""
22

3-
from .base import BoundingBox, CoordOrigin, ImageRefMode, Size
4-
from .document import (
5-
AnyTableCell,
3+
from docling_core.types.doc.base import (
4+
BoundingBox,
5+
CoordOrigin,
6+
ImageRefMode,
7+
PydanticSerCtxKey,
8+
Size,
9+
)
10+
from docling_core.types.doc.common.annotations import (
611
BaseAnnotation,
12+
DescriptionAnnotation,
13+
MiscAnnotation,
14+
)
15+
from docling_core.types.doc.common.content_layer import ContentLayer
16+
from docling_core.types.doc.common.formatting import (
17+
Formatting,
18+
Script,
19+
)
20+
from docling_core.types.doc.common.meta import (
721
BaseMeta,
822
BasePrediction,
9-
ChartBar,
10-
ChartLine,
11-
ChartPoint,
12-
ChartSlice,
13-
ChartStackedBar,
14-
CodeItem,
15-
ContentLayer,
16-
DescriptionAnnotation,
23+
CodeMetaField,
1724
DescriptionMetaField,
18-
DocItem,
19-
DoclingDocument,
20-
DocTagsDocument,
21-
DocTagsPage,
22-
DocumentOrigin,
2325
EntitiesMetaField,
2426
EntityMention,
25-
FloatingItem,
2627
FloatingMeta,
27-
Formatting,
28+
KeywordsMetaField,
29+
LanguageMetaField,
30+
MetaFieldName,
31+
MetaUtils,
32+
SummaryMetaField,
33+
TopicsMetaField,
34+
)
35+
from docling_core.types.doc.common.origin import (
36+
DocumentOrigin,
37+
)
38+
from docling_core.types.doc.common.reference import (
39+
FineRef,
40+
ImageRef,
41+
PageItem,
42+
ProvenanceItem,
43+
RefItem,
44+
)
45+
from docling_core.types.doc.common.scalars import (
46+
CharSpan,
47+
LevelNumber,
48+
Uint64,
49+
)
50+
from docling_core.types.doc.common.source import (
51+
BaseSource,
52+
SourceType,
53+
TrackSource,
54+
)
55+
from docling_core.types.doc.doctags import (
56+
DocTagsDocument,
57+
DocTagsPage,
58+
)
59+
from docling_core.types.doc.document import DoclingDocument
60+
from docling_core.types.doc.items.code import CodeItem
61+
from docling_core.types.doc.items.content import ContentItem
62+
from docling_core.types.doc.items.form import (
63+
FieldHeadingItem,
64+
FieldItem,
65+
FieldRegionItem,
66+
FieldValueItem,
67+
)
68+
from docling_core.types.doc.items.group import (
69+
GroupItem,
70+
InlineGroup,
71+
ListGroup,
72+
OrderedList,
73+
UnorderedList,
74+
)
75+
from docling_core.types.doc.items.key_value import (
2876
FormItem,
29-
FormulaItem,
3077
GraphCell,
3178
GraphData,
3279
GraphLink,
33-
GroupItem,
34-
ImageRef,
35-
InlineGroup,
3680
KeyValueItem,
37-
KeywordsMetaField,
38-
LanguageMetaField,
39-
ListGroup,
40-
ListItem,
41-
MetaFieldName,
42-
MetaUtils,
43-
MiscAnnotation,
44-
MoleculeMetaField,
81+
)
82+
from docling_core.types.doc.items.node import (
83+
DocItem,
84+
FloatingItem,
4585
NodeItem,
46-
OrderedList,
47-
Orientation,
48-
PageItem,
86+
)
87+
from docling_core.types.doc.items.picture.charts import (
88+
ChartBar,
89+
ChartLine,
90+
ChartPoint,
91+
ChartSlice,
92+
ChartStackedBar,
4993
PictureBarChartData,
5094
PictureChartData,
95+
PictureLineChartData,
96+
PicturePieChartData,
97+
PictureScatterChartData,
98+
PictureStackedBarChartData,
99+
PictureTabularChartData,
100+
)
101+
from docling_core.types.doc.items.picture.classification import (
51102
PictureClassificationClass,
52103
PictureClassificationData,
104+
)
105+
from docling_core.types.doc.items.picture.meta import (
106+
MoleculeMetaField,
53107
PictureClassificationMetaField,
54108
PictureClassificationPrediction,
109+
PictureMeta,
110+
TabularChartMetaField,
111+
)
112+
from docling_core.types.doc.items.picture.molecule import PictureMoleculeData
113+
from docling_core.types.doc.items.picture.picture import (
114+
BasePictureData,
55115
PictureDataType,
116+
PictureDescriptionData,
56117
PictureItem,
57-
PictureLineChartData,
58-
PictureMeta,
59-
PictureMoleculeData,
60-
PicturePieChartData,
61-
PictureScatterChartData,
62-
PictureStackedBarChartData,
63-
PictureTabularChartData,
64-
ProvenanceItem,
65-
RefItem,
66-
RichTableCell,
67-
Script,
68-
SectionHeaderItem,
69-
SourceType,
70-
SummaryMetaField,
118+
PictureMiscData,
119+
)
120+
from docling_core.types.doc.items.table.table import (
71121
TableAnnotationType,
122+
TableItem,
123+
)
124+
from docling_core.types.doc.items.table.table_data import (
125+
AnyTableCell,
126+
Orientation,
127+
RichTableCell,
72128
TableCell,
73129
TableData,
74-
TableItem,
75-
TabularChartMetaField,
130+
)
131+
from docling_core.types.doc.items.text import (
132+
FormulaItem,
133+
ListItem,
134+
SectionHeaderItem,
76135
TextItem,
77136
TitleItem,
78-
TopicsMetaField,
79-
TrackSource,
80-
UnorderedList,
81137
)
82-
from .labels import (
138+
from docling_core.types.doc.labels import (
83139
CodeLanguageLabel,
84140
DocItemLabel,
85141
GraphCellLabel,
@@ -89,16 +145,56 @@
89145
PictureClassificationLabel,
90146
TableCellLabel,
91147
)
92-
from .page import (
148+
from docling_core.types.doc.page import (
149+
BitmapResource,
93150
BoundingRectangle,
151+
ColorChannelValue,
94152
ColorMixin,
95153
ColorRGBA,
96154
Coord2D,
97155
OrderedElement,
156+
PageGeometry,
157+
PageNumber,
158+
ParsedPdfDocument,
98159
PdfCellRenderingMode,
160+
PdfHyperlink,
161+
PdfLine,
162+
PdfMetaData,
99163
PdfPageBoundaryType,
164+
PdfPageGeometry,
165+
PdfShape,
166+
PdfTableOfContents,
167+
PdfTextCell,
168+
PdfWidget,
169+
SegmentedPage,
170+
SegmentedPdfPage,
100171
TextCell,
101172
TextCellUnit,
102173
TextDirection,
103174
)
104-
from .tokens import DocumentToken, TableToken
175+
from docling_core.types.doc.tokens import (
176+
DocumentToken,
177+
TableToken,
178+
)
179+
from docling_core.types.doc.webvtt import (
180+
WebVTTCueBlock,
181+
WebVTTCueBoldSpan,
182+
WebVTTCueClassSpan,
183+
WebVTTCueComponent,
184+
WebVTTCueComponentBase,
185+
WebVTTCueComponentWithTerminator,
186+
WebVTTCueIdentifier,
187+
WebVTTCueInternalText,
188+
WebVTTCueItalicSpan,
189+
WebVTTCueLanguageSpan,
190+
WebVTTCueLanguageSpanStartTag,
191+
WebVTTCueSpanStartTag,
192+
WebVTTCueSpanStartTagAnnotated,
193+
WebVTTCueTextSpan,
194+
WebVTTCueTimings,
195+
WebVTTCueUnderlineSpan,
196+
WebVTTCueVoiceSpan,
197+
WebVTTFile,
198+
WebVTTLineTerminator,
199+
WebVTTTimestamp,
200+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Shared, cross-cutting value models for the Docling document model."""
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""Generic annotation models shared across document items."""
2+
3+
from typing import Any, Literal
4+
5+
from pydantic import BaseModel
6+
7+
8+
class BaseAnnotation(BaseModel):
9+
"""Base class for all annotation types."""
10+
11+
kind: str
12+
13+
14+
class DescriptionAnnotation(BaseAnnotation):
15+
"""DescriptionAnnotation."""
16+
17+
kind: Literal["description"] = "description"
18+
text: str
19+
provenance: str
20+
21+
22+
class MiscAnnotation(BaseAnnotation):
23+
"""MiscAnnotation."""
24+
25+
kind: Literal["misc"] = "misc"
26+
content: dict[str, Any]
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
"""Document-level constants: schema version and default export label sets."""
2+
3+
from typing import Final
4+
5+
from docling_core.types.doc.labels import DocItemLabel
6+
7+
CURRENT_VERSION: Final = "1.10.0"
8+
9+
10+
DEFAULT_EXPORT_LABELS = {
11+
DocItemLabel.TITLE,
12+
DocItemLabel.DOCUMENT_INDEX,
13+
DocItemLabel.SECTION_HEADER,
14+
DocItemLabel.PARAGRAPH,
15+
DocItemLabel.TABLE,
16+
DocItemLabel.PICTURE,
17+
DocItemLabel.FORMULA,
18+
DocItemLabel.CHECKBOX_UNSELECTED,
19+
DocItemLabel.CHECKBOX_SELECTED,
20+
DocItemLabel.TEXT,
21+
DocItemLabel.LIST_ITEM,
22+
DocItemLabel.CODE,
23+
DocItemLabel.REFERENCE,
24+
DocItemLabel.PAGE_HEADER,
25+
DocItemLabel.PAGE_FOOTER,
26+
DocItemLabel.KEY_VALUE_REGION,
27+
DocItemLabel.EMPTY_VALUE,
28+
DocItemLabel.FIELD_KEY,
29+
DocItemLabel.FIELD_VALUE,
30+
DocItemLabel.FIELD_HEADING,
31+
DocItemLabel.FIELD_HINT,
32+
DocItemLabel.MARKER,
33+
DocItemLabel.HANDWRITTEN_TEXT,
34+
}
35+
36+
37+
DOCUMENT_TOKENS_EXPORT_LABELS = DEFAULT_EXPORT_LABELS.copy()
38+
DOCUMENT_TOKENS_EXPORT_LABELS.update(
39+
[
40+
DocItemLabel.FOOTNOTE,
41+
DocItemLabel.CAPTION,
42+
DocItemLabel.KEY_VALUE_REGION,
43+
DocItemLabel.FORM,
44+
]
45+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""Content-layer enumeration for document nodes."""
2+
3+
from enum import Enum
4+
5+
6+
class ContentLayer(str, Enum):
7+
"""ContentLayer."""
8+
9+
BODY = "body" # main content of the document
10+
FURNITURE = "furniture" # eg page-headers/footers
11+
BACKGROUND = "background" # eg watermarks
12+
INVISIBLE = "invisible" # hidden or invisible text
13+
NOTES = "notes" # author/speaker notes, corrections, etc
14+
15+
16+
DEFAULT_CONTENT_LAYERS = {ContentLayer.BODY}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""Text formatting models."""
2+
3+
from enum import Enum
4+
5+
from pydantic import BaseModel
6+
7+
8+
class Script(str, Enum):
9+
"""Text script position."""
10+
11+
BASELINE = "baseline"
12+
SUB = "sub"
13+
SUPER = "super"
14+
15+
16+
class Formatting(BaseModel):
17+
"""Formatting."""
18+
19+
bold: bool = False
20+
italic: bool = False
21+
underline: bool = False
22+
strikethrough: bool = False
23+
script: Script = Script.BASELINE

0 commit comments

Comments
 (0)