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))
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))
def test_query_schema_is_updated_when_tags_are_added(self): # Given p = Project(name='test', path=self.root) p.scan() # When p.add_tags([TagInfo(name='new_tag', type='int')]) # Then schema = p._query_parser.schema items = schema.items() self.assertIn(('new_tag', INT), items) # When p.add_tags([TagInfo(name='tag1', type='text')]) # Then schema = p._query_parser.schema items = schema.items() self.assertIn(('tag1', TEXT()), items)
def test_import_csv_works(self): # Given p = Project(name='test', path=self.root) p.add_tags([TagInfo(name='fox', type='int')]) p.scan() data = dedent(u"""\ path,fox,junk %s,2,hello %s,1,bye """ % (join(self.root, 'root.txt'), join(self.root, 'hello.py'))) csv = self._write_csv(data) # Get one of the paths to see if cached media are handled correctly. self.assertEqual(p.get('root.txt').tags['fox'], 0) # When success, err = p.import_csv(csv) # Then self.assertTrue(success) self.assertEqual(p.get('root.txt').tags['fox'], 2) self.assertEqual(p.get('hello.py').tags['fox'], 1)
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)