def test_complex_type_materialization():
    pipeline = multiple_output_pipeline()

    with get_temp_file_names(2) as file_tuple:
        filename_one, filename_two = file_tuple  # pylint: disable=E0632
        result = execute_pipeline(
            pipeline,
            {
                'solids': {
                    'return_one_and_foo': {
                        'outputs': [
                            {
                                'string': {
                                    'json': {
                                        'path': filename_one
                                    }
                                }
                            },
                            {
                                'number': {
                                    'json': {
                                        'path': filename_two
                                    }
                                }
                            },
                        ]
                    }
                }
            },
        )

        assert result.success
        for event in result.event_list:
            if event.event_type == DagsterEventType.STEP_MATERIALIZATION:
                event = event.event_specific_data.materialization
                assert len(event.metadata_entries) == 3
                assert event.metadata_entries[1] == EventMetadataEntry(
                    label='system-type-name',
                    description=None,
                    entry_data=TextMetadataEntryData(text='String'),
                ) or event.metadata_entries[1] == EventMetadataEntry(
                    label='system-type-name',
                    description=None,
                    entry_data=TextMetadataEntryData(text='Int'),
                )
                assert event.metadata_entries[2] == EventMetadataEntry(
                    label='system-type-description',
                    description=None,
                    entry_data=TextMetadataEntryData(text='Any'),
                )
def test_basic_type_materialization():
    pipeline = single_string_output_pipeline()

    with get_temp_file_name() as filename:
        result = execute_pipeline(
            pipeline,
            {
                'solids': {
                    'return_foo': {
                        'outputs': [{
                            'result': {
                                'json': {
                                    'path': filename
                                }
                            }
                        }]
                    }
                }
            },
        )

        assert result.success
        for event in result.event_list:
            if event.event_type == DagsterEventType.STEP_MATERIALIZATION:
                event = event.event_specific_data.materialization
                assert len(event.metadata_entries) == 3
                assert event.metadata_entries[1] == EventMetadataEntry(
                    label='system-type-name',
                    description=None,
                    entry_data=TextMetadataEntryData(text='String'),
                )
                assert event.metadata_entries[2] == EventMetadataEntry(
                    label='system-type-description',
                    description=None,
                    entry_data=TextMetadataEntryData(text='Any'),
                )
Exemple #3
0
def event_metadata_entries(metadata_entry_datas):
    if not metadata_entry_datas:
        return

    for metadata_entry_data in metadata_entry_datas:
        typename = metadata_entry_data['__typename']
        label = metadata_entry_data['label']
        description = metadata_entry_data.get('description')
        if typename == 'EventPathMetadataEntry':
            yield EventMetadataEntry.path(label=label,
                                          description=description,
                                          path=metadata_entry_data['path'])
        elif typename == 'EventJsonMetadataEntry':
            yield EventMetadataEntry.json(
                label=label,
                description=description,
                data=seven.json.loads(metadata_entry_data.get(
                    'jsonString', '')),
            )
        elif typename == 'EventMarkdownMetadataEntry':
            yield EventMetadataEntry.md(label=label,
                                        description=description,
                                        md_str=metadata_entry_data.get(
                                            'md_str', ''))
        elif typename == 'EventTextMetadataEntry':
            yield EventMetadataEntry.text(label=label,
                                          description=description,
                                          text=metadata_entry_data['text'])
        elif typename == 'EventUrlMetadataEntry':
            yield EventMetadataEntry.url(label=label,
                                         description=description,
                                         url=metadata_entry_data['url'])
        elif typename == 'EventPythonArtifactMetadataEntry':
            yield EventMetadataEntry(
                label=label,
                description=description,
                entry_data=PythonArtifactMetadataEntryData(
                    metadata_entry_data['module'],
                    metadata_entry_data['name']),
            )
        else:
            check.not_implemented('TODO for type {}'.format(typename))
Exemple #4
0
def event_metadata_entries(metadata_entry_datas):
    if not metadata_entry_datas:
        return

    for metadata_entry_data in metadata_entry_datas:
        typename = metadata_entry_data["__typename"]
        label = metadata_entry_data["label"]
        description = metadata_entry_data.get("description")
        if typename == "EventPathMetadataEntry":
            yield EventMetadataEntry.path(label=label,
                                          description=description,
                                          path=metadata_entry_data["path"])
        elif typename == "EventJsonMetadataEntry":
            yield EventMetadataEntry.json(
                label=label,
                description=description,
                data=seven.json.loads(metadata_entry_data.get(
                    "jsonString", "")),
            )
        elif typename == "EventMarkdownMetadataEntry":
            yield EventMetadataEntry.md(label=label,
                                        description=description,
                                        md_str=metadata_entry_data.get(
                                            "md_str", ""))
        elif typename == "EventTextMetadataEntry":
            yield EventMetadataEntry.text(label=label,
                                          description=description,
                                          text=metadata_entry_data["text"])
        elif typename == "EventUrlMetadataEntry":
            yield EventMetadataEntry.url(label=label,
                                         description=description,
                                         url=metadata_entry_data["url"])
        elif typename == "EventPythonArtifactMetadataEntry":
            yield EventMetadataEntry(
                label=label,
                description=description,
                entry_data=PythonArtifactMetadataEntryData(
                    metadata_entry_data["module"],
                    metadata_entry_data["name"]),
            )
        else:
            check.not_implemented("TODO for type {}".format(typename))
Exemple #5
0
 def handle_output(self, context, obj):
     super().handle_output(context, obj)
     # can pretend this actually came from a library call
     yield EventMetadataEntry(label="num rows written to db",
                              description=None,
                              entry_data=EventMetadata.int(len(obj)))