コード例 #1
0
    def test_tagger_factory_tags_known_tags(self):
        # Given.
        code = 'import sys; print("args:"+sys.argv[1]'\
               '+"\nlength:10\ncompleted:yes\n")'
        command = "python -c %r" % code

        factory = TaggerFactory(command=command)
        p = Project(name='test', path=self.root)
        p.add_tags([
            TagInfo(name='args', type='string'),
            TagInfo(name='length', type='int')
        ])
        p.scan()

        # When
        jobs = factory.make_jobs(p.keys(), p)
        for job in jobs:
            job.run()
            job.thread.join()

        # Then.
        self.assertEqual(len(jobs), 5)
        for job in jobs:
            self.assertEqual(job.status, 'success')
        for key in p.keys():
            media = p.get(key)
            self.assertEqual(media.tags['completed'], True)
            expect = "%s" % (media.path)
            self.assertEqual(media.tags['args'], expect)
            self.assertEqual(media.tags['length'], 10)

        # When
        jobs = factory.make_jobs(p.keys(), p)

        # Then
        self.assertEqual(len(jobs), 0)

        # When.
        data = dump(factory)
        f1 = load(data)

        # Then.

        # The _tag_types should not be dumped.
        self.assertEqual(f1._tag_types, None)
        self.assertNotIn('_tag_types', data[1])
        f = factory
        for attr in ['command', '_done']:
            self.assertEqual(getattr(f1, attr), getattr(f, attr))
コード例 #2
0
    def test_update_tags_handles_type_changes_for_existing_tag(self):
        # Given
        tags = [
            TagInfo(name='completed', type='bool'),
            TagInfo(name='foo', type='string')
        ]

        p = Project(name='test', path=self.root, tags=tags)
        p.scan()
        key = 'root.txt'
        m = p.get(key)
        m.tags['completed'] = True
        m.tags['foo'] = 'hello world'

        # When
        new_tags = [
            TagInfo(name='foo', type='int'),
            TagInfo(name='completed', type='bool')
        ]
        p.update_tags(new_tags)

        # Then
        self.assertEqual(p.tags, new_tags)
        self.assertEqual(m.tags['completed'], True)
        self.assertEqual(m.tags['foo'], 0)
        for key in p.keys():
            m = p.get(key)
            self.assertEqual(type(m.tags['completed']), bool)
            self.assertEqual(m.tags['foo'], 0)
コード例 #3
0
    def test_python_function_factory(self):
        # Given.
        from textwrap import dedent
        code = dedent("""
        def process(relpath, media, dest):
            media.tags['completed'] = True
            media.tags['args'] = "%s %s"%(relpath, dest)
        """)
        factory = PythonFunctionFactory(code=code, dest=self.root1)
        p = Project(name='test', path=self.root)
        p.add_tags([TagInfo(name='args', type='string')])
        p.scan()

        # When
        jobs = factory.make_jobs(p.keys(), p)
        for job in jobs:
            job.run()
            job.thread.join()

        # Then.
        self.assertEqual(len(jobs), 5)
        for key in p.keys():
            media = p.get(key)
            self.assertEqual(media.tags['completed'], True)
            expect = "%s %s" % (key, self.root1)
            self.assertEqual(media.tags['args'], expect)

        # When
        jobs = factory.make_jobs(p.keys(), p)

        # Then
        self.assertEqual(len(jobs), 0)

        # When.
        data = dump(factory)
        f1 = load(data)

        # Then.

        # The func should not be dumped.
        self.assertEqual(f1._func, None)
        self.assertNotIn('_func', data[1])
        f = factory
        for attr in ['code', '_done']:
            self.assertEqual(getattr(f1, attr), getattr(f, attr))
コード例 #4
0
    def test_setting_root_extensions_limits_files(self):
        # Given
        p = Project(name='test', path=self.root, extensions=['.py'])

        # When
        p.scan()

        # Then
        self.assertEqual(p.number_of_files, 1)
        self.assertEqual(list(p.keys())[0], 'hello.py')
コード例 #5
0
    def test_command_factory_jobs(self):
        # Given.
        import sys
        command = """\
        %r -c 'import shutil;shutil.copy("$input", "$output")'\
        """ % sys.executable
        cf = CommandFactory(dest=self.root1,
                            input_extension='.py',
                            output_extension='.rst',
                            command=command,
                            copy_timestamps=True)
        p = Project(name='test', path=self.root)
        p.scan()

        # When
        jobs = cf.make_jobs(p.keys(), p)
        job = jobs[0]
        job.run()
        job.thread.join()

        # Then.
        self.assertEqual(len(jobs), 1)
        self.assertEqual(job.status, 'success')

        m = p.get('hello.py')
        dest = os.path.join(self.root1, 'hello.rst')
        self.assertTrue(os.path.exists(dest))
        self.assertEqual(cf._done[dest], True)
        s_stat = os.stat(m.path)
        d_stat = os.stat(dest)
        self.assertTrue(abs(s_stat.st_mtime - d_stat.st_mtime) < 2)
        self.assertTrue(abs(s_stat.st_ctime - d_stat.st_ctime) < 2)

        jobs = cf.make_jobs(p.keys(), p)
        self.assertEqual(len(jobs), 0)

        # When.
        data = dump(cf)
        cf1 = load(data)

        # Then.
        for attr in cf.__dict__.keys():
            self.assertEqual(getattr(cf1, attr), getattr(cf, attr))
コード例 #6
0
    def test_tagger_factory_skips_unknown_tags(self):
        # Given.
        code = 'import sys; print("\nlength:10\nxxx:yes\n")'
        command = "python -c %r" % code

        factory = TaggerFactory(command=command)
        p = Project(name='test', path=self.root)
        p.scan()

        # When
        jobs = factory.make_jobs(p.keys(), p)
        for job in jobs:
            job.run()
            job.thread.join()

        # Then.
        self.assertEqual(len(jobs), 5)
        for key in p.keys():
            media = p.get(key)
            self.assertTrue('length' not in media.tags)
            self.assertTrue('xxx' not in media.tags)
            self.assertEqual(media.tags['completed'], False)
コード例 #7
0
    def test_tagger_factory_tags_known_tags(self):
        # Given.
        code = 'import sys; print("args:"+sys.argv[1]'\
               '+"\nlength:10\ncompleted:yes\n")'
        command = "python -c %r" % code

        factory = TaggerFactory(command=command)
        p = Project(name='test', path=self.root)
        p.add_tags(
            [
                TagInfo(name='args', type='string'),
                TagInfo(name='length', type='int')
            ]
        )
        p.scan()

        # When
        jobs = factory.make_jobs(p.keys(), p)
        for job in jobs:
            job.run()
            job.thread.join()

        # Then.
        self.assertEqual(len(jobs), 5)
        for job in jobs:
            self.assertEqual(job.status, 'success')
        for key in p.keys():
            media = p.get(key)
            self.assertEqual(media.tags['completed'], True)
            expect = "%s" % (media.path)
            self.assertEqual(media.tags['args'], expect)
            self.assertEqual(media.tags['length'], 10)

        # When
        jobs = factory.make_jobs(p.keys(), p)

        # Then
        self.assertEqual(len(jobs), 0)
コード例 #8
0
    def test_command_factory_ignores_non_existing_paths(self):
        # Given.
        cf = CommandFactory(dest=self.root1, input_extension='.py',
                            output_extension='.rst',
                            command="echo $input $output")
        p = Project(name='test', path=self.root)
        p.scan()
        os.remove(os.path.join(self.root, 'hello.py'))

        # When
        jobs = cf.make_jobs(p.keys(), p)

        # Then.
        self.assertEqual(len(jobs), 0)
コード例 #9
0
    def test_update_tags_updates_existing_media(self):
        # Given
        p = Project(name='test', path=self.root)
        p.scan()
        # When
        new_tags = [TagInfo(name='foo', type='string')]
        p.update_tags(new_tags)

        # Then
        self.assertEqual(p.tags, new_tags)
        for key in p.keys():
            m = p.get(key)
            self.assertEqual(m.tags['foo'], '')
            self.assertTrue('completed' not in m.tags)
コード例 #10
0
    def test_command_factory_commands(self):
        # Given.
        cf = CommandFactory(dest=self.root1, input_extension='.py',
                            output_extension='.rst',
                            command="echo $input $output")
        p = Project(name='test', path=self.root)
        p.scan()

        # When
        jobs = cf.make_jobs(p.keys(), p)

        # Then.
        self.assertEqual(len(jobs), 1)
        job = jobs[0]
        m = p.get('hello.py')
        dest = os.path.join(self.root1, 'hello.rst')
        expect = ('echo %s %s' % (m.path, dest)).replace('\\', '\\\\')
        self.assertEqual(job.args, [expect.split(), m.path, dest])