def set_inhibitions(self, ieml, inhibitions): db = IEMLDatabase(folder=self.gitdb.folder, use_cache=self.use_cache, cache_folder=self.cache_folder) ieml = _check_ieml(ieml) assert db.get_dictionary().tables.root(ieml) == ieml inhibitions = _check_inhibitions(inhibitions) ds = db.get_structure() old_inhib = ds.get_values(ieml, 'inhibition') if set(old_inhib) == set(inhibitions): return to_remove = [e for e in old_inhib if e not in inhibitions] to_add = [e for e in inhibitions if e not in old_inhib] with self.gitdb.commit( self.signature, '[inhibitions] Update inhibitions for {} to {}'.format( str(ieml), json.dumps(inhibitions))): for e in to_add: db.add_structure(ieml, 'inhibition', e) for e in to_remove: db.remove_structure(ieml, 'inhibition', e)
def migrate(function, _s_old, _s_new): assert function(_s_old) == _s_new folder = '/tmp/migrate_script_iemldb' if os.path.isdir(folder): shutil.rmtree(folder) # os.mkdir(folder) git_address = "https://github.com/IEMLdev/ieml-language.git" credentials = pygit2.Keypair('ogrergo', '~/.ssh/id_rsa.pub', '~/.ssh/id_rsa', None) gitdb = GitInterface(origin=git_address, credentials=credentials, folder=folder) signature = pygit2.Signature("Louis van Beurden", "*****@*****.**") db = IEMLDatabase(folder=folder, use_cache=False) to_migrate = {} desc = db.get_descriptors() struct = db.get_structure() for s in db.get_dictionary().scripts: s2 = function(s) if s2 != s: to_migrate[s] = s2 print(to_migrate) with gitdb.commit( signature, "[Translate script] Translate paradigm from '{}' to '{}".format( str(_s_old), str(_s_new))): for s_old, s_new in to_migrate.items(): db.remove_structure(s_old) for (_, key), values in struct.get_values_partial(s_old).items(): for v in values: db.add_structure(s_new, key, v) db.remove_descriptor(s_old) for (_, lang, d), values in desc.get_values_partial(s_old).items(): for v in values: db.add_descriptor(s_new, lang, d, v)
def update_morpheme_paradigm( self, script_old: Script, script_new: Script, ): script_old = _check_script(script_old) script_new = _check_script(script_new) if script_old == script_new: return assert len(script_old) != 1 or len( script_new) != 1, "Can't update singular sequences, only paradigms" db = IEMLDatabase(folder=self.gitdb.folder, use_cache=self.use_cache, cache_folder=self.cache_folder) d = db.get_dictionary() desc = db.get_descriptors() ds = db.get_structure() assert script_old in d.scripts, "Source script not defined in dictionary" assert script_new not in d.scripts, "Target script already defined in dictionary" root_old = d.tables.root(script_old) is_root = ds.get_values(script_old, 'is_root') is_root = is_root and is_root[0][0].lower() == 't' root_new_cand = set() for ss in script_new.singular_sequences: try: root_new_cand.add(d.tables.root(ss)) except KeyError: if not is_root: raise ValueError( "A non root paradigm is defined over singular sequences that are in no paradigms" ) assert len( root_new_cand ) == 1, "No root paradigms or too many for script {}".format( str(script_new)) root_new = next(iter(root_new_cand)) message = "[dictionary] Update paradigm IEML from {} to {}"\ .format(str(script_old), str(script_new), " / ".join( "{}:{}".format(l, desc.get_values(script_new, l, 'translations')) for l in LANGUAGES)) if is_root: # 1st case: root paradigm assert script_old in script_new, "Can only update a root paradigm to a bigger version of it" # then we can update it to a bigger version of it old_structure = ds.get_values_partial(script_old) # transfers translations and structure with self.gitdb.commit(self.signature, message): if is_root: db.remove_structure(script_old) db.add_structure(script_old, 'is_root', 'False') for (_, key), values in old_structure.items(): for v in values: db.add_structure(script_new, key, v) else: db.remove_structure(script_old) db.add_structure(script_new, 'is_root', 'False') db.remove_descriptor(script_old) for (_, l, k), values in desc.get_values_partial(script_old).items(): for v in values: db.add_descriptor(script_new, l, k, v) if is_root: db.add_descriptor( script_old, l, k, '(translation migrated to {}) '.format( str(script_new)) + v)
credentials = pygit2.Keypair('git', '~/.ssh/id_rsa.pub', '~/.ssh/id_rsa', None) gitdb = GitInterface(origin=git_address, credentials=credentials, folder=folder) # gitdb.pull() signature = pygit2.Signature("Louis van Beurden", "*****@*****.**") db = IEMLDatabase(folder=folder, use_cache=False) desc = db.get_descriptors() struct = db.get_structure() to_migrate = {} to_remove = [] parser = IEMLParser(dictionary=db.get_dictionary()) all_db = db.list() # assert "[E:.b.E:B:.- E:S:. ()(a.T:.-) > ! E:.l.- ()(d.i.-l.i.-')]" in all_db for s in TO_REMOVE: to_pass = True try: _s = parser.parse(s) except CannotParse as e: print(str(e))