|
13 | 13 | from earthkit.data.core.index import Index |
14 | 14 | from earthkit.data.core.index import MaskIndex |
15 | 15 | from earthkit.data.core.index import MultiIndex |
| 16 | +from earthkit.data.sources import Source |
16 | 17 | from earthkit.data.utils.parts import Part |
17 | 18 |
|
18 | 19 | from .. import Reader |
@@ -505,3 +506,60 @@ def mutate_source(self): |
505 | 506 |
|
506 | 507 | def _default_encoder(self): |
507 | 508 | return Reader._default_encoder(self) |
| 509 | + |
| 510 | + |
| 511 | +class BUFRReader1(Source, Reader): |
| 512 | + def __init__(self, source, path, parts=None, positions=None): |
| 513 | + self._ori_source = source |
| 514 | + self._kwargs = {"parts": parts} |
| 515 | + Reader.__init__(self, source, path) |
| 516 | + |
| 517 | + def to_featurelist(self, *args, **kwargs): |
| 518 | + return BUFRInOneFile(self.path, **self._kwargs, **kwargs) |
| 519 | + |
| 520 | + def to_pandas(self, *args, **kwargs): |
| 521 | + return self.to_featurelist().to_pandas(*args, **kwargs) |
| 522 | + |
| 523 | + def mutate_source(self): |
| 524 | + # A BUFRReader is a source itself |
| 525 | + return self |
| 526 | + |
| 527 | + def mutate(self): |
| 528 | + return self |
| 529 | + |
| 530 | + def _to_data_object(self): |
| 531 | + from .data import BUFRData |
| 532 | + |
| 533 | + return BUFRData(self) |
| 534 | + |
| 535 | + @classmethod |
| 536 | + def merge(cls, sources): |
| 537 | + |
| 538 | + assert all(isinstance(s, BUFRReader1) for s in sources) |
| 539 | + return MultiBUFRReader1(sources) |
| 540 | + |
| 541 | + |
| 542 | +class MultiBUFRReader1(BUFRReader1): |
| 543 | + def __init__(self, sources): |
| 544 | + self.sources = sources |
| 545 | + |
| 546 | + def to_featurelist(self): |
| 547 | + fs = [s.to_featurelist() for s in self.sources] |
| 548 | + from earthkit.data.mergers import merge_by_class |
| 549 | + |
| 550 | + merged = merge_by_class(fs) |
| 551 | + if merged is not None: |
| 552 | + return merged.mutate() |
| 553 | + |
| 554 | + raise NotImplementedError("Conversion of MultiBUFRReader1 to featurelist is not implemented") |
| 555 | + |
| 556 | + def to_pandas(self, *args, **kwargs): |
| 557 | + return self.to_featurelist().to_pandas(*args, **kwargs) |
| 558 | + |
| 559 | + def __repr__(self): |
| 560 | + return "MultiBUFRReader1(%s)" % (self.sources,) |
| 561 | + |
| 562 | + def _to_data_object(self): |
| 563 | + from earthkit.data.core.data import MultiData |
| 564 | + |
| 565 | + return MultiData(self) |
0 commit comments