def init(home): """Convert a directory into a Dflat directory.""" contents = [x for x in os.listdir(home) if x != 'lock.txt'] info = open(j(home, 'dflat-info.txt'), 'w') namaste.dirtype(home, 'dflat_%s' % DFLAT_VERSION, verbose=False) info.write(_anvl('Object-scheme', 'Dflat/%s' % DFLAT_VERSION)) info.write(_anvl('Manifest-scheme', 'Checkm/0.1')) info.write(_anvl('Full-scheme', 'Dnatural/%s' % DNATURAL_VERSION)) info.write(_anvl('Delta-scheme', 'ReDD/%s' % REDD_VERSION)) info.write(_anvl('Current-scheme', 'file')) info.write(_anvl('Class-scheme', 'CLOP/0.3')) info.close() os.mkdir(j(home, 'log')) version = _new_version(home) _set_current(home, version) # move original inhabitants into their new apartment for filename in contents: os.rename(j(home, filename), j(home, version, 'full', 'producer', filename)) _update_manifest(j(home, version)) # can't use decorator since the log directory doesn't exist when # init is called log_file = j(home, 'log', 'dflat.log') _configure_logger(log_file) logging.info("initialized dflat: %s", home)
def test_type(self): self.assertFalse(os.path.isfile(os.path.join(TESTDIR, '0=bagit_0.1'))) namaste.dirtype(TESTDIR, 'bagit_0.1') self.assertTrue(os.path.isfile(os.path.join(TESTDIR, '0=bagit_0.1'))) f = open(os.path.join(TESTDIR, '0=bagit_0.1')) self.assertEqual(f.read(), "bagit_0.1\n") f.close()
def _new_version(home): """Create base directories for a new full version of the Dflat.""" version = _next_version(home) os.mkdir(j(home, version)) os.mkdir(j(home, version, 'full')) namaste.dirtype(j(home, version, 'full'), 'dnatural_%s' % DNATURAL_VERSION, verbose=False) os.mkdir(j(home, version, 'full', 'producer')) open(j(home, version, 'manifest.txt'), 'w').close() return version
def commit(home): #, msg=None): """Commit a modified version to the Dflat.""" current_version = _current_version(home) modified_version = _latest_version(home) if current_version == modified_version: _print("nothing to commit") return _update_manifest(j(home, modified_version)) delta = _delta(home, current_version, modified_version) if not _has_changes(delta): _print("no changes") return redd_home = j(home, current_version, 'delta') os.mkdir(redd_home) namaste.dirtype(redd_home, 'redd_%s' % REDD_VERSION, verbose=False) changed = False if len(delta['deleted']) > 0: changed = True os.mkdir(j(redd_home, 'add')) for filename in delta['deleted']: os.renames(j(home, current_version, 'full', filename), j(redd_home, 'add', filename)) if len(delta['added']) > 0: changed = True delete = open(j(redd_home, 'delete.txt'), 'w') for filename in delta['added']: delete.write("%s\n" % quote(filename)) delete.close() if len(delta['modified']) > 0: changed = True if not os.path.isdir(j(redd_home, 'add')): os.mkdir(j(redd_home, 'add')) delete = open(j(redd_home, 'delete.txt'), 'a') for filename in delta['modified']: delete.write("%s\n" % quote(filename)) os.renames(j(home, current_version, 'full', filename), j(redd_home, 'add', filename)) delete.close() shutil.rmtree(j(home, current_version, 'full')) _set_current(home, modified_version) if changed: _update_manifest(j(home, current_version), is_delta=True) logging.info('committed %s %s', modified_version, delta) _print("committed %s" % modified_version) return delta
def commit(home, msg=None): v1 = _current_version(home) v2 = _latest_version(home) if v1 == v2: _print("nothing to commit") return _update_manifest(j(home, v2)) delta = _delta(home, v1, v2) if not _has_changes(delta): _print("no changes") return redd_home = j(home, v1, 'delta') os.mkdir(redd_home) namaste.dirtype(redd_home, 'redd_%s' % redd_version, verbose=False) changed = False if len(delta['deleted']) > 0: changed = True os.mkdir(j(redd_home, 'add')) for filename in delta['deleted']: os.renames(j(home, v1, 'full', filename), j(redd_home, 'add', filename)) if len(delta['added']) > 0: changed = True delete = open(j(redd_home, 'delete.txt'), 'w') for filename in delta['added']: delete.write("%s\n" % urllib.quote(filename)) delete.close() if len(delta['modified']) > 0: changed = True if not os.path.isdir(j(redd_home, 'add')): os.mkdir(j(redd_home, 'add')) delete = open(j(redd_home, 'delete.txt'), 'a') for filename in delta['modified']: delete.write("%s\n" % urllib.quote(filename)) os.renames(j(home, v1, 'full', filename), j(redd_home, 'add', filename)) delete.close() shutil.rmtree(j(home, v1, 'full')) _set_current(home, v2) if changed: _update_manifest(j(home, v1), is_delta=True) logging.info('committed %s %s' % (v2, delta)) _print("committed %s" % v2) return delta
def _new_version(home): v = _next_version(home) os.mkdir(j(home, v)) os.mkdir(j(home, v, 'full')) namaste.dirtype(j(home, v, 'full'), 'dnatural_%s' % dnatural_version, verbose=False) os.mkdir(j(home, v, 'full', 'admin')) os.mkdir(j(home, v, 'full', 'annotation')) os.mkdir(j(home, v, 'full', 'data')) os.mkdir(j(home, v, 'full', 'enrichment')) os.mkdir(j(home, v, 'full', 'log')) os.mkdir(j(home, v, 'full', 'metadata')) open(j(home, v, 'manifest.txt'), 'w') open(j(home, v, 'full', 'relationships.ttl'), 'w') return v
def test_get(self): namaste.dirtype(TESTDIR, 'bagit_0.1') namaste.who(TESTDIR, "Twain,M.") namaste.what(TESTDIR, "Hamlet") namaste.when(TESTDIR, "2005") namaste.where(TESTDIR, "Seattle") tags = namaste.get(TESTDIR) tags.sort() self.assertEqual(tags, [ os.path.join(TESTDIR, namaste._make_namaste(0, 'bagit_0.1')), os.path.join(TESTDIR, namaste._make_namaste(1, 'Twain,M.')), os.path.join(TESTDIR, namaste._make_namaste(2, 'Hamlet')), os.path.join(TESTDIR, namaste._make_namaste(3, '2005')), os.path.join(TESTDIR, namaste._make_namaste(4, 'Seattle')), ])
def init(home): contents = filter(lambda x: x != 'lock.txt', os.listdir(home)) info = open(j(home, 'dflat-info.txt'), 'w') namaste.dirtype(home, 'dflat_%s' % dflat_version, verbose=False) info.write(_anvl('Object-scheme', 'Dflat/%s' % dflat_version)) info.write(_anvl('Manifest-scheme', 'Checkm/0.1')) info.write(_anvl('Full-scheme', 'Dnatural/0.12')) info.write(_anvl('Delta-scheme', 'ReDD/0.1')) info.write(_anvl('Current-scheme', 'file')) info.write(_anvl('Class-scheme', 'CLOP/0.3')) info.close() os.mkdir(j(home, 'log')) version = _new_version(home) _set_current(home, version) # move original inhabitants into their new apartment for f in contents: os.rename(j(home, f), j(home, version, 'full', 'data', f)) _update_manifest(j(home, version)) # can't use decorator since the log directory doesn't exist when # init is called log_file = j(home, 'log', 'dflat.log') _configure_logger(log_file) logging.info("initialized dflat: %s" % home)
def test_gettypes(self): namaste.dirtype(TESTDIR, "bagit_2323.1") namaste.dirtype(TESTDIR, "redd_0.1333") namaste.dirtype(TESTDIR, "dflat_34.22") types = namaste.get_types(TESTDIR) self.assertTrue("bagit" in types) self.assertTrue("redd" in types) self.assertTrue("dflat" in types) self.assertEqual(types["bagit"], {"name": "bagit", "major": "2323", "minor": "1"}) self.assertEqual(types["redd"], {"name": "redd", "major": "0", "minor": "1333"}) self.assertEqual(types["dflat"], {"name": "dflat", "major": "34", "minor": "22"})
def test_gettypes(self): namaste.dirtype(TESTDIR, 'bagit_2323.1') namaste.dirtype(TESTDIR, 'redd_0.1333') namaste.dirtype(TESTDIR, 'dflat_34.22') types = namaste.get_types(TESTDIR) self.assertTrue('bagit' in types) self.assertTrue('redd' in types) self.assertTrue('dflat' in types) self.assertEqual(types['bagit'], {'name':'bagit', 'major':'2323', 'minor':'1'}) self.assertEqual(types['redd'], {'name':'redd', 'major':'0', 'minor':'1333'}) self.assertEqual(types['dflat'], {'name':'dflat', 'major':'34', 'minor':'22'})
def test_gettypes(self): namaste.dirtype(TESTDIR, 'bagit_2323.1') namaste.dirtype(TESTDIR, 'redd_0.1333') namaste.dirtype(TESTDIR, 'dflat_34.22') types = namaste.get_types(TESTDIR) self.assertTrue('bagit' in types) self.assertTrue('redd' in types) self.assertTrue('dflat' in types) self.assertEqual(types['bagit'], { 'name': 'bagit', 'major': '2323', 'minor': '1' }) self.assertEqual(types['redd'], { 'name': 'redd', 'major': '0', 'minor': '1333' }) self.assertEqual(types['dflat'], { 'name': 'dflat', 'major': '34', 'minor': '22' })
def test_type(self): self.assertFalse(os.path.isfile(os.path.join(TESTDIR, "0=bagit_0.1"))) namaste.dirtype(TESTDIR, "bagit_0.1") self.assertTrue(os.path.isfile(os.path.join(TESTDIR, "0=bagit_0.1"))) self.assertEqual(open(os.path.join(TESTDIR, "0=bagit_0.1")).read(), "bagit_0.1\n")