Holder.__init__(self, **kw)
files[kw["rel_path"]] = self
self.render = None
+ self.contents = None
mtime = os.stat(self.path)[stat.ST_MTIME]
self.mtime = mtime
self.ctime = mtime
if read_keywords:
s = s.strip()
#print "kwd:", s
- if s==terminate_line:
+ if s == terminate_line:
read_keywords = False
continue
continue
#print "txt:", s.rstrip().encode("iso-8859-1")
txt.append(s)
+
+ # Warn about a bogus time entries
+ if self.mtime < self.ctime:
+ log('%s: modification time cannot be before creation time' % self.rel_path)
+ self.ctime = self.mtime
+
+ # Warn about long titles / long linktitles
+ if len(self.linktitle) > 20:
+ log('%s: define a shorter linktitle' % self.rel_path)
+
self.contents = "".join(txt)
def get_file_for(name):
"""webber.files is an hash of File objects, but keyed on the real file name.
This function returns a File object for a specific linktitle."""
-
+
try:
return _get_file_for_cache[name]
except:
# 5... Debug
#
def log(s, level=4):
- if level>4:
+ if level > 4:
indent = " " * (level-4)
else:
indent = ""
# At startup:
# addoptions allow plugins to add command-line options
# checkconfig check configuration
-# start
+# start
# While reading files:
# read ask any reader (plugins!) to read the file
# filter ask anybody to filter the contents
def load_plugins():
"""Loads all plugins in the plugins directory."""
sys.path.append(os.path.join(get_program_directory(), "plugins"))
+ if cfg.has_key("plugin_dirs"):
+ for s in cfg.plugin_dirs:
+ sys.path.append(s)
for s in cfg.plugins:
- #print "import:", s
- #try:
exec "import %s" % s
- #except:
- # print "Could not import plugin '%s'" % s
- # sys.exit(1)
def set_hook(name, last=False):
try:
t = time.strptime(val, "%Y-%m-%d")
except ValueError:
- warning("%s: wrong ISO format in '%s'" % (self.rel_path, s))
+ warning("wrong ISO format in '%s'" % val)
return int(time.mktime(t))
@set_function("format_date")
direc.inheritFrom(cfg)
if not rel_path: rel_path = "."
- log("reading directory %s" % rel_path, level=4)
+ log("reading directory %s" % rel_path, level=5)
for s in os.listdir(dirpath):
full_path = os.path.join(dirpath, s)
if ok:
#print "FILE", s
rel_path = relpath(cfg.in_dir, full_path)
+ # Allow paths to be specified in exclude_files:
+ for e in cfg.exclude_files:
+ if fnmatch.fnmatch(rel_path, e):
+ log("ignoring file %s" % rel_path, level=7)
+ ok = False
+ break
+ if ok:
log("reading file %s" % rel_path, level=5)
file = File(
path = full_path,
)
file.inheritFrom(direc)
read_file(direc, file)
-
+
walk(dirpath)
s = reMacro.sub(do_macro, contents)
#print s
return s
-
+
def scan_files():
info("Scanning files ...")
for s in files:
file = files[s]
- try:
- # Just check if the file has contents
- contents = file.contents
- except:
+ if not file.has_key("contents"):
continue
+# try:
+# # Just check if the file has contents
+# contents = file.contents
+# except:
+# continue
direc = directories[file.direc]
+ # Output-Filename "berechnen"
+ if file.render and file.render == "html":
+ file.out_path = os.path.splitext(s)[0] + ".html"
+
run_hooks("scan",
direc=direc,
file=file)
continue
file.contents = contents
- # Output-Filename "berechnen"
- file.out_path = os.path.splitext(fname_in)[0] + ".html"
-
for fname_in in files:
file = files[fname_in]
current_file = file
return parser
-
+
@set_hook("checkconfig", last=True)
def checkconfig(params):
# Ensure absolute paths that end in '/'.