Skip to content

Commit 1229186

Browse files
committed
<Enhancement>[Theme Loader]: Use a modern method
Make themes load in py2app packaged application [#67]
1 parent d39c477 commit 1229186

File tree

2 files changed

+30
-26
lines changed

2 files changed

+30
-26
lines changed

albow/themes/ThemeLoader.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,49 @@
11

2+
from logging import Logger
3+
from logging import getLogger
24

3-
import logging
5+
from os import sep as osSep
46

5-
import configparser
67
from configparser import ConfigParser
8+
from configparser import SectionProxy
79

810
from ast import literal_eval as make_tuple
911

10-
from pkg_resources import resource_filename
11-
1212
from albow.themes.Theme import Theme
1313

1414

1515
class ThemeLoader:
1616

17-
DEFAULT_PKG = "albow.themes.resources"
18-
DEFAULT_THEME_FILENAME = "default-theme.ini"
19-
ROOT_THEME_NAME = "root"
17+
DEFAULT_THEME_FILENAME: str = "default-theme.ini"
2018

21-
def __init__(self, themePkg: str = DEFAULT_PKG, themeFilename: str = DEFAULT_THEME_FILENAME):
22-
"""
19+
DEFAULT_PKG: str = "resources"
20+
ROOT_THEME_NAME: str = "root"
2321

22+
def __init__(self, themePkg: str = DEFAULT_PKG, themeFilename: str = DEFAULT_THEME_FILENAME):
23+
"""
2424
"""
25-
self.logger = logging.getLogger(__name__)
25+
self.logger: Logger = getLogger(__name__)
26+
27+
self.themePkg: str = themePkg
28+
self.themeFilename: str = themeFilename
2629

27-
self.themePkg = themePkg
28-
self.themeFilename = themeFilename
29-
self.themeFullFilename = self.findThemeFile()
3030
self.topLevelClassThemes = []
3131
self.themeRoot = None
3232

3333
def load(self):
3434

35-
config = configparser.ConfigParser()
36-
config.read(self.themeFullFilename)
35+
config = ConfigParser()
3736

38-
self.themeRoot = self.loadAClass(config[ThemeLoader.ROOT_THEME_NAME])
37+
import pkgutil
38+
39+
bThemeData = pkgutil.get_data(__name__, f"{self.themePkg}{osSep}{self.themeFilename}")
40+
themeData = bThemeData.decode('ascii')
3941

40-
self.logger.debug(f"Initial themeRoot: {self.themeRoot}")
42+
self.logger.debug(f"{themeData=}")
43+
44+
config.read_string(themeData)
45+
46+
self.themeRoot = self.loadAClass(config[ThemeLoader.ROOT_THEME_NAME])
4147

4248
self.extractThemeInstances(config)
4349
self.augmentInstancesWithBase()
@@ -56,13 +62,7 @@ def augmentInstancesWithBase(self):
5662
setattr(embeddedTheme, "base", baseTheme)
5763
self.logger.debug(f"Theme {embeddedTheme} has new base {baseTheme}")
5864

59-
def findThemeFile(self):
60-
61-
fileName = resource_filename(self.themePkg, self.themeFilename)
62-
63-
return fileName
64-
65-
def loadAClass(self, classDict: dict) -> Theme:
65+
def loadAClass(self, classDict: SectionProxy) -> Theme:
6666

6767
themeName = classDict["name"]
6868

setup.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@
88
# The text of the README file
99
README = (HERE / "README.md").read_text()
1010

11+
DATA_FILES = [('albow/themes/resources', ['albow/themes/resources/default-theme.ini']),
12+
('albow/themes/resources', ['albow/themes/resources/Vera.ttf']),
13+
('albow/themes/resources', ['albow/themes/resources/VeraBd.ttf']),
14+
]
1115
setup(
1216
name="python3-albow",
13-
version="2.87",
17+
version="2.89",
1418
author='Humberto A. Sanchez II',
1519
author_email='[email protected]',
1620
description="A Little Bit of Widgetry for PyGame",
1721
long_description=README,
1822
long_description_content_type="text/markdown",
19-
url="https://hasii2011.github.io",
23+
url="https://github.com/hasii2011/albow-python-3",
2024
packages=find_packages(),
2125
include_package_data=True,
2226
install_requires=['pygame', 'PyOpenGL', 'PyOpenGL-accelerate']

0 commit comments

Comments
 (0)