From 9850fc08059448db3b15ab2fb03b43220ca1d515 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Wed, 4 Jan 2012 16:39:16 -0600 Subject: [PATCH] Allow List metadata in output_filename, param to write to filename, tidy defaults.ini a little, pull u/p/is_adult up to base_adapter.py for plugin. --- defaults.ini | 3 +++ fanficdownloader/adapters/base_adapter.py | 4 ++++ fanficdownloader/story.py | 14 +++++++++++++- fanficdownloader/writers/base_writer.py | 9 +++++---- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/defaults.ini b/defaults.ini index f791b51..463a01a 100644 --- a/defaults.ini +++ b/defaults.ini @@ -88,8 +88,10 @@ include_tocpage: true #output_filename: books/${title}-${siteabbrev}_${storyId}${formatext} #output_filename: books/${formatname}/${siteabbrev}/${authorId}/${title}-${siteabbrev}_${storyId}${formatext} output_filename: ${title}-${siteabbrev}_${storyId}${formatext} + ## Make directories as needed. make_directories: true + ## Always overwrite output files. Otherwise, the downloader checks ## the timestamp on the existing file and only overwrites if the story ## has been updated more recently. Command line version only @@ -97,6 +99,7 @@ make_directories: true ## put output (with output_filename) in a zip file zip_filename. zip_output: false + ## Can include directories. .zip will be added if not in name somewhere zip_filename: ${title}-${siteabbrev}_${storyId}${formatext}.zip diff --git a/fanficdownloader/adapters/base_adapter.py b/fanficdownloader/adapters/base_adapter.py index 4a4642e..9e10aab 100644 --- a/fanficdownloader/adapters/base_adapter.py +++ b/fanficdownloader/adapters/base_adapter.py @@ -68,6 +68,10 @@ class BaseSiteAdapter(Configurable): self.addConfigSection(self.getSiteDomain()) self.addConfigSection("overrides") + self.username = "NoneGiven" # if left empty, site doesn't return any message at all. + self.password = "" + self.is_adult=False + self.opener = u2.build_opener(u2.HTTPCookieProcessor()) self.storyDone = False self.metadataDone = False diff --git a/fanficdownloader/story.py b/fanficdownloader/story.py index 2768854..7241a90 100644 --- a/fanficdownloader/story.py +++ b/fanficdownloader/story.py @@ -25,7 +25,7 @@ class Story: try: self.metadata = {'version':os.environ['CURRENT_VERSION_ID']} except: - self.metadata = {'version':'4.1'} + self.metadata = {'version':'4.2'} self.chapters = [] # chapters will be tuples of (title,html) self.listables = {} # some items (extratags, category, warnings & genres) are also kept as lists. @@ -50,6 +50,18 @@ class Story: value = value.strftime("%Y-%m-%d") return value + def getAllMetadata(self): + ''' + All single value *and* list value metadata as strings. + ''' + allmetadata = {} + for k in self.metadata.keys(): + allmetadata[k] = self.getMetadata(k) + for l in self.listables.keys(): + allmetadata[l] = self.getMetadata(l) + + return allmetadata + def addToList(self,listname,value): if value==None: return diff --git a/fanficdownloader/writers/base_writer.py b/fanficdownloader/writers/base_writer.py index da9822c..77da88b 100644 --- a/fanficdownloader/writers/base_writer.py +++ b/fanficdownloader/writers/base_writer.py @@ -118,7 +118,7 @@ class BaseStoryWriter(Configurable): return self.formatFileName(self.getConfig('zip_filename')) def formatFileName(self,template): - values = self.story.metadata + values = origvalues = self.story.getAllMetadata() # fall back default: if not template: template="${title}-${siteabbrev}_${storyId}${formatext}" @@ -126,7 +126,7 @@ class BaseStoryWriter(Configurable): if not self.getConfig('allow_unsafe_filename'): values={} pattern = re.compile(r"[^a-zA-Z0-9_\. \[\]\(\)&'-]+") - for k in self.story.metadata.keys(): + for k in origvalues.keys(): values[k]=re.sub(pattern,'_', removeAllEntities(self.story.getMetadata(k))) return string.Template(template).substitute(values).encode('utf8') @@ -183,12 +183,13 @@ class BaseStoryWriter(Configurable): self._write(out,END.substitute(self.story.metadata)) # if no outstream is given, write to file. - def writeStory(self,outstream=None,metaonly=False): + def writeStory(self,outstream=None,metaonly=False, outfilename=None): for tag in self.getConfigList("extratags"): self.story.addToList("extratags",tag) self.metaonly = metaonly - outfilename=self.getOutputFileName() + if outfilename != None: + outfilename=self.getOutputFileName() if not outstream: close=True