Skip to content

Commit

Permalink
Fixes #27.
Browse files Browse the repository at this point in the history
Can now rename a Sim's universe definitions.
  • Loading branch information
dotsdl committed Jul 7, 2015
1 parent 8670d5a commit 022f187
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
26 changes: 26 additions & 0 deletions mdsynthesis/core/aggregators.py
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,32 @@ def remove(self, *handle):
if self.default() == item:
self._backend.update_default()

def rename(self, handle, newname):
"""Rename a universe definition.
:Arguments:
*handle*
name of universe to rename
*newname*
new name of universe
"""
try:
self._backend.rename_universe(handle, newname)
except KeyError:
raise KeyError(
"No such universe '{}';".format(handle) +
" nothing to rename.")
except ValueError:
raise ValueError(
"A universe '{}' already exists;".format(handle) +
" remove or rename it first.")

if self._container._uname == handle:
self._container._uname = newname

if self.default() == handle:
self._backend.update_default(newname)

def keys(self):
"""Get handles for all universe definitions as a list.
Expand Down
21 changes: 21 additions & 0 deletions mdsynthesis/core/persistence.py
Original file line number Diff line number Diff line change
Expand Up @@ -921,6 +921,27 @@ def del_universe(self, universe):
"No such universe '{}';".format(universe) +
" nothing to remove.")

@File._write_state
def rename_universe(self, universe, newname):
"""Rename a universe definition.
:Arguments:
*universe*
name of universe to rename
*newname*
new name of universe
"""
try:
self.handle.rename_node('/universes', newname, name=universe)
except tables.NoSuchNodeError:
raise KeyError(
"No such universe '{}';".format(universe) +
" nothing to rename.")
except tables.NodeError:
raise ValueError(
"A universe '{}' already exists;".format(universe) +
" remove or rename it first.")

@File._write_state
def update_resnums(self, universe, resnums):
"""Update resnum definition for the given universe.
Expand Down
19 changes: 19 additions & 0 deletions tests/test_containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,25 @@ def test_remove_universe(self, container):
with pytest.raises(KeyError):
container.universes.remove('ham')

def test_rename_universe(self, container):
"""Test universe renaming"""
container.universes.add('spam', GRO, XTC)
container.universes.add('eggs', GRO, XTC)

assert 'spam' in container.universes

container.universes.rename('spam', 'boots')

assert 'spam' not in container.universes
assert 'boots' in container.universes
assert 'eggs' in container.universes

with pytest.raises(KeyError):
container.universes.rename('ham', 'lark')

with pytest.raises(ValueError):
container.universes.rename('boots', 'eggs')

def test_set_default_universe(self, container):
"""Test that a default universe exists, and that it's settable"""
container.universes.add('lolcats', GRO, XTC)
Expand Down

0 comments on commit 022f187

Please sign in to comment.