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 ,
24
+ } ;
25
+ use pyo3:: prelude:: * ;
26
+
25
27
#[ pyclass]
26
28
pub struct PyLiteral {
27
29
inner : Literal ,
28
30
}
29
31
30
-
31
- #[ pyclass]
32
- pub struct PyPrimitiveLiteral {
33
- inner : PrimitiveLiteral ,
34
- }
35
-
36
-
37
32
#[ pyclass]
38
33
pub struct PyDataFile {
39
34
inner : DataFile ,
40
35
}
41
36
42
37
#[ pymethods]
43
38
impl PyDataFile {
44
-
45
39
#[ getter]
46
40
fn content ( & self ) -> i32 {
47
41
self . inner . content_type ( ) as i32
@@ -64,10 +58,11 @@ impl PyDataFile {
64
58
65
59
#[ getter]
66
60
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 ( )
61
+ self . inner
62
+ . partition ( )
63
+ . fields ( )
64
+ . map ( |lit| PyLiteral { inner : lit. clone ( ) } )
65
+ . collect ( )
71
66
}
72
67
73
68
#[ getter]
@@ -102,16 +97,16 @@ impl PyDataFile {
102
97
103
98
#[ getter]
104
99
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 ( )
100
+ self . inner . upper_bounds ( ) . collect ( )
106
101
}
107
102
108
103
#[ getter]
109
104
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 ( )
105
+ self . inner . lower_bounds ( ) . collect ( )
111
106
}
112
107
113
108
#[ getter]
114
- fn key_metadata ( & self ) -> Option < & [ u8 ] > {
109
+ fn key_metadata ( & self ) -> Option < & [ u8 ] > {
115
110
self . inner . key_metadata ( )
116
111
}
117
112
@@ -129,36 +124,37 @@ impl PyDataFile {
129
124
fn sort_order_id ( & self ) -> Option < i32 > {
130
125
self . inner . sort_order_id ( )
131
126
}
132
-
133
127
}
134
128
135
129
#[ pyclass]
136
130
pub struct PyManifest {
137
131
inner : Manifest ,
138
132
}
139
133
140
-
141
134
#[ pymethods]
142
135
impl PyManifest {
143
136
fn entries ( & self ) -> Vec < PyManifestEntry > {
144
137
// TODO: Most of the time, we're only interested in 'alive' entries,
145
138
// that are the ones that are either ADDED or EXISTING
146
139
// so we can add a boolean to skip the DELETED entries right away before
147
140
// moving it into the Python world
148
- self . inner . entries ( ) . iter ( ) . map ( |entry| PyManifestEntry { inner : entry. clone ( ) } ) . collect ( )
141
+ self . inner
142
+ . entries ( )
143
+ . iter ( )
144
+ . map ( |entry| PyManifestEntry {
145
+ inner : entry. clone ( ) ,
146
+ } )
147
+ . collect ( )
149
148
}
150
149
}
151
150
152
-
153
151
#[ pyclass]
154
152
pub struct PyFieldSummary {
155
153
inner : FieldSummary ,
156
154
}
157
155
158
-
159
156
#[ pymethods]
160
157
impl crate :: manifest:: PyFieldSummary {
161
-
162
158
#[ getter]
163
159
fn contains_null ( & self ) -> bool {
164
160
self . inner . contains_null
@@ -170,25 +166,21 @@ impl crate::manifest::PyFieldSummary {
170
166
}
171
167
172
168
#[ getter]
173
- fn lower_bound ( & self ) -> Option < PyPrimitiveLiteral > {
174
- self . inner . lower_bound . clone ( ) . map ( |v| PyPrimitiveLiteral { inner : v . literal ( ) . clone ( ) } )
169
+ fn lower_bound ( & self ) -> Option < Vec < u8 > > {
170
+ self . inner . lower_bound . clone ( ) . map ( |b| b . to_vec ( ) )
175
171
}
176
172
177
173
#[ getter]
178
- fn upper_bound ( & self ) -> Option < PyPrimitiveLiteral > {
179
- self . inner . upper_bound . clone ( ) . map ( |v| PyPrimitiveLiteral { inner : v . literal ( ) . clone ( ) } )
174
+ fn upper_bound ( & self ) -> Option < Vec < u8 > > {
175
+ self . inner . upper_bound . clone ( ) . map ( |b| b . to_vec ( ) )
180
176
}
181
-
182
-
183
-
184
177
}
185
178
186
179
#[ pyclass]
187
180
pub struct PyManifestFile {
188
181
inner : ManifestFile ,
189
182
}
190
183
191
-
192
184
#[ pymethods]
193
185
impl crate :: manifest:: PyManifestFile {
194
186
#[ getter]
@@ -214,7 +206,6 @@ impl crate::manifest::PyManifestFile {
214
206
self . inner . sequence_number
215
207
}
216
208
217
-
218
209
#[ getter]
219
210
fn min_sequence_number ( & self ) -> i64 {
220
211
self . inner . min_sequence_number
@@ -225,7 +216,6 @@ impl crate::manifest::PyManifestFile {
225
216
self . inner . added_snapshot_id
226
217
}
227
218
228
-
229
219
#[ getter]
230
220
fn added_files_count ( & self ) -> Option < u32 > {
231
221
self . inner . added_files_count
@@ -258,16 +248,19 @@ impl crate::manifest::PyManifestFile {
258
248
259
249
#[ getter]
260
250
fn partitions ( & self ) -> Vec < PyFieldSummary > {
261
- self . inner . partitions . iter ( ) . map ( |s| PyFieldSummary {
262
- inner : s. clone ( )
263
- } ) . collect ( )
251
+ self . inner
252
+ . partitions
253
+ . clone ( )
254
+ . unwrap ( )
255
+ . iter ( )
256
+ . map ( |s| PyFieldSummary { inner : s. clone ( ) } )
257
+ . collect ( )
264
258
}
265
259
266
260
#[ getter]
267
261
fn key_metadata ( & self ) -> Vec < u8 > {
268
262
self . inner . key_metadata . clone ( )
269
263
}
270
-
271
264
}
272
265
273
266
#[ pyclass]
@@ -277,7 +270,6 @@ pub struct PyManifestEntry {
277
270
278
271
#[ pymethods]
279
272
impl PyManifestEntry {
280
-
281
273
#[ getter]
282
274
fn status ( & self ) -> i32 {
283
275
ManifestStatus :: Existing as i32
@@ -301,17 +293,16 @@ impl PyManifestEntry {
301
293
#[ getter]
302
294
fn data_file ( & self ) -> PyDataFile {
303
295
PyDataFile {
304
- inner : self . inner . data_file . clone ( )
296
+ inner : self . inner . data_file . clone ( ) ,
305
297
}
306
298
}
307
299
}
308
300
309
-
310
301
#[ pyfunction]
311
302
pub fn read_manifest_entries ( bs : & [ u8 ] ) -> PyManifest {
312
303
// TODO: Some error handling
313
304
PyManifest {
314
- inner : Manifest :: parse_avro ( bs) . unwrap ( )
305
+ inner : Manifest :: parse_avro ( bs) . unwrap ( ) ,
315
306
}
316
307
}
317
308
@@ -320,19 +311,23 @@ pub struct PyManifestList {
320
311
inner : ManifestList ,
321
312
}
322
313
323
-
324
314
#[ pymethods]
325
315
impl crate :: manifest:: PyManifestList {
326
316
fn entries ( & self ) -> Vec < PyManifestFile > {
327
- self . inner . entries ( ) . iter ( ) . map ( |file| PyManifestFile { inner : file. clone ( ) } ) . collect ( )
317
+ self . inner
318
+ . entries ( )
319
+ . iter ( )
320
+ . map ( |file| PyManifestFile {
321
+ inner : file. clone ( ) ,
322
+ } )
323
+ . collect ( )
328
324
}
329
325
}
330
326
331
-
332
327
#[ pyfunction]
333
328
pub fn read_manifest_list ( bs : & [ u8 ] ) -> PyManifestList {
334
329
PyManifestList {
335
- inner : ManifestList :: parse_with_version ( bs, FormatVersion :: V2 ) . unwrap ( )
330
+ inner : ManifestList :: parse_with_version ( bs, FormatVersion :: V2 ) . unwrap ( ) ,
336
331
}
337
332
}
338
333
0 commit comments