NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

preferences.py (1902B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\brennivin\preferences.py
      2 import json
      3 import logging
      4 import os
      5 import sys
      6 import traceback
      7 logger = logging.getLogger(__name__)
      8 
      9 class Preferences(object):
     10 
     11     def __init__(self, filename, onloaderror = None):
     12         directory = os.path.dirname(filename)
     13         if not os.path.exists(directory):
     14             os.makedirs(directory)
     15         self.prefs = {}
     16         self.filename = filename
     17         self.onloaderror = onloaderror
     18         self.load()
     19 
     20     def loader(self, fp):
     21         return json.load(fp)
     22 
     23     def dumper(self, obj, fp):
     24         return json.dump(obj, fp)
     25 
     26     def openmode(self):
     27         return 'b'
     28 
     29     def get(self, region, variable, defaultValue):
     30         try:
     31             return self.prefs[region][variable]
     32         except KeyError:
     33             return defaultValue
     34 
     35     def set(self, region, variable, value):
     36         if region not in self.prefs:
     37             self.prefs[region] = {}
     38         self.prefs[region][variable] = value
     39         self.save()
     40 
     41     def setdefault(self, region, variable, defaultValue):
     42         sentinel = object()
     43         result = self.get(region, variable, sentinel)
     44         if result == sentinel:
     45             result = defaultValue
     46             self.set(region, variable, result)
     47         return result
     48 
     49     def save(self):
     50         with open(self.filename, 'w' + self.openmode()) as f:
     51             self.dumper(self.prefs, f)
     52 
     53     def load(self):
     54         try:
     55             if os.path.isfile(self.filename):
     56                 with open(self.filename, 'r' + self.openmode()) as f:
     57                     self.prefs = self.loader(f)
     58         except Exception:
     59             if self.onloaderror:
     60                 self.onloaderror(*sys.exc_info())
     61             else:
     62                 logger.error(traceback.format_exc())
     63 
     64         if not isinstance(self.prefs, dict):
     65             self.prefs = {}