def should_pickle_and_unpickle_dotdict(self): d = dotdict({'field':'foo', 'nested' : {'subfield': 'bar'}}) data = pickle.dumps(d) other = pickle.loads(data) self.assertEqual(d, other) self.assertTrue(type(other) is dotdict) self.assertTrue(type(other.nested) is dotdict)
def __getstate__(self): # pragma: no cover -- TODO data = dotdict() data._class = self.__class__.__name__ data.pos = self.pos data.inventory = self.inventory data.hp = self.hp data.wielding = self.inventory.index(self.wielding) if self.wielding else None data.wearing = self.inventory.index(self.wearing) if self.wearing else None return data
def __getstate__(self): # pragma: no cover -- TODO data = dotdict() data.level_id = self.level_id data.rooms = self.rooms data.tunnels = self.tunnels data.objects = self.objects data.map_items = [] for pos, item in self.items: data.map_items.append( [pos, item] ) data.monsters = self.monsters return data
class TestFSUtils(unittest.TestCase): def should_create_valid_filename(self): self.assertEqual( clckwrkbdgr.fs.make_valid_filename('name/with/slashes'), 'name_with_slashes') @mock.patch(pathlib.__name__ + '.Path.exists', side_effect=(True, True, True, False)) def should_create_unique_name(self, *mocks): self.assertEqual(clckwrkbdgr.fs.make_unique_filename('foo.bar'), Path('foo.2.bar')) @mock.patch('os.path.exists', side_effect=(False, False, True, True, False, True, True, True) ) @mock.patch('os.stat', side_effect=(dotdict(st_mtime=2), dotdict(st_mtime=2), dotdict(st_mtime=3), dotdict(st_mtime=3), dotdict(st_mtime=3))) def should_react_to_modified_files(self, *mocks): events = [] def action(): events.append('.') watcher = clckwrkbdgr.fs.FileWatcher('filename', action) self.assertEqual(events, []) self.assertFalse(watcher.check()) # Still does not exist. self.assertEqual(events, []) self.assertTrue(watcher.check()) # Was created. self.assertEqual(events, ['.']) self.assertFalse(watcher.check()) # Was not changed. self.assertEqual(events, ['.']) self.assertFalse(watcher.check()) # Was removed. self.assertEqual(events, ['.']) self.assertTrue(watcher.check()) # Was re-created. self.assertEqual(events, ['.', '.']) watcher = clckwrkbdgr.fs.FileWatcher('filename', action) self.assertFalse(watcher.check()) # Exists but not modified.
def read_config(): # pragma: no cover config_file = xdg.save_data_path('todo') / 'config.json' data = {} if config_file.exists(): data = json.loads(config_file.read_text()) tasklist = None tasklist_class_name = data.get('tasklist', None) if tasklist_class_name: parts = tasklist_class_name.split('.') module_names = [] for part in parts: if not module_names: module_names.append([part]) else: module_names.append(module_names[-1] + [part]) tasklist_module = None for module_name in reversed(module_names): try: tasklist_module = importlib.import_module( '.'.join(module_name)) break except Exception as e: pass if tasklist_module: module_name = '.'.join(module_name) assert tasklist_class_name.startswith(module_name) tasklist_class_name = tasklist_class_name[len(module_name) + 1:] try: tasklist = getattr(tasklist_module, tasklist_class_name) except Exception as e: print("Failed to find custom tasklist class '{0}.{1}': {2}". format(module_name, tasklist_class_name, e)) else: print("Failed to find module for tasklist class '{0}'".format( tasklist_class_name)) return dotdict( inbox_file=Path( os.path.expandvars( data.get('inbox_file', "~/.local/share/todo/.INBOX.md"))).expanduser(), editor=list(data.get('editor', [os.environ.get('EDITOR', 'vim')])), todo_dir=Path( os.path.expandvars(data.get('todo_dir', "~/.local/share/todo/"))).expanduser(), task_providers=list(data.get('task_providers', [])), tasklist=tasklist, )
def main(stdscr): curses.curs_set(0) with SerializedEntity(xdg.save_data_path('dotrogue') / 'rogue.sav', Version._top(), entity_name='dungeon', unlink=True, readable=True) as savefile: if savefile.entity: dungeon = savefile.entity dungeon.generator = RogueDungeonGenerator() dungeon.history.append(Event.WelcomeBack(dungeon.rogue)) else: dungeon = Dungeon(RogueDungeonGenerator(), Rogue) dungeon.go_to_level(0) dungeon.rogue.inventory.append(Dagger()) savefile.reset(dungeon) game = Game(stdscr) return_code = game.run(to_main_screen(dotdict(data=dungeon))) if return_code is False: savefile.reset()
def __getstate__(self): # pragma: no cover -- TODO data = dotdict() data.levels = self.levels data.current_level = self.current_level_id data.rogue = self.rogue return data
def __getstate__(self): # pragma: no cover -- TODO data = dotdict(super(Tunnel, self).__getstate__()) data.visited = list(self.visited) return data
def __getstate__(self): # pragma: no cover -- TODO data = dotdict(super(Room, self).__getstate__()) data.visited = self.visited return data
def should_access_dotdict_fields_via_dot(self): d = dotdict() d['field'] = 'foo' self.assertEqual(d.field, 'foo') self.assertEqual(d['field'], 'foo')
def should_convert_nested_dicts_to_dotdicts(self): d = dotdict({'field':'foo', 'nested' : {'subfield': 'bar'}}) self.assertEqual(d.field, 'foo') self.assertEqual(d.nested.subfield, 'bar')
def should_set_dotdict_fields_via_dot(self): d = dotdict({'field':'foo'}) d.field = 'foo' self.assertEqual(d.field, 'foo') self.assertEqual(d['field'], 'foo')
def should_create_dotdict_from_base_dict(self): d = dotdict({'field':'foo'}) self.assertEqual(d.field, 'foo') self.assertEqual(d['field'], 'foo')