|
39 | 39 | DRS_ACCESS_URL,
|
40 | 40 | CFG_ACCESS_METHOD_KEY,
|
41 | 41 | )
|
42 |
| -from bbconf.exceptions import MissingConfigDataError, BedBaseConfError |
| 42 | +from bbconf.exceptions import * |
43 | 43 | from bbconf.helpers import raise_missing_key, get_bedbase_cfg
|
44 | 44 | from bbconf.models import DRSModel, AccessMethod, AccessURL
|
45 | 45 |
|
@@ -566,49 +566,92 @@ def get_prefixed_uri(self, postfix: str, access_id: str) -> str:
|
566 | 566 | :param access_id: access method name
|
567 | 567 | :return: full uri path
|
568 | 568 | """
|
569 |
| - prefix = self.config[CFG_ACCESS_METHOD_KEY][access_id]["prefix"] |
570 |
| - return os.path.join(prefix, postfix) |
| 569 | + |
| 570 | + try: |
| 571 | + prefix = self.config[CFG_ACCESS_METHOD_KEY][access_id]["prefix"] |
| 572 | + return os.path.join(prefix, postfix) |
| 573 | + except KeyError: |
| 574 | + _LOGGER.error(f"Access method {access_id} is not defined.") |
| 575 | + raise IncorrectAccessMethodError( |
| 576 | + f"Access method {access_id} is not defined." |
| 577 | + ) |
571 | 578 |
|
572 |
| - def get_object_uri( |
| 579 | + def get_thumbnail_uri( |
| 580 | + self, |
573 | 581 | record_type: str,
|
574 | 582 | record_id: str,
|
575 | 583 | result_id: str,
|
576 | 584 | access_id: str
|
577 | 585 | ):
|
| 586 | + try: |
| 587 | + result = self.get_result(record_type, record_id, result_id) |
| 588 | + return self.get_prefixed_uri(result["thumbnail_path"], "http") |
| 589 | + except KeyError: |
| 590 | + _LOGGER.error(f"Thumbnail for {record_type} {record_id} {result_id} is not defined.") |
| 591 | + raise MissingThumbnailError( |
| 592 | + f"Thumbnail for {record_type} {record_id} {result_id} is not defined." |
| 593 | + ) |
| 594 | + |
| 595 | + |
| 596 | + def get_result(self, record_type: str, record_id: str, result_id: str): |
578 | 597 | if record_type == "bed":
|
579 |
| - result = bbc.bed.retrieve_one(record_id, result_id) |
| 598 | + result = self.bed.retrieve_one(record_id, result_id) |
| 599 | + # schema = self.bed.schema.original_schema |
| 600 | + schema = self.bed.schema._sample_level_data[result_id] |
580 | 601 | elif record_type == "bedset":
|
581 |
| - result = bbc.bedset.retrieve_one(record_id, result_id) |
| 602 | + result = self.bedset.retrieve_one(record_id, result_id) |
| 603 | + |
| 604 | + result_type = schema.get("object_type", schema["type"]) |
| 605 | + _LOGGER.info(f"Getting uri for {record_type} {record_id} {result_id}") |
| 606 | + _LOGGER.info(f"Result type: {result_type}") |
| 607 | + _LOGGER.info(f"Result: {result}") |
| 608 | + return result |
| 609 | + |
| 610 | + def get_object_uri( |
| 611 | + self, |
| 612 | + record_type: str, |
| 613 | + record_id: str, |
| 614 | + result_id: str, |
| 615 | + access_id: str |
| 616 | + ): |
| 617 | + result = self.get_result(record_type, record_id, result_id) |
582 | 618 | return self.get_prefixed_uri(result["path"], access_id)
|
583 | 619 |
|
584 | 620 |
|
585 |
| - def get_drs_metadata(self, record_id: str, result_id: str, base_uri: str) -> DRSModel: |
| 621 | + def get_drs_metadata(self, record_type: str, record_id: str, result_id: str, base_uri: str) -> DRSModel: |
586 | 622 | """
|
587 |
| - Get DRS metadata for a bed file |
| 623 | + Get DRS metadata for a bed- or bedset-associated file |
588 | 624 |
|
589 |
| - :param object_id: record identifier |
| 625 | + :param record_type: bed or bedset |
| 626 | + :param record_id: record identifier |
| 627 | + :param result_id: name of the result file to get metadata for |
| 628 | + :param base_uri: base uri to use for the self_uri field (server hostname of DRS broker) |
590 | 629 | :return: DRS metadata
|
591 | 630 | """
|
592 | 631 |
|
593 |
| - bed_metadata = self.bed.retrieve_one(record_id) |
| 632 | + if record_type == "bed": |
| 633 | + record_metadata = self.bed.retrieve_one(record_id) |
| 634 | + elif record_type == "bedset": |
| 635 | + record_metadata = self.bedset.retrieve_one(record_id) |
| 636 | + _LOGGER.info(f"DRS Metadata for {record_type} {record_id} {result_id}: {record_metadata}") |
594 | 637 | access_methods = []
|
| 638 | + object_id = f"{record_type}.{record_id}.{result_id}" |
595 | 639 | for access_id in self.config[CFG_ACCESS_METHOD_KEY].keys():
|
596 | 640 | access_dict = AccessMethod(
|
597 | 641 | type=access_id,
|
598 | 642 | access_id=access_id,
|
599 |
| - access_url=AccessURL(url=self.get_object_uri(record_type="bed", record_id, result_id, access_id)), |
| 643 | + access_url=AccessURL(url=self.get_object_uri(record_type, record_id, result_id, access_id)), |
600 | 644 | region=self.config[CFG_ACCESS_METHOD_KEY][access_id].get(
|
601 | 645 | "region", None
|
602 | 646 | ),
|
603 | 647 | )
|
604 | 648 | access_methods.append(access_dict)
|
605 |
| - |
606 | 649 | drs_dict = DRSModel(
|
607 | 650 | id=object_id,
|
608 | 651 | self_uri=f"drs://{base_uri}/{object_id}",
|
609 |
| - size=bed_metadata[result_id]["size"], |
610 |
| - created_time=bed_metadata["pipestat_created_time"], |
611 |
| - updated_time=bed_metadata["pipestat_modified_time"], |
| 652 | + size=record_metadata[result_id].get("size", "unknown"), |
| 653 | + created_time=record_metadata["pipestat_created_time"], |
| 654 | + updated_time=record_metadata["pipestat_modified_time"], |
612 | 655 | checksums=object_id,
|
613 | 656 | access_methods=access_methods,
|
614 | 657 | )
|
|
0 commit comments