f642b46742
git-svn-id: http://comictagger.googlecode.com/svn/trunk@2 6c5673fe-1810-88d6-992b-cd32ca31540c
119 lines
3.4 KiB
Python
119 lines
3.4 KiB
Python
"""
|
|
A python class to encapsulate the ComicBookInfo data and file handling
|
|
"""
|
|
|
|
import json
|
|
from datetime import datetime
|
|
import zipfile
|
|
|
|
from genericmetadata import GenericMetadata
|
|
import utils
|
|
|
|
class ComicBookInfo:
|
|
|
|
|
|
def metadataFromString( self, string ):
|
|
|
|
cbi_container = json.loads( unicode(string, 'utf-8') )
|
|
|
|
metadata = GenericMetadata()
|
|
|
|
cbi = cbi_container[ 'ComicBookInfo/1.0' ]
|
|
|
|
#helper func
|
|
# If item is not in CBI, return None
|
|
def xlate( cbi_entry):
|
|
if cbi_entry in cbi:
|
|
return cbi[cbi_entry]
|
|
else:
|
|
return None
|
|
|
|
metadata.series = xlate( 'series' )
|
|
metadata.title = xlate( 'title' )
|
|
metadata.issueNumber = xlate( 'issue' )
|
|
metadata.publisher = xlate( 'publisher' )
|
|
metadata.publicationMonth = xlate( 'publicationMonth' )
|
|
metadata.publicationYear = xlate( 'publicationYear' )
|
|
metadata.issueCount = xlate( 'numberOfIssues' )
|
|
metadata.comments = xlate( 'comments' )
|
|
metadata.credits = xlate( 'credits' )
|
|
metadata.genre = xlate( 'genre' )
|
|
metadata.volumeNumber = xlate( 'volume' )
|
|
metadata.volumeCount = xlate( 'numberOfVolumes' )
|
|
metadata.language = xlate( 'language' )
|
|
metadata.country = xlate( 'country' )
|
|
metadata.criticalRating = xlate( 'rating' )
|
|
metadata.tags = xlate( 'tags' )
|
|
|
|
#need to massage the language string to be ISO
|
|
if metadata.language is not None:
|
|
# reverse look-up
|
|
pattern = metadata.language
|
|
metadata.language = None
|
|
for key in utils.getLanguageDict():
|
|
if utils.getLanguageDict()[ key ] == pattern.encode('utf-8'):
|
|
metadata.language = key
|
|
break
|
|
|
|
metadata.isEmpty = False
|
|
|
|
return metadata
|
|
|
|
def stringFromMetadata( self, metadata ):
|
|
|
|
cbi_container = self.createJSONDictionary( metadata )
|
|
return json.dumps( cbi_container )
|
|
|
|
#verify that the string actually contains CBI data in JSON format
|
|
def validateString( self, string ):
|
|
|
|
try:
|
|
cbi_container = json.loads( string )
|
|
except:
|
|
return False
|
|
|
|
return ( 'ComicBookInfo/1.0' in cbi_container )
|
|
|
|
|
|
def createJSONDictionary( self, metadata ):
|
|
|
|
# Create the dictionary that we will convert to JSON text
|
|
cbi = dict()
|
|
cbi_container = {'appID' : 'ComicTagger/0.1',
|
|
'lastModified' : str(datetime.now()),
|
|
'ComicBookInfo/1.0' : cbi }
|
|
|
|
#helper func
|
|
def assign( cbi_entry, md_entry):
|
|
if md_entry is not None:
|
|
cbi[cbi_entry] = md_entry
|
|
|
|
assign( 'series', metadata.series )
|
|
assign( 'title', metadata.title )
|
|
assign( 'issue', metadata.issueNumber )
|
|
assign( 'publisher', metadata.publisher )
|
|
assign( 'publicationMonth', metadata.publicationMonth )
|
|
assign( 'publicationYear', metadata.publicationYear )
|
|
assign( 'numberOfIssues', metadata.issueCount )
|
|
assign( 'comments', metadata.comments )
|
|
assign( 'genre', metadata.genre )
|
|
assign( 'volume', metadata.volumeNumber )
|
|
assign( 'numberOfVolumes', metadata.volumeCount )
|
|
assign( 'language', utils.getLanguageFromISO(metadata.language) )
|
|
assign( 'country', metadata.country )
|
|
assign( 'rating', metadata.criticalRating )
|
|
assign( 'credits', metadata.credits )
|
|
assign( 'tags', metadata.tags )
|
|
|
|
return cbi_container
|
|
|
|
|
|
def writeToExternalFile( self, filename, metadata ):
|
|
|
|
cbi_container = self.createJSONDictionary(metadata)
|
|
|
|
f = open(filename, 'w')
|
|
f.write(json.dumps(cbi_container, indent=4))
|
|
f.close
|
|
|