def test_properties(self): one = os.path.join(__resources__, 'simple', 'one.txt') two = os.path.join(__resources__, 'simple', 'two', 'two.txt') three = os.path.join(__resources__, 'simple', 'three', 'four', 'four.txt') f1 = coda.File(one, metadata={'filetype': 'text', 'content': 'data'}) f2 = coda.File(two, metadata={ 'filetype': 'text', 'content': 'nothing' }) f3 = coda.File(three, metadata={ 'filetype': 'text', 'content': { 'some': 'data' } }) cl = f1 + f2 + f3 self.assertEqual(len(cl.files), 3) self.assertEqual(cl.files[0].path, one) self.assertEqual(cl.files[1].path, two) self.assertEqual(cl.files[2].path, three) self.assertEqual(cl.metadata.filetype, 'text') self.assertEqual(cl.filetype, 'text') self.assertEqual(cl.filelist, [one, two, three]) with self.assertRaises(AttributeError): self.assertEqual(cl.metadata.content, None) cl = coda.Collection(os.path.join(__resources__, 'simple', '*.txt')) self.assertEqual(len(cl.files), 1) return
def test_operators(self): one = os.path.join(__resources__, 'simple', 'one.txt') two = os.path.join(__resources__, 'simple', 'two', 'two.txt') three = os.path.join(__resources__, 'simple', 'three', 'three.txt') f1 = coda.File(one, metadata={'filetype': 'text', 'content': 'data'}) f2 = coda.File(two, metadata={ 'filetype': 'text', 'content': 'nothing' }) f3 = coda.File(three, metadata={ 'filetype': 'text', 'content': 'something' }) # contains self.assertTrue('one' in one) self.assertFalse('two' in one) # addition cl1 = f1 + f2 self.assertTrue(isinstance(cl1, coda.Collection)) self.assertTrue(f1 in cl1) self.assertTrue(f2 in cl1) cl2 = f3 + cl1 self.assertTrue(isinstance(cl2, coda.Collection)) self.assertTrue(f1 in cl2) self.assertTrue(f2 in cl2) self.assertTrue(f3 in cl2) # equality self.assertEqual(f1, coda.File(one)) return
def test_metadata(self): # test metadata setting one = os.path.join(__resources__, 'simple', 'one.txt') fi = coda.File(one, metadata={'one': 1}) self.assertEqual(fi.one, 1) fi.two = 2 self.assertEqual(fi.metadata.two, 2) # test implicit querying for files already in the database coda.add(fi) fi2 = coda.File(one) self.assertEqual(fi.one, 1) self.assertEqual(fi.metadata.one, 1) coda.delete(fi) return
def test_delete(self): path = os.path.realpath(__file__) fi = coda.File(path) coda.add(fi) self.call('delete', path) fi = coda.find_one({'path': path}) self.assertEqual(fi, None) return
def _(args): files = [] for fi in args.files: if os.path.isdir(fi): cl = coda.Collection(fi) files.extend(cl.files) else: files.append(coda.File(fi)) args.collection = coda.Collection(files=files) return func(args)
def test_exceptions(self): with self.assertRaises(TypeError): one = os.path.join(__resources__, 'simple', 'one.txt') f1 = coda.File(one, metadata={ 'filetype': 'text', 'content': 'data' }) c1 = f1 + 1 c1 = f1 + 'str' return
def test_properties(self, name, filepath, metadata): fi = coda.File(filepath, metadata=metadata) self.assertEqual(fi.path, filepath) self.assertEqual(fi.location, os.path.dirname(filepath)) self.assertEqual(fi.name, os.path.basename(filepath)) self.assertEqual(fi.extension, '.' + filepath.split('.')[-1]) for key in metadata: self.assertEqual(fi.metadata[key], metadata[key]) self.assertEqual(getattr(fi, key), metadata[key]) self.assertEqual(fi[key], metadata[key]) return
def test_operators(self): one = os.path.join(__resources__, 'simple', 'one.txt') two = os.path.join(__resources__, 'simple', 'two', 'two.txt') three = os.path.join(__resources__, 'simple', 'three', 'four', 'four.txt') f1 = coda.File(one, metadata={'filetype': 'text', 'content': 'data'}) f2 = coda.File(two, metadata={ 'filetype': 'text', 'content': 'nothing' }) f3 = coda.File(three, metadata={ 'filetype': 'text', 'content': { 'some': 'data' } }) # addition cl = f1 + f2 self.assertTrue(isinstance(cl, coda.Collection)) self.assertEqual(cl.files, [f1, f2]) cl2 = cl + f3 self.assertTrue(isinstance(cl2, coda.Collection)) self.assertEqual(cl2.files, [f1, f2, f3]) cl3 = f3 + cl self.assertTrue(isinstance(cl3, coda.Collection)) self.assertEqual(cl3.files, [f3, f1, f2]) self.assertEqual(cl + cl2, cl3) # subtraction self.assertEqual(cl, cl2 - f3) self.assertEqual(cl2 - cl, coda.Collection(files=[f3])) # equality self.assertNotEqual(f1, f2) self.assertEqual(f1, cl[0]) # contains self.assertTrue(f1 in cl) self.assertFalse(f3 in cl) # iteration self.assertEqual([i for i in cl], [i for i in cl.files]) return
def test_find(self): path = os.path.realpath(__file__) fi = coda.File(path=path, metadata={ 'cohort': 'testing', 'ext': 'py', 'type': 'source' }) coda.add(fi) res = self.call('find', 'cohort', 'testing') self.assertTrue('tests/test_coda.py' in res) coda.delete(fi) return
def test_add_metadata(self): one = os.path.join(__resources__, 'simple', 'one.txt') two = os.path.join(__resources__, 'simple', 'two', 'two.txt') three = os.path.join(__resources__, 'simple', 'three', 'four', 'four.txt') f1 = coda.File(one, metadata={'filetype': 'text', 'content': 'data'}) f2 = coda.File(two, metadata={ 'filetype': 'text', 'content': 'nothing' }) f3 = coda.File(three, metadata={ 'filetype': 'text', 'content': { 'some': 'data' } }) cl = f1 + f2 + f3 # adding via keyword arguments cl.add_metadata(newproperty='value') self.assertEqual(cl.metadata.newproperty, 'value') self.assertEqual(cl.newproperty, 'value') self.assertEqual(list(map(lambda x: x.newproperty, cl)), ['value'] * len(cl)) # adding via dictionary cl.add_metadata({'newerproperty': 'newervalue'}) self.assertEqual(cl.metadata.newerproperty, 'newervalue') self.assertEqual(cl.newerproperty, 'newervalue') self.assertEqual(list(map(lambda x: x.newerproperty, cl)), ['newervalue'] * len(cl)) # adding via setattr on class cl.newestproperty = 'newestvalue' self.assertEqual(cl.metadata.newestproperty, 'newestvalue') self.assertEqual(cl.newestproperty, 'newestvalue') self.assertEqual(list(map(lambda x: x.newestproperty, cl)), ['newestvalue'] * len(cl)) return
def test_list(self): path = os.path.realpath(__file__) fi = coda.File(path=path, metadata={ 'cohort': 'testing', 'ext': 'py', 'type': 'source' }) coda.add(fi) res = self.call('list') self.assertTrue('tests/test_coda.py' in res) res = self.call('list', path) self.assertTrue('"cohort": "testing"' in res) self.assertTrue('"ext": "py"' in res) self.assertTrue('"type": "source"' in res) coda.delete(fi) return
def test_add_delete(self, path): # add fi = coda.File(path=path, metadata={ 'cohort': 'testing', 'ext': 'py', 'type': 'source' }) coda.add(fi) cl = coda.find({'cohort': 'testing'}) self.assertEqual(len(cl), 1) self.assertEqual(cl[0].type, 'source') # update fi.metadata.type = 'newtype' fi.metadata.keep = True coda.add(fi) cl = coda.find({'cohort': 'testing'}) self.assertEqual(cl[0].type, 'newtype') self.assertEqual(cl[0].keep, True) # delete coda.delete(fi) cl = coda.find({'cohort': 'testing'}) self.assertEqual(cl, None) return
# config # ------ __tests__ = os.path.dirname(os.path.realpath(__file__)) __resources__ = os.path.join(__tests__, 'resources') # seed # ---- simple = filetree(os.path.join(__resources__, 'simple')) source = filetree(os.path.join(__tests__, '..', 'coda')) fl = [] for item in simple.filelist(): fl.append(coda.File(path=item, metadata={ 'cohort': 'simple', 'extension': item.split('.')[-1], 'type': 'text', 'base_name': os.path.basename(item), 'length': len(os.path.basename(item)) })) for item in source.prune(r".*.py$").filelist(): fl.append(coda.File(path=item, metadata={ 'cohort': 'coda', 'extension': item.split('.')[-1], 'type': 'source', 'base_name': os.path.basename(item), 'length': len(os.path.basename(item)) })) cl = coda.Collection(files=fl) # setup/teardown