parent
615dd5c6e8
commit
8a9d2e60d0
|
@ -0,0 +1,77 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from metafile import Metafile, MalformedMetafileError, NoPathDefinedError
|
||||||
|
|
||||||
|
class Persoconf(object):
|
||||||
|
"""The root of a persoconf"""
|
||||||
|
|
||||||
|
def __init__(self, path, metafile="META"):
|
||||||
|
self.path = path
|
||||||
|
self.metafile = metafile
|
||||||
|
|
||||||
|
self.check_validity()
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
def check_validity(self):
|
||||||
|
"""Check if this Persoconf has a valid path"""
|
||||||
|
|
||||||
|
if not os.path.isdir(self.path):
|
||||||
|
if os.path.exists(self.path):
|
||||||
|
raise FileInsteadOfDirError("Persoconf root '%s' exists but " \
|
||||||
|
"is a file"
|
||||||
|
% self.path )
|
||||||
|
else:
|
||||||
|
raise PersoconfRootDoesNotExistError("Persoconf root '%s' " \
|
||||||
|
"does not exist"
|
||||||
|
% self.path )
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
def list_apps(self, logger=None):
|
||||||
|
"""List all apps in the persoconf repo. Returns a dictionnary
|
||||||
|
{ appname -> Metafile ="""
|
||||||
|
|
||||||
|
apps_list = {}
|
||||||
|
|
||||||
|
for potential_app in os.listdir(self.path):
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Try to initialize a metafile from the path.
|
||||||
|
appmeta = Metafile(json_path = self.path +"/"+
|
||||||
|
potential_app +"/"+
|
||||||
|
self.metafile)
|
||||||
|
|
||||||
|
apps_list[appmeta.name] = appmeta
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
if logger is not None:
|
||||||
|
logger.info("No metafile %s in %s, probably not an app; " \
|
||||||
|
"ignoring"
|
||||||
|
% (self.metafile, potential_app) )
|
||||||
|
continue
|
||||||
|
|
||||||
|
except MalformedMetafileError:
|
||||||
|
if logger is not None:
|
||||||
|
logger.warning("Malformed metafile %s in app %s ; ignoring"
|
||||||
|
% (self.metafile, potential_app) )
|
||||||
|
continue
|
||||||
|
|
||||||
|
return apps_list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class FileInsteadOfDirError(Exception):
|
||||||
|
"""We expected a directory but got a file instead"""
|
||||||
|
def __init__(self, message):
|
||||||
|
Exception.__init__(self, message)
|
||||||
|
|
||||||
|
|
||||||
|
class PersoconfRootDoesNotExistError(Exception):
|
||||||
|
"""The Persoconf root directory was not created"""
|
||||||
|
def __init__(self, message):
|
||||||
|
Exception.__init__(self, message)
|
Loading…
Reference in New Issue