fix: do not chdir when looking for files

Allow relative paths for palettes and themes.

Refs: #114
Co-authored-by: FedericoStra
This commit is contained in:
Johann Dreo 2023-06-28 21:00:08 +02:00
commit 1c07ace0e2

View file

@ -249,13 +249,13 @@ def hex_to_rgb(h):
def load_themes( themes_dir): def load_themes( themes_dir):
global context global context
logging.debug("search for themes in: %s" % themes_dir) logging.debug("search for themes in: %s" % themes_dir)
os.chdir( themes_dir )
sys.path.append( themes_dir ) sys.path.append( themes_dir )
# load available themes # load available themes
for f in glob.iglob("colout_*.py"): for f in glob.iglob(os.path.join(themes_dir, "colout_*.py")):
module = ".".join(f.split(".")[:-1]) # remove extension basename = os.path.basename(f) # Remove path.
name = "_".join(module.split("_")[1:]) # remove the prefix module = os.path.splitext(basename)[0] # Remove extension.
name = "_".join(module.split("_")[1:]) # Remove the 'colout_' prefix.
if name in context["themes"]: if name in context["themes"]:
raise DuplicatedTheme(name) raise DuplicatedTheme(name)
logging.debug("load theme %s" % name) logging.debug("load theme %s" % name)
@ -265,10 +265,9 @@ def load_themes( themes_dir):
def load_palettes( palettes_dir, ignore_duplicates = True ): def load_palettes( palettes_dir, ignore_duplicates = True ):
global context global context
logging.debug("search for palettes in: %s" % palettes_dir) logging.debug("search for palettes in: %s" % palettes_dir)
os.chdir( palettes_dir )
# load available colormaps (GIMP palettes format) # load available colormaps (GIMP palettes format)
for p in glob.iglob("*.gpl"): for p in glob.iglob(os.path.join(palettes_dir, "*.gpl")):
try: try:
name,palette = parse_gimp_palette(p) name,palette = parse_gimp_palette(p)
except Exception as e: except Exception as e:
@ -947,23 +946,17 @@ def main():
# try additional directories if asked # try additional directories if asked
if palettes_dirs: if palettes_dirs:
for adir in palettes_dirs: for adir in palettes_dirs:
try: if os.path.isdir(adir):
os.chdir( adir )
except OSError as e:
logging.warning("cannot read palettes directory %s, ignore it" % adir)
continue
else:
load_palettes( adir ) load_palettes( adir )
else:
logging.warning("cannot read palettes directory %s, ignore it" % adir)
if themes_dirs: if themes_dirs:
for adir in themes_dirs: for adir in themes_dirs:
try: if os.path.isdir(adir):
os.chdir( adir )
except OSError as e:
logging.warning("cannot read themes directory %s, ignore it" % adir)
continue
else:
load_themes( adir ) load_themes( adir )
else:
logging.warning("cannot read themes directory %s, ignore it" % adir)
except DuplicatedPalette as e: except DuplicatedPalette as e:
logging.error( "duplicated palette file name: %s" % e ) logging.error( "duplicated palette file name: %s" % e )