|
1 | | -from typing import TYPE_CHECKING, Dict, List, Optional |
2 | 1 | import copy as cp |
3 | | -from .base import BaseDocument, DocumentData |
| 2 | +from typing import TYPE_CHECKING, Optional |
| 3 | + |
| 4 | +from .data import DocumentData |
4 | 5 | from .mixins import AllMixins |
5 | 6 |
|
6 | 7 | if TYPE_CHECKING: |
7 | 8 | from .score import NamedScore |
8 | | - from ..typing import ArrayType, DocumentContentType, StructValueType |
9 | | - from datetime import datetime |
10 | | - from .. import DocumentArray |
11 | 9 |
|
12 | 10 |
|
13 | | -class Document(AllMixins, BaseDocument): |
| 11 | +class Document(AllMixins): |
14 | 12 | _all_doc_content_keys = {'content', 'blob', 'text', 'buffer'} |
15 | 13 |
|
16 | | - def __init__(self, obj: Optional['Document'] = None, |
17 | | - copy: bool = False, **kwargs): |
18 | | - self._pb_body = None |
| 14 | + def __init__(self, obj: Optional['Document'] = None, copy: bool = False, **kwargs): |
| 15 | + self._doc_data = None |
19 | 16 | if isinstance(obj, Document): |
20 | 17 | if copy: |
21 | | - self._pb_body = cp.deepcopy(obj._pb_body) |
| 18 | + self._doc_data = cp.deepcopy(obj._doc_data) |
22 | 19 | else: |
23 | | - self._pb_body = obj._pb_body |
| 20 | + self._doc_data = obj._doc_data |
24 | 21 | if kwargs: |
25 | 22 | # check if there are mutually exclusive content fields |
26 | 23 | if len(self._all_doc_content_keys.intersection(kwargs.keys())) > 1: |
27 | 24 | raise ValueError( |
28 | 25 | f'Document content fields are mutually exclusive, please provide only one of {self._all_doc_content_keys}' |
29 | 26 | ) |
30 | | - self._pb_body = DocumentData(**kwargs) |
| 27 | + self._doc_data = DocumentData(**kwargs) |
31 | 28 | if obj is None and not kwargs: |
32 | | - self._pb_body = DocumentData() |
33 | | - |
34 | | - def _clear_content(self): |
35 | | - self._pb_body.text = None |
36 | | - self._pb_body.blob = None |
37 | | - self._pb_body.buffer = None |
38 | | - |
39 | | - @property |
40 | | - def id(self) -> str: |
41 | | - return self._pb_body.id |
42 | | - |
43 | | - @id.setter |
44 | | - def id(self, value: str): |
45 | | - self._pb_body.id = value |
46 | | - |
47 | | - @property |
48 | | - def granularity(self) -> Optional[int]: |
49 | | - return self._pb_body.granularity |
50 | | - |
51 | | - @granularity.setter |
52 | | - def granularity(self, value: Optional[int]): |
53 | | - self._pb_body.granularity = value |
54 | | - |
55 | | - @property |
56 | | - def adjacency(self) -> Optional[int]: |
57 | | - return self._pb_body.adjacency |
58 | | - |
59 | | - @adjacency.setter |
60 | | - def adjacency(self, value: Optional[int]): |
61 | | - self._pb_body.adjacency = value |
62 | | - |
63 | | - @property |
64 | | - def parent_id(self) -> Optional[str]: |
65 | | - return self._pb_body.parent_id |
66 | | - |
67 | | - @parent_id.setter |
68 | | - def parent_id(self, value: Optional[str]): |
69 | | - self._pb_body.parent_id = value |
70 | | - |
71 | | - @property |
72 | | - def buffer(self) -> Optional[bytes]: |
73 | | - return self._pb_body.buffer |
74 | | - |
75 | | - @buffer.setter |
76 | | - def buffer(self, value: Optional[bytes]): |
77 | | - self._clear_content() |
78 | | - self._pb_body.buffer = value |
79 | | - |
80 | | - @property |
81 | | - def blob(self) -> Optional['ArrayType']: |
82 | | - return self._pb_body.blob |
83 | | - |
84 | | - @blob.setter |
85 | | - def blob(self, value: Optional['ArrayType']): |
86 | | - self._clear_content() |
87 | | - self._pb_body.blob = value |
88 | | - |
89 | | - @property |
90 | | - def text(self) -> Optional[str]: |
91 | | - return self._pb_body.text |
92 | | - |
93 | | - @text.setter |
94 | | - def text(self, value: Optional[str]): |
95 | | - self._clear_content() |
96 | | - self._pb_body.text = value |
97 | | - |
98 | | - @property |
99 | | - def content(self) -> Optional['DocumentContentType']: |
100 | | - return self._pb_body.content |
101 | | - |
102 | | - @content.setter |
103 | | - def content(self, value: Optional['DocumentContentType']): |
104 | | - if isinstance(value, bytes): |
105 | | - self.buffer = value |
106 | | - elif isinstance(value, str): |
107 | | - self.text = value |
108 | | - else: |
109 | | - self.blob = value |
110 | | - |
111 | | - @property |
112 | | - def weight(self) -> Optional[float]: |
113 | | - return self._pb_body.weight |
114 | | - |
115 | | - @weight.setter |
116 | | - def weight(self, value: Optional[float]): |
117 | | - self._pb_body.weight = value |
118 | | - |
119 | | - @property |
120 | | - def uri(self) -> Optional[str]: |
121 | | - return self._pb_body.uri |
122 | | - |
123 | | - @uri.setter |
124 | | - def uri(self, value: Optional[str]): |
125 | | - self._pb_body.uri = value |
126 | | - |
127 | | - @property |
128 | | - def mime_type(self) -> Optional[str]: |
129 | | - return self._pb_body.mime_type |
130 | | - |
131 | | - @mime_type.setter |
132 | | - def mime_type(self, value: Optional[str]): |
133 | | - self._pb_body.mime_type = value |
134 | | - |
135 | | - @property |
136 | | - def tags(self) -> Optional[Dict[str, 'StructValueType']]: |
137 | | - return self._pb_body.tags |
138 | | - |
139 | | - @tags.setter |
140 | | - def tags(self, value: Optional[Dict[str, 'StructValueType']]): |
141 | | - self._pb_body.tags = value |
142 | | - |
143 | | - @property |
144 | | - def offset(self) -> Optional[float]: |
145 | | - return self._pb_body.offset |
146 | | - |
147 | | - @offset.setter |
148 | | - def offset(self, value: Optional[float]): |
149 | | - self._pb_body.offset = value |
150 | | - |
151 | | - @property |
152 | | - def location(self) -> Optional[List[float]]: |
153 | | - return self._pb_body.location |
154 | | - |
155 | | - @location.setter |
156 | | - def location(self, value: Optional[List[float]]): |
157 | | - self._pb_body.location = value |
158 | | - |
159 | | - @property |
160 | | - def embedding(self) -> Optional['ArrayType']: |
161 | | - return self._pb_body.embedding |
162 | | - |
163 | | - @embedding.setter |
164 | | - def embedding(self, value: Optional['ArrayType']): |
165 | | - self._pb_body.embedding = value |
166 | | - |
167 | | - @property |
168 | | - def modality(self) -> Optional[str]: |
169 | | - return self._pb_body.modality |
170 | | - |
171 | | - @modality.setter |
172 | | - def modality(self, value: Optional[str]): |
173 | | - self._pb_body.modality = value |
174 | | - |
175 | | - @property |
176 | | - def evaluations(self) -> Optional[Dict[str, 'NamedScore']]: |
177 | | - return self._pb_body.evaluations |
178 | | - |
179 | | - @evaluations.setter |
180 | | - def evaluations(self, value: Optional[Dict[str, 'NamedScore']]): |
181 | | - self._pb_body.evaluations = value |
182 | | - |
183 | | - @property |
184 | | - def scores(self) -> Optional[Dict[str, 'NamedScore']]: |
185 | | - return self._pb_body.scores |
186 | | - |
187 | | - @scores.setter |
188 | | - def scores(self, value: Optional[Dict[str, 'NamedScore']]): |
189 | | - self._pb_body.scores = value |
190 | | - |
191 | | - @property |
192 | | - def chunks(self) -> Optional['DocumentArray']: |
193 | | - if self._pb_body.chunks is None: |
194 | | - self._pb_body.chunks = DocumentArray() |
195 | | - return self._pb_body.chunks |
196 | | - |
197 | | - @chunks.setter |
198 | | - def chunks(self, value: Optional['DocumentArray']): |
199 | | - self._pb_body.chunks = value |
200 | | - |
201 | | - @property |
202 | | - def matches(self) -> Optional['DocumentArray']: |
203 | | - return self._pb_body.matches |
204 | | - |
205 | | - @matches.setter |
206 | | - def matches(self, value: Optional['DocumentArray']): |
207 | | - self._pb_body.matches = value |
208 | | - |
209 | | - @property |
210 | | - def timestamps(self) -> Optional[Dict[str, 'datetime']]: |
211 | | - return self._pb_body.timestamps |
212 | | - |
213 | | - @timestamps.setter |
214 | | - def timestamps(self, value: Optional[Dict[str, 'datetime']]): |
215 | | - self._pb_body.timestamps = value |
| 29 | + self._doc_data = DocumentData() |