def parse_metadata_entry(label: str, value: ParseableMetadataEntryData) -> "EventMetadataEntry": check.str_param(label, "label") if isinstance(value, (EventMetadataEntry, PartitionMetadataEntry)): raise DagsterInvalidEventMetadata( f"Expected a metadata value, found an instance of {value.__class__.__name__}. Consider " "instead using a EventMetadata wrapper for the value, or using the `metadata_entries` " "parameter to pass in a List[EventMetadataEntry|PartitionMetadataEntry]." ) if isinstance( value, ( TextMetadataEntryData, UrlMetadataEntryData, PathMetadataEntryData, JsonMetadataEntryData, MarkdownMetadataEntryData, FloatMetadataEntryData, IntMetadataEntryData, PythonArtifactMetadataEntryData, DagsterAssetMetadataEntryData, DagsterPipelineRunMetadataEntryData, ), ): return EventMetadataEntry(label, None, value) if isinstance(value, str): return EventMetadataEntry.text(value, label) if isinstance(value, float): return EventMetadataEntry.float(value, label) if isinstance(value, int): return EventMetadataEntry.int(value, label) if isinstance(value, dict): try: # check that the value is JSON serializable seven.dumps(value) return EventMetadataEntry.json(value, label) except TypeError: raise DagsterInvalidEventMetadata( f'Could not resolve the metadata value for "{label}" to a JSON serializable value. ' "Consider wrapping the value with the appropriate EventMetadata type." ) raise DagsterInvalidEventMetadata( f'Could not resolve the metadata value for "{label}" to a known type. ' f"Its type was {type(value)}. Consider wrapping the value with the appropriate " "EventMetadata type." )
def parse_metadata(metadata, metadata_entries): if metadata and metadata_entries: raise DagsterInvalidEventMetadata( "Attempted to provide both `metadata` and `metadata_entries` arguments to an event. " "Must provide only one of the two.") if metadata_entries: return check.list_param(metadata_entries, "metadata_entries", (EventMetadataEntry, PartitionMetadataEntry)) return [ parse_metadata_entry(k, v) for k, v in check.opt_dict_param( metadata, "metadata", key_type=str).items() ]