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.
This commit is contained in:
Jim Miller 2012-01-04 16:39:16 -06:00
parent 8bcf2e53db
commit 9850fc0805
4 changed files with 25 additions and 5 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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