Commit a078949f authored by Open Science Conservation Fund's avatar Open Science Conservation Fund
Browse files

fixes for metadata extraction & displaying custom attrs in the expert module

parent 3d1fbaf5
Loading
Loading
Loading
Loading
+5 −29
Original line number Diff line number Diff line
@@ -231,7 +231,6 @@ class ClassificationSerializer(BasePKSerializer):
            "is_setup",
            "static_attrs",
            "dynamic_attrs",
            "dynamic_attrs_with_confidence",
            "status",
            "status_ai",
            "classified",
@@ -248,7 +247,6 @@ class ClassificationSerializer(BasePKSerializer):
    resource = ResourceNestedSerializer()
    collection = serializers.ReadOnlyField(source="collection_id")
    dynamic_attrs = serializers.SerializerMethodField()
    dynamic_attrs_with_confidence = serializers.SerializerMethodField()
    classified = serializers.SerializerMethodField()
    classified_ai = serializers.SerializerMethodField()
    classification_project = serializers.SerializerMethodField()
@@ -259,32 +257,6 @@ class ClassificationSerializer(BasePKSerializer):
    bboxes = serializers.SerializerMethodField()

    def get_dynamic_attrs(self, item):
        """Custom method for retrieving dynamic attributes connected to given
        classification"""
        if not self.active_standard:
            if item.classificator:
                self.active_standard = item.classificator.active_standard_attrs(
                    "DYNAMIC"
                )
            else:
                self.active_standard = (
                    ClassificatorSettings.STANDARD_ATTRS_REQUIRED_DYNAMIC
                )
        dynamic_attrs = item.dynamic_attrs.all()
        return_list = []
        for row in dynamic_attrs:
            attr_confidence = getattr(row, "attr_confidence", None) or {}
            row_attrs = {}
            for attr in self.active_standard:
                value = str(getattr(row, attr))
                if attr in attr_confidence:
                    value = f"{value} ({attr_confidence[attr]:.2f})"
                row_attrs[attr] = value
            row_attrs.update(row.attrs)
            return_list.append(row_attrs)
        return return_list

    def get_dynamic_attrs_with_confidence(self, item):
        if not self.active_standard:
            if item.classificator:
                self.active_standard = item.classificator.active_standard_attrs(
@@ -305,7 +277,11 @@ class ClassificationSerializer(BasePKSerializer):
                if attr in attr_confidence:
                    value["confidence"] = attr_confidence[attr] * 100
                row_attrs[attr] = value
            row_attrs.update(row.attrs)

            # convert custom attrs to dict with value only
            custom_attrs = {k: {"value": str(v)} for k, v in row.attrs.items()}
            row_attrs.update(custom_attrs)

            return_list.append(row_attrs)
        return return_list

+1 −1
Original line number Diff line number Diff line
@@ -334,7 +334,7 @@
<td data-title="'Attributes'">
  <!-- ng-show="showTags" -->
<div class="tags-list">
    <div ng-repeat="dynamic_attr in record.dynamic_attrs_with_confidence" style="display: flex;flex-wrap: wrap;gap: 2px;">
    <div ng-repeat="dynamic_attr in record.dynamic_attrs" style="display: flex;flex-wrap: wrap;gap: 2px;">
      <div ng-repeat="(label, tag) in dynamic_attr" style="display: inline;">
          <span class="label label-success" title="{[{ tag.value }]}"
                style="white-space: normal; text-align: left; overflow: auto; margin: 0;"
+2 −2
Original line number Diff line number Diff line
@@ -341,11 +341,11 @@ class ResourceMetadataExtractor:
        make = metadata.get("Make")
        model = metadata.get("Model")
        if make:
            make = make.strip().lower()
            make = str(make).strip().lower()
            if not model:
                model = "(unknown)"
            else:
                model = model.strip().lower()
                model = str(model).strip().lower()
            # Remove redundant make from model if present
            if model.startswith(make):
                camera_model = model