15
15
// specific language governing permissions and limitations
16
16
// under the License.
17
17
18
- use iceberg:: spec:: { DataFile , DataFileFormat , FieldSummary , FormatVersion , Literal , Manifest , ManifestEntry , ManifestFile , ManifestList , ManifestStatus , PrimitiveLiteral , StructType , Type } ;
19
- use iceberg:: { Error , ErrorKind } ;
20
- use pyo3:: prelude:: * ;
21
- use pyo3:: types:: PyAny ;
22
18
use std:: collections:: HashMap ;
23
19
use std:: sync:: Arc ;
24
20
21
+ use iceberg:: spec:: {
22
+ DataFile , DataFileFormat , FieldSummary , FormatVersion , Literal , Manifest , ManifestEntry ,
23
+ ManifestFile , ManifestList , ManifestStatus , PrimitiveLiteral ,
24
+ } ;
25
+ use pyo3:: prelude:: * ;
26
+
25
27
#[ pyclass]
26
28
pub struct PyLiteral {
27
29
inner : Literal ,
28
30
}
29
31
30
-
31
32
#[ pyclass]
32
33
pub struct PyPrimitiveLiteral {
33
34
inner : PrimitiveLiteral ,
34
35
}
35
36
36
-
37
37
#[ pyclass]
38
38
pub struct PyDataFile {
39
39
inner : DataFile ,
40
40
}
41
41
42
42
#[ pymethods]
43
43
impl PyDataFile {
44
-
45
44
#[ getter]
46
45
fn content ( & self ) -> i32 {
47
46
self . inner . content_type ( ) as i32
@@ -64,10 +63,15 @@ impl PyDataFile {
64
63
65
64
#[ getter]
66
65
fn partition ( & self ) -> Vec < Option < PyLiteral > > {
67
- self . inner . partition ( ) . fields ( ) . iter ( ) . map ( |p| match p {
68
- Some ( lit) => Some ( PyLiteral { inner : lit. clone ( ) } ) ,
69
- _ => None
70
- } ) . collect ( )
66
+ self . inner
67
+ . partition ( )
68
+ . fields ( )
69
+ . iter ( )
70
+ . map ( |p| match p {
71
+ Some ( lit) => Some ( PyLiteral { inner : lit. clone ( ) } ) ,
72
+ _ => None ,
73
+ } )
74
+ . collect ( )
71
75
}
72
76
73
77
#[ getter]
@@ -102,16 +106,24 @@ impl PyDataFile {
102
106
103
107
#[ getter]
104
108
fn upper_bounds ( & self ) -> HashMap < i32 , Vec < u8 > > {
105
- self . inner . upper_bounds ( ) . into_iter ( ) . map ( |( k, v) | ( k. clone ( ) , v. to_bytes ( ) . unwrap ( ) . to_vec ( ) ) ) . collect ( )
109
+ self . inner
110
+ . upper_bounds ( )
111
+ . into_iter ( )
112
+ . map ( |( k, v) | ( k. clone ( ) , v. to_bytes ( ) . unwrap ( ) . to_vec ( ) ) )
113
+ . collect ( )
106
114
}
107
115
108
116
#[ getter]
109
117
fn lower_bounds ( & self ) -> HashMap < i32 , Vec < u8 > > {
110
- self . inner . lower_bounds ( ) . into_iter ( ) . map ( |( k, v) | ( k. clone ( ) , v. to_bytes ( ) . unwrap ( ) . to_vec ( ) ) ) . collect ( )
118
+ self . inner
119
+ . lower_bounds ( )
120
+ . into_iter ( )
121
+ . map ( |( k, v) | ( k. clone ( ) , v. to_bytes ( ) . unwrap ( ) . to_vec ( ) ) )
122
+ . collect ( )
111
123
}
112
124
113
125
#[ getter]
114
- fn key_metadata ( & self ) -> Option < & [ u8 ] > {
126
+ fn key_metadata ( & self ) -> Option < & [ u8 ] > {
115
127
self . inner . key_metadata ( )
116
128
}
117
129
@@ -129,36 +141,37 @@ impl PyDataFile {
129
141
fn sort_order_id ( & self ) -> Option < i32 > {
130
142
self . inner . sort_order_id ( )
131
143
}
132
-
133
144
}
134
145
135
146
#[ pyclass]
136
147
pub struct PyManifest {
137
148
inner : Manifest ,
138
149
}
139
150
140
-
141
151
#[ pymethods]
142
152
impl PyManifest {
143
153
fn entries ( & self ) -> Vec < PyManifestEntry > {
144
154
// TODO: Most of the time, we're only interested in 'alive' entries,
145
155
// that are the ones that are either ADDED or EXISTING
146
156
// so we can add a boolean to skip the DELETED entries right away before
147
157
// moving it into the Python world
148
- self . inner . entries ( ) . iter ( ) . map ( |entry| PyManifestEntry { inner : entry. clone ( ) } ) . collect ( )
158
+ self . inner
159
+ . entries ( )
160
+ . iter ( )
161
+ . map ( |entry| PyManifestEntry {
162
+ inner : entry. clone ( ) ,
163
+ } )
164
+ . collect ( )
149
165
}
150
166
}
151
167
152
-
153
168
#[ pyclass]
154
169
pub struct PyFieldSummary {
155
170
inner : FieldSummary ,
156
171
}
157
172
158
-
159
173
#[ pymethods]
160
174
impl crate :: manifest:: PyFieldSummary {
161
-
162
175
#[ getter]
163
176
fn contains_null ( & self ) -> bool {
164
177
self . inner . contains_null
@@ -171,24 +184,24 @@ impl crate::manifest::PyFieldSummary {
171
184
172
185
#[ getter]
173
186
fn lower_bound ( & self ) -> Option < PyPrimitiveLiteral > {
174
- self . inner . lower_bound . clone ( ) . map ( |v| PyPrimitiveLiteral { inner : v. literal ( ) . clone ( ) } )
187
+ self . inner . lower_bound . clone ( ) . map ( |v| PyPrimitiveLiteral {
188
+ inner : v. iter ( ) . clone ( ) ,
189
+ } )
175
190
}
176
191
177
192
#[ getter]
178
193
fn upper_bound ( & self ) -> Option < PyPrimitiveLiteral > {
179
- self . inner . upper_bound . clone ( ) . map ( |v| PyPrimitiveLiteral { inner : v. literal ( ) . clone ( ) } )
194
+ self . inner . upper_bound . clone ( ) . map ( |v| PyPrimitiveLiteral {
195
+ inner : v. literal ( ) . clone ( ) ,
196
+ } )
180
197
}
181
-
182
-
183
-
184
198
}
185
199
186
200
#[ pyclass]
187
201
pub struct PyManifestFile {
188
202
inner : ManifestFile ,
189
203
}
190
204
191
-
192
205
#[ pymethods]
193
206
impl crate :: manifest:: PyManifestFile {
194
207
#[ getter]
@@ -214,7 +227,6 @@ impl crate::manifest::PyManifestFile {
214
227
self . inner . sequence_number
215
228
}
216
229
217
-
218
230
#[ getter]
219
231
fn min_sequence_number ( & self ) -> i64 {
220
232
self . inner . min_sequence_number
@@ -225,7 +237,6 @@ impl crate::manifest::PyManifestFile {
225
237
self . inner . added_snapshot_id
226
238
}
227
239
228
-
229
240
#[ getter]
230
241
fn added_files_count ( & self ) -> Option < u32 > {
231
242
self . inner . added_files_count
@@ -258,16 +269,17 @@ impl crate::manifest::PyManifestFile {
258
269
259
270
#[ getter]
260
271
fn partitions ( & self ) -> Vec < PyFieldSummary > {
261
- self . inner . partitions . iter ( ) . map ( |s| PyFieldSummary {
262
- inner : s. clone ( )
263
- } ) . collect ( )
272
+ self . inner
273
+ . partitions
274
+ . iter ( )
275
+ . map ( |s| PyFieldSummary { inner : s. clone ( ) } )
276
+ . collect ( )
264
277
}
265
278
266
279
#[ getter]
267
280
fn key_metadata ( & self ) -> Vec < u8 > {
268
281
self . inner . key_metadata . clone ( )
269
282
}
270
-
271
283
}
272
284
273
285
#[ pyclass]
@@ -277,7 +289,6 @@ pub struct PyManifestEntry {
277
289
278
290
#[ pymethods]
279
291
impl PyManifestEntry {
280
-
281
292
#[ getter]
282
293
fn status ( & self ) -> i32 {
283
294
ManifestStatus :: Existing as i32
@@ -301,17 +312,16 @@ impl PyManifestEntry {
301
312
#[ getter]
302
313
fn data_file ( & self ) -> PyDataFile {
303
314
PyDataFile {
304
- inner : self . inner . data_file . clone ( )
315
+ inner : self . inner . data_file . clone ( ) ,
305
316
}
306
317
}
307
318
}
308
319
309
-
310
320
#[ pyfunction]
311
321
pub fn read_manifest_entries ( bs : & [ u8 ] ) -> PyManifest {
312
322
// TODO: Some error handling
313
323
PyManifest {
314
- inner : Manifest :: parse_avro ( bs) . unwrap ( )
324
+ inner : Manifest :: parse_avro ( bs) . unwrap ( ) ,
315
325
}
316
326
}
317
327
@@ -320,19 +330,23 @@ pub struct PyManifestList {
320
330
inner : ManifestList ,
321
331
}
322
332
323
-
324
333
#[ pymethods]
325
334
impl crate :: manifest:: PyManifestList {
326
335
fn entries ( & self ) -> Vec < PyManifestFile > {
327
- self . inner . entries ( ) . iter ( ) . map ( |file| PyManifestFile { inner : file. clone ( ) } ) . collect ( )
336
+ self . inner
337
+ . entries ( )
338
+ . iter ( )
339
+ . map ( |file| PyManifestFile {
340
+ inner : file. clone ( ) ,
341
+ } )
342
+ . collect ( )
328
343
}
329
344
}
330
345
331
-
332
346
#[ pyfunction]
333
347
pub fn read_manifest_list ( bs : & [ u8 ] ) -> PyManifestList {
334
348
PyManifestList {
335
- inner : ManifestList :: parse_with_version ( bs, FormatVersion :: V2 ) . unwrap ( )
349
+ inner : ManifestList :: parse_with_version ( bs, FormatVersion :: V2 ) . unwrap ( ) ,
336
350
}
337
351
}
338
352
0 commit comments