def info(self, *args, **kwargs): '''Get Info About a Comic''' Utils.allow_methods(kwargs=kwargs) if len(args) < 1: raise cherrypy.HTTPError(400, 'No Comic Path Requested') path = '/'.join(args) filename = self.prefix + path if not is_zipfile(filename): raise cherrypy.HTTPError(404, 'Requested Comic Not Exists') comic = ZipFile(filename) name = Utils.filename_to_name(filename) comment = str(comic.comment, 'utf8') pages = Utils.sort_list([info for info in comic.infolist() if Utils.is_image(info.filename)], lambda x: x.filename.lower()) modified = Utils.date_to_httpdate(os.path.getmtime(filename)) etag = Utils.make_etag(path, modified) Utils.validate_conditional(etag, modified) return { 'name': name, 'comment': comment, 'pagecount': len(pages), 'pages': [ { 'filename': page.filename, 'name': Utils.filename_to_name(page.filename), 'comment': str(page.comment, 'utf8'), 'size': page.file_size } for page in pages ] }
def image(self, *args, **kwargs): '''Get Image From Comic''' Utils.allow_methods(kwargs=kwargs) if len(args) < 2: raise cherrypy.HTTPError(400, 'No Comic Path Requested') path = '/'.join(args[:-1]) index = -1 try: index = int(args[-1]) except ValueError: raise cherrypy.HTTPError(400, 'No Comic Page Requested') index -= 1 base = self.prefix + path if not is_zipfile(base): raise cherrypy.HTTPError(404, 'Requested Comic Not Exists') comic = ZipFile(base) pages = Utils.sort_list([info for info in comic.infolist() if Utils.is_image(info.filename)], lambda x: x.filename.lower()) if index < 0 or index >= len(pages): raise cherrypy.HTTPError(404, 'Requested Comic Page Not Exists') page = pages[index] modified = Utils.date_to_httpdate(mktime(page.date_time + (0, 0, 0))) etag = Utils.make_etag(path, index, modified) Utils.validate_conditional(etag, modified) types = mimetypes.guess_type(pages[index].filename) cherrypy.response.headers['Content-Type'] = types[0] return comic.read(pages[index])
def image(self, * args, **kwargs): '''Get Image From The Gallery''' Utils.allow_methods(kwargs=kwargs) path = Utils.urlpatherize(args) filename = self.prefix + path if not os.path.isfile(filename): raise cherrypy.HTTPError(404, 'File Not Found') try: types = mimetypes.guess_type(filename) cherrypy.response.headers['Content-Type'] = types[0] modified = Utils.date_to_httpdate(os.path.getmtime(filename)) etag = Utils.make_etag(filename, modified) Utils.validate_conditional(etag, modified) with open(filename, 'rb') as file: return file.read() except IOError: raise cherrypy.HTTPError(403, 'Permission denied')
def list(self, *args, **kwargs): '''Get Directory Listing for Comic Library''' Utils.allow_methods(kwargs=kwargs) path = '/'.join(args) if not os.path.isdir(self.prefix+path): raise cherrypy.HTTPError(404, 'Requested Directory Not Exists') retval = { 'dirs': [], 'files': [] } base = self.prefix + path for item in Utils.sort_list(os.listdir(base), lambda x: x.lower()): safepath = path + '/' + item filename = base + '/' + item if os.path.isdir(filename): retval['dirs'].append(safepath) elif is_zipfile(filename): retval['files'].append(safepath) return retval
def listdir(self, *args, **kwargs): '''Get Directory Listing for Gallery''' Utils.allow_methods(kwargs=kwargs) path = Utils.urlpatherize(args) if not os.path.isdir(self.prefix + path): raise cherrypy.HTTPError(404, 'Requested Directory Not Exists') retval = { 'dirs': [], 'files': [] } base = self.prefix + path if path: path = '/' + path for item in Utils.sort_list(os.listdir(base), lambda x: x.lower()): safepath = path + '/' + item filename = base + '/' + item if os.path.isdir(filename): retval['dirs'].append(safepath) else: types = mimetypes.guess_type(filename) if types[0] and types[0].startswith('image/'): retval['files'].append(safepath) return retval