def jsonify(*args, **kwargs): if __debug__: _assertHaveJson() """ if 'padded' in kwargs: if isinstance(kwargs['padded'], str): callback = request.args.get(kwargs['padded']) or 'jsonp' else: callback = request.args.get('callback') or request.args.get('jsonp') or 'jsonp' del kwargs['padded'] jsonStr = json.dumps(dict(*args,**kwargs), indent=None) content = str(callback) + '(' + jsonStr + ')' return currentApp.responseClass(content, mimetype='application/javascript') """ resp = json.dumps(dict(*args, **kwargs), indent=None if request.is_xhr else 2) return currentApp.responseClass(resp, mimetype='application/json')
def sendFile(filenameOrFp, mimetype=None, asAttachment=False, attachmentFilename=None, addEtags=True, cacheTimeout=None, conditional=False): u"""静的ファイルをレスポンスとして返します。 :param filenameOrFp: 送りたいファイル名 :param mimetype: mimetype """ mtime = None if isinstance(filenameOrFp, basestring): filename = filenameOrFp file = None else: from warnings import warn file = filenameOrFp filename = getattr(file, 'name', None) if not attachmentFilename and not mimetype \ and isinstance(filename, basestring): warn(DeprecationWarning('THAAAAAAAA'), stacklevel=2) if addEtags: warn(DeprecationWarning('AAAAAAA?'), stacklevel=2) if filename is not None: if not os.path.isabs(filename): os.path.join(currentApp.rootPath, filename) if mimetype is None and (filename or attachmentFilename): mimetype = mimetypes.guess_type(filename or attachmentFilename)[0] if mimetype is None: mimetype = 'application/octet-stream' headers = Headers() if asAttachment: if attachmentFilename is None: if filename is None: raise TypeError('file name is invalid') attachmentFilename = os.path.basename(filename) headers.add('Content-Disposition', 'attachment', filename=attachmentFilename) if currentApp.useXSendFile and filename: if file is not None: file.close() headers['X-Sendfile'] = filename #for nginx #headers['X-Accel-Redirect'] = filename data = None else: if file is None: file = open(filename, 'rb') mtime = os.path.getmtime(filename) data = wrap_file(request.environ, file) rv = currentApp.responseClass(data, mimetype=mimetype, headers=headers, direct_passthrough=True) if mtime is not None: rv.last_modified = int(mtime) rv.cache_control.public = True if cacheTimeout is None: cacheTimeout = currentApp.getSendFileMaxAge(filename) if cacheTimeout: rv.cache_control.max_age = cacheTimeout rv.expires = int(time() + cacheTimeout) if addEtags and filename is not None: rv.set_etag('Shimehari-%s-%s-%s' % (os.path.getmtime(filename), os.path.getsize(filename), adler32( filename.encode('utf8') if isinstance(filename, unicode) else filename ) & 0xffffffff ) ) if conditional: rv = rv.make_conditional(request) if rv.status_code == 304: rv.headers.pop('x-sendfile', None) return rv
def sendFile(filenameOrFp, mimetype=None, asAttachment=False, attachmentFilename=None, addEtags=True, cacheTimeout=None, conditional=False): u"""静的ファイルをレスポンスとして返します。 :param filenameOrFp: 送りたいファイル名 :param mimetype: mimetype """ mtime = None if isinstance(filenameOrFp, basestring): filename = filenameOrFp file = None else: from warnings import warn file = filenameOrFp filename = getattr(file, 'name', None) if not attachmentFilename and not mimetype \ and isinstance(filename, basestring): warn(DeprecationWarning('THAAAAAAAA'), stacklevel=2) if addEtags: warn(DeprecationWarning('AAAAAAA?'), stacklevel=2) if filename is not None: if not os.path.isabs(filename): os.path.join(currentApp.rootPath, filename) if mimetype is None and (filename or attachmentFilename): mimetype = mimetypes.guess_type(filename or attachmentFilename)[0] if mimetype is None: mimetype = 'application/octet-stream' headers = Headers() if asAttachment: if attachmentFilename is None: if filename is None: raise TypeError('file name is invalid') attachmentFilename = os.path.basename(filename) headers.add('Content-Disposition', 'attachment', filename=attachmentFilename) if currentApp.useXSendFile and filename: if file is not None: file.close() headers['X-Sendfile'] = filename #for nginx #headers['X-Accel-Redirect'] = filename data = None else: if file is None: file = open(filename, 'rb') mtime = os.path.getmtime(filename) data = wrap_file(request.environ, file) rv = currentApp.responseClass(data, mimetype=mimetype, headers=headers, direct_passthrough=True) if mtime is not None: rv.last_modified = int(mtime) rv.cache_control.public = True if cacheTimeout is None: cacheTimeout = currentApp.getSendFileMaxAge(filename) if cacheTimeout: rv.cache_control.max_age = cacheTimeout rv.expires = int(time() + cacheTimeout) if addEtags and filename is not None: rv.set_etag('Shimehari-%s-%s-%s' % (os.path.getmtime(filename), os.path.getsize(filename), adler32( filename.encode('utf8') if isinstance( filename, unicode) else filename) & 0xffffffff)) if conditional: rv = rv.make_conditional(request) if rv.status_code == 304: rv.headers.pop('x-sendfile', None) return rv