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,15 @@ 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
+ . iter ( )
65
+ . map ( |p| match p {
66
+ Some ( lit) => Some ( PyLiteral { inner : lit. clone ( ) } ) ,
67
+ _ => None ,
68
+ } )
69
+ . collect ( )
71
70
}
72
71
73
72
#[ getter]
@@ -102,16 +101,24 @@ impl PyDataFile {
102
101
103
102
#[ getter]
104
103
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 ( )
104
+ self . inner
105
+ . upper_bounds ( )
106
+ . into_iter ( )
107
+ . map ( |( k, v) | ( k. clone ( ) , v. to_bytes ( ) . unwrap ( ) . to_vec ( ) ) )
108
+ . collect ( )
106
109
}
107
110
108
111
#[ getter]
109
112
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 ( )
113
+ self . inner
114
+ . lower_bounds ( )
115
+ . into_iter ( )
116
+ . map ( |( k, v) | ( k. clone ( ) , v. to_bytes ( ) . unwrap ( ) . to_vec ( ) ) )
117
+ . collect ( )
111
118
}
112
119
113
120
#[ getter]
114
- fn key_metadata ( & self ) -> Option < & [ u8 ] > {
121
+ fn key_metadata ( & self ) -> Option < & [ u8 ] > {
115
122
self . inner . key_metadata ( )
116
123
}
117
124
@@ -129,36 +136,37 @@ impl PyDataFile {
129
136
fn sort_order_id ( & self ) -> Option < i32 > {
130
137
self . inner . sort_order_id ( )
131
138
}
132
-
133
139
}
134
140
135
141
#[ pyclass]
136
142
pub struct PyManifest {
137
143
inner : Manifest ,
138
144
}
139
145
140
-
141
146
#[ pymethods]
142
147
impl PyManifest {
143
148
fn entries ( & self ) -> Vec < PyManifestEntry > {
144
149
// TODO: Most of the time, we're only interested in 'alive' entries,
145
150
// that are the ones that are either ADDED or EXISTING
146
151
// so we can add a boolean to skip the DELETED entries right away before
147
152
// moving it into the Python world
148
- self . inner . entries ( ) . iter ( ) . map ( |entry| PyManifestEntry { inner : entry. clone ( ) } ) . collect ( )
153
+ self . inner
154
+ . entries ( )
155
+ . iter ( )
156
+ . map ( |entry| PyManifestEntry {
157
+ inner : entry. clone ( ) ,
158
+ } )
159
+ . collect ( )
149
160
}
150
161
}
151
162
152
-
153
163
#[ pyclass]
154
164
pub struct PyFieldSummary {
155
165
inner : FieldSummary ,
156
166
}
157
167
158
-
159
168
#[ pymethods]
160
169
impl crate :: manifest:: PyFieldSummary {
161
-
162
170
#[ getter]
163
171
fn contains_null ( & self ) -> bool {
164
172
self . inner . contains_null
@@ -170,25 +178,21 @@ impl crate::manifest::PyFieldSummary {
170
178
}
171
179
172
180
#[ getter]
173
- fn lower_bound ( & self ) -> Option < PyPrimitiveLiteral > {
174
- self . inner . lower_bound . clone ( ) . map ( |v| PyPrimitiveLiteral { inner : v . literal ( ) . clone ( ) } )
181
+ fn lower_bound ( & self ) -> Option < ByteBuf > {
182
+ self . inner . lower_bound
175
183
}
176
184
177
185
#[ getter]
178
- fn upper_bound ( & self ) -> Option < PyPrimitiveLiteral > {
179
- self . inner . upper_bound . clone ( ) . map ( |v| PyPrimitiveLiteral { inner : v . literal ( ) . clone ( ) } )
186
+ fn upper_bound ( & self ) -> Option < ByteBuf > {
187
+ self . inner . upper_bound
180
188
}
181
-
182
-
183
-
184
189
}
185
190
186
191
#[ pyclass]
187
192
pub struct PyManifestFile {
188
193
inner : ManifestFile ,
189
194
}
190
195
191
-
192
196
#[ pymethods]
193
197
impl crate :: manifest:: PyManifestFile {
194
198
#[ getter]
@@ -214,7 +218,6 @@ impl crate::manifest::PyManifestFile {
214
218
self . inner . sequence_number
215
219
}
216
220
217
-
218
221
#[ getter]
219
222
fn min_sequence_number ( & self ) -> i64 {
220
223
self . inner . min_sequence_number
@@ -225,7 +228,6 @@ impl crate::manifest::PyManifestFile {
225
228
self . inner . added_snapshot_id
226
229
}
227
230
228
-
229
231
#[ getter]
230
232
fn added_files_count ( & self ) -> Option < u32 > {
231
233
self . inner . added_files_count
@@ -258,16 +260,17 @@ impl crate::manifest::PyManifestFile {
258
260
259
261
#[ getter]
260
262
fn partitions ( & self ) -> Vec < PyFieldSummary > {
261
- self . inner . partitions . iter ( ) . map ( |s| PyFieldSummary {
262
- inner : s. clone ( )
263
- } ) . collect ( )
263
+ self . inner
264
+ . partitions
265
+ . iter ( )
266
+ . map ( |s| PyFieldSummary { inner : s. clone ( ) } )
267
+ . collect ( )
264
268
}
265
269
266
270
#[ getter]
267
271
fn key_metadata ( & self ) -> Vec < u8 > {
268
272
self . inner . key_metadata . clone ( )
269
273
}
270
-
271
274
}
272
275
273
276
#[ pyclass]
@@ -277,7 +280,6 @@ pub struct PyManifestEntry {
277
280
278
281
#[ pymethods]
279
282
impl PyManifestEntry {
280
-
281
283
#[ getter]
282
284
fn status ( & self ) -> i32 {
283
285
ManifestStatus :: Existing as i32
@@ -301,17 +303,16 @@ impl PyManifestEntry {
301
303
#[ getter]
302
304
fn data_file ( & self ) -> PyDataFile {
303
305
PyDataFile {
304
- inner : self . inner . data_file . clone ( )
306
+ inner : self . inner . data_file . clone ( ) ,
305
307
}
306
308
}
307
309
}
308
310
309
-
310
311
#[ pyfunction]
311
312
pub fn read_manifest_entries ( bs : & [ u8 ] ) -> PyManifest {
312
313
// TODO: Some error handling
313
314
PyManifest {
314
- inner : Manifest :: parse_avro ( bs) . unwrap ( )
315
+ inner : Manifest :: parse_avro ( bs) . unwrap ( ) ,
315
316
}
316
317
}
317
318
@@ -320,19 +321,23 @@ pub struct PyManifestList {
320
321
inner : ManifestList ,
321
322
}
322
323
323
-
324
324
#[ pymethods]
325
325
impl crate :: manifest:: PyManifestList {
326
326
fn entries ( & self ) -> Vec < PyManifestFile > {
327
- self . inner . entries ( ) . iter ( ) . map ( |file| PyManifestFile { inner : file. clone ( ) } ) . collect ( )
327
+ self . inner
328
+ . entries ( )
329
+ . iter ( )
330
+ . map ( |file| PyManifestFile {
331
+ inner : file. clone ( ) ,
332
+ } )
333
+ . collect ( )
328
334
}
329
335
}
330
336
331
-
332
337
#[ pyfunction]
333
338
pub fn read_manifest_list ( bs : & [ u8 ] ) -> PyManifestList {
334
339
PyManifestList {
335
- inner : ManifestList :: parse_with_version ( bs, FormatVersion :: V2 ) . unwrap ( )
340
+ inner : ManifestList :: parse_with_version ( bs, FormatVersion :: V2 ) . unwrap ( ) ,
336
341
}
337
342
}
338
343
0 commit comments