Beispiel #1
0
ROM_data_layout = DataLayout('rom', 1)
ROM_data_layout.register_file('game.gba', GBAFormat)
plugin.register_type_to_data_layout(Game[GBA], 'rom', 1)


def ROM_data_layout_to_buffered_reader(data_dir):
    return open(os.path.join(data_dir, 'game.gba'), 'rb')


def buffered_reader_to_ROM_data_layout(view, data_dir):
    with open(os.path.join(data_dir, 'game.gba'), 'wb') as fh:
        fh.write(view.read())


plugin.register_data_layout(ROM_data_layout)

plugin.register_data_layout_reader('rom', 1, io.BufferedReader,
                                   ROM_data_layout_to_buffered_reader)

plugin.register_data_layout_writer('rom', 1, io.BufferedReader,
                                   buffered_reader_to_ROM_data_layout)


def play(output_dir : str, rom : io.BufferedReader) -> None:
    with open(os.path.join(output_dir, 'gameloader.js'), 'wb') as fh:
        fh.write(b"onDataLoad('" + base64.b64encode(rom.read()) + b"');")

    copytree(os.path.join(os.path.dirname(__file__), 'assets'),
             os.path.join(output_dir))
Beispiel #2
0
class TestPlugin(unittest.TestCase):
    def setUp(self):
        # TODO standardize temporary directories created by QIIME
        self.test_dir = tempfile.TemporaryDirectory(prefix='qiime2-temp-')

        self.markdown_fp = os.path.join(self.test_dir.name,
                                        'dummy_markdown_workflow.md')
        with open(self.markdown_fp, 'w') as markdown_fh:
            markdown_fh.write(markdown_template)

        self.plugin = Plugin(
            name='dummy-plugin',
            version='0.4.2',
            website='www.dummy-plugin-hub.com',
            package='dummy_plugin'
        )

    def tearDown(self):
        self.test_dir.cleanup()

    def test_constructor(self):
        self.assertEqual(self.plugin.name, 'dummy-plugin')
        self.assertEqual(self.plugin.version, '0.4.2')
        self.assertEqual(self.plugin.website, 'www.dummy-plugin-hub.com')
        self.assertEqual(self.plugin.package, 'dummy_plugin')
        self.assertEqual(self.plugin.workflows, {})
        self.assertEqual(self.plugin.data_layouts, {})

    def test_register_data_layout(self):
        self.assertEqual(self.plugin.data_layouts, {})

        def is_valid(data_dir):
            return True
        self.plugin.register_data_layout('my-format', '1.0.0', is_valid)
        exp_format = DataLayout('my-format', '1.0.0', is_valid)
        self.assertEqual(self.plugin.data_layouts,
                         {('my-format', '1.0.0'): exp_format})
        # TODO: test execution of data layout reader and writer

    def test_register_function(self):
        self.assertEqual(self.plugin.workflows, {})

        self.plugin.register_function(
            name='Dummy function',
            function=dummy_function,
            inputs={},
            parameters={},
            outputs=[('answer', TestType)],
            doc='Computes the answer to life, the universe, and everything'
        )

        self.plugin.register_function(
            name='Dummy function',
            function=other_dummy_function,
            inputs={},
            parameters={},
            outputs=[('answer', TestType)],
            doc='Computes the answer to life, the universe, and everything'
        )

        workflows = {
            'dummy_function':
                Workflow(
                    signature=Signature(
                        name='Dummy function',
                        inputs={},
                        parameters={},
                        outputs=collections.OrderedDict([('answer',
                                                         (TestType, list))])),
                    template=expected_dummy_function_template,
                    id_='dummy_function'
                ),
            'other_dummy_function':
                Workflow(
                    signature=Signature(
                        name='Dummy function',
                        inputs={},
                        parameters={},
                        outputs=collections.OrderedDict([('answer',
                                                         (TestType, list))])),
                    template=expected_other_dummy_function_template,
                    id_='other_dummy_function'
                )
        }

        self.assertEqual(self.plugin.workflows, workflows)

    def test_register_workflow(self):
        self.assertEqual(self.plugin.workflows, {})

        with unittest.mock.patch.object(pkg_resources, 'resource_filename',
                                        return_value=self.markdown_fp):
            self.plugin.register_workflow(self.markdown_fp)

        workflows = {
            'dummy_markdown_workflow':
                Workflow(
                    signature=Signature(
                        name='Dummy markdown workflow',
                        inputs={},
                        parameters={'param1': (Int, int),
                                    'param2': (Int, int)},
                        outputs=collections.OrderedDict([('the_sum',
                                                         (TestType, list))])),
                    template=frontmatter.parse(markdown_template)[1],
                    id_='dummy_markdown_workflow'
                )
        }

        self.assertEqual(self.plugin.workflows, workflows)

    def test_register_function_and_workflow(self):
        self.assertEqual(self.plugin.workflows, {})

        self.plugin.register_function(
            name='Dummy function',
            function=dummy_function,
            inputs={},
            parameters={},
            outputs=[('answer', TestType)],
            doc='Computes the answer to life, the universe, and everything'
        )

        with unittest.mock.patch.object(pkg_resources, 'resource_filename',
                                        return_value=self.markdown_fp):
            self.plugin.register_workflow(self.markdown_fp)

        workflows = {
            'dummy_function':
                Workflow(
                    signature=Signature(
                        name='Dummy function',
                        inputs={},
                        parameters={},
                        outputs=collections.OrderedDict([('answer',
                                                         (TestType, list))])),
                    template=expected_dummy_function_template,
                    id_='dummy_function'
                ),
            'dummy_markdown_workflow':
                Workflow(
                    signature=Signature(
                        name='Dummy markdown workflow',
                        inputs={},
                        parameters={'param1': (Int, int),
                                    'param2': (Int, int)},
                        outputs=collections.OrderedDict([('the_sum',
                                                         (TestType, list))])),
                    template=frontmatter.parse(markdown_template)[1],
                    id_='dummy_markdown_workflow'
                )
        }

        self.assertEqual(self.plugin.workflows, workflows)