| Index: cms/sources.py |
| =================================================================== |
| --- a/cms/sources.py |
| +++ b/cms/sources.py |
| @@ -15,7 +15,7 @@ |
| # You should have received a copy of the GNU General Public License |
| # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| -import codecs |
| +import io |
| import collections |
| import ConfigParser |
| import json |
| @@ -63,20 +63,17 @@ |
| return locale, urlparse.urlunparse(parsed[0:2] + (path,) + parsed[3:]) |
| def read_config(self): |
| - configdata = self.read_file("settings.ini") |
| + configdata = self.read_file("settings.ini")[0] |
| config = ConfigParser.SafeConfigParser() |
| config.readfp(StringIO(configdata)) |
| return config |
| - def import_symbol(self, filename, symbol): |
| - code = self.read_file(filename) |
| + def exec_file(self, filename): |
| + source, filename = self.read_file(filename) |
| + code = compile(source, filename, "exec") |
| namespace = {} |
| exec code in namespace |
| - |
| - try: |
| - return namespace[symbol] |
| - except KeyError: |
| - raise Exception("Expected symbol %s not found in %s" % (symbol, filename)) |
| + return namespace |
| # |
| # Page helpers |
| @@ -124,7 +121,7 @@ |
| return self.has_file(self.localizable_file_filename(locale, filename)) |
| def read_localizable_file(self, locale, filename): |
| - return self.read_file(self.localizable_file_filename(locale, filename), binary=True) |
| + return self.read_file(self.localizable_file_filename(locale, filename), binary=True)[0] |
| # |
| # Static file helpers |
| @@ -141,7 +138,7 @@ |
| return self.has_file(self.static_filename(filename)) |
| def read_static(self, filename): |
| - return self.read_file(self.static_filename(filename), binary=True) |
| + return self.read_file(self.static_filename(filename), binary=True)[0] |
| # |
| # Locale helpers |
| @@ -174,7 +171,7 @@ |
| result.update(self.read_locale(default_locale, page)) |
| if self.has_locale(locale, page): |
| - filedata = self.read_file(self.locale_filename(locale, page)) |
| + filedata = self.read_file(self.locale_filename(locale, page))[0] |
| localedata = json.loads(filedata) |
| for key, value in localedata.iteritems(): |
| result[key] = value["message"] |
| @@ -236,10 +233,10 @@ |
| return True |
| def read_file(self, filename, binary=False): |
| - result = self._archive.read("./%s" % filename) |
| + data = self._archive.read("./%s" % filename) |
| if not binary: |
| - result = result.decode("utf-8") |
| - return result |
| + data = data.decode("utf-8") |
| + return (data, "%s!%s" % (self._name, filename)) |
| def list_files(self, subdir): |
| prefix = "./%s/" % subdir |
| @@ -271,9 +268,15 @@ |
| return os.path.isfile(self.get_path(filename)) |
| def read_file(self, filename, binary=False): |
| - encoding = None if binary else "utf-8" |
| - with codecs.open(self.get_path(filename), "rb", encoding=encoding) as handle: |
| - return handle.read() |
| + path = self.get_path(filename) |
| + |
| + if binary: |
| + file = open(path, "rb") |
| + else: |
| + file = io.open(path, "r", encoding="utf-8") |
| + |
| + with file: |
| + return (file.read(), path) |
| def list_files(self, subdir): |
| result = [] |