Advertisement
quixadhal

again man

Aug 18th, 2014
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Item:
  2.     # stuff....
  3.  
  4.     def save(self, is_equipped: bool=False, in_inventory: bool=False, player_name: str=None):
  5.         if not self.instance_id:
  6.             raise ValueError('An instance_id is required to save an instance of an Item!')
  7.  
  8.         if player_name is None:
  9.             os.makedirs(settings.INSTANCE_DIR, 0o755, True)
  10.             filename = os.path.join(settings.INSTANCE_DIR, '%d.json' % self.instance_id)
  11.         else:
  12.             pathname = os.path.join(settings.PLAYER_DIR, player_name[0].capitalize())
  13.             os.makedirs(pathname, 0o755, True)
  14.             filename = os.path.join(pathname, '%s.json' % player_name.capitalize(), '%d.json' % instance_id)
  15.  
  16.         js = self.to_json(outer_encoder=instance.to_json)
  17.         with open(filename, 'w') as fp:
  18.             fp.write(js)
  19.  
  20.         if self.inventory:
  21.             for k in self.inventory:
  22.                 k.save(is_equipped, in_inventory, player_name)
  23.  
  24.  
  25.     @classmethod
  26.     def load(cls, instance_id: int=None, vnum: int=None, player_name: str=None):
  27.         if vnum:
  28.             raise TypeError('Template loading is not yet supported!')
  29.  
  30.         if not instance_id:
  31.             raise ValueError('An instance_id is required to load an instance of an Item!')
  32.  
  33.         if player_name is None:
  34.             filename = os.path.join(settings.INSTANCE_DIR, '%d.json' % self.instance_id)
  35.         else:
  36.             pathname = os.path.join(settings.PLAYER_DIR, player_name[0].capitalize())
  37.             target_filename = '%d.json' % instance_id
  38.             for a_path,_,file_list in os.walk(pathname):
  39.                 if target_filename in file_list:
  40.                     filename = os.path.join(a_path, target_filename)
  41.                     break
  42.  
  43.         with open(filename) as fp:
  44.             js = fp.read()
  45.         obj = Item.from_json(js, outer_encoder=instance.from_json)
  46.     obj.load_inventory(player_name)
  47.         return obj
  48.  
  49.     def load_inventory(self, player_name: str=None):
  50.         obj_list = []
  51.         for instance_id in self.inventory:
  52.             obj = Item.load(instance_id=instance_id, player_name=player_name)
  53.             if not isinstance(obj, 'Item'):
  54.                 raise TypeError('Could not load instance %r!' % instance_id)
  55.  
  56.             obj.load_inventory(player_name)
  57.             obj_list += obj
  58.         return obj_list
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement