本文整理汇总了Python中webdav.common.rfc1123_date函数的典型用法代码示例。如果您正苦于以下问题:Python rfc1123_date函数的具体用法?Python rfc1123_date怎么用?Python rfc1123_date使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rfc1123_date函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: http_response_with_file
def http_response_with_file(request, response, data_file, content_type,
file_size, file_mtime):
# HTTP If-Modified-Since header handling.
header=request.get_header('If-Modified-Since', None)
if header is not None:
header=string.split(header, ';')[0]
# Some proxies seem to send invalid date strings for this
# header. If the date string is not valid, we ignore it
# rather than raise an error to be generally consistent
# with common servers such as Apache (which can usually
# understand the screwy date string as a lucky side effect
# of the way they parse it).
# This happens to be what RFC2616 tells us to do in the face of an
# invalid date.
try: mod_since=long(DateTime(header).timeTime())
except: mod_since=None
if mod_since is not None:
last_mod = long(file_mtime)
if last_mod > 0 and last_mod <= mod_since:
# Set header values since apache caching will return Content-Length
# of 0 in response if size is not set here
response.setHeader('Last-Modified', rfc1123_date(file_mtime))
response.setHeader('Content-Type', content_type)
response.setHeader('Content-Length', file_size)
response.setStatus(304)
return
response.setHeader('Last-Modified', rfc1123_date(file_mtime))
response.setHeader('Content-Type', content_type)
response.setHeader('Content-Length', file_size)
for chunk in iter_file_data(data_file):
response.write(chunk)
示例2: test_index_html
def test_index_html( self ):
path, ref = self._extractFile()
import os
from webdav.common import rfc1123_date
mod_time = os.stat( path )[ 8 ]
image = self._makeOne( 'test_image', 'test_image.gif' )
image = image.__of__( self.root )
data = image.index_html( self.REQUEST, self.RESPONSE )
self.assertEqual( len( data ), len( ref ) )
self.assertEqual( data, ref )
#
# ICK! 'HTTPResponse.getHeader' doesn't case-flatten the key!
#
self.assertEqual( self.RESPONSE.getHeader( 'Content-Length'.lower() )
, str( len( ref ) ) )
self.assertEqual( self.RESPONSE.getHeader( 'Content-Type'.lower() )
, 'image/gif' )
self.assertEqual( self.RESPONSE.getHeader( 'Last-Modified'.lower() )
, rfc1123_date( mod_time ) )
示例3: test_index_html_200_with_cpm
def test_index_html_200_with_cpm( self ):
# should behave the same as without cpm installed
from Products.CMFCore.tests.base.dummy import DummyCachingManager
self.root.caching_policy_manager = DummyCachingManager()
path, ref = self._extractFile('test_file.swf')
import os
from webdav.common import rfc1123_date
file = self._makeOne( 'test_file', 'test_file.swf' )
file = file.__of__( self.root )
mod_time = os.stat( path )[ 8 ]
data = file.index_html( self.REQUEST, self.RESPONSE )
self.assertEqual( len( data ), len( ref ) )
self.assertEqual( data, ref )
# ICK! 'HTTPResponse.getHeader' doesn't case-flatten the key!
self.assertEqual( self.RESPONSE.getHeader( 'Content-Length'.lower() )
, str(len(ref)) )
self.assertEqual( self.RESPONSE.getHeader( 'Content-Type'.lower() )
, 'application/octet-stream' )
self.assertEqual( self.RESPONSE.getHeader( 'Last-Modified'.lower() )
, rfc1123_date( mod_time ) )
示例4: _if_modified_since_request_handler
def _if_modified_since_request_handler(self, REQUEST):
""" HTTP If-Modified-Since header handling: return True if
we can handle this request by returning a 304 response.
"""
header = REQUEST.get_header("If-Modified-Since", None)
if header is not None:
header = string.split(header, ";")[0]
try:
mod_since = long(DateTime(header).timeTime())
except:
mod_since = None
if mod_since is not None:
if self._p_mtime:
last_mod = long(self._p_mtime)
else:
last_mod = long(0)
if last_mod > 0 and last_mod < mod_since:
# Set headers for Apache caching
last_mod = rfc1123_date(self._p_mtime)
REQUEST.RESPONSE.setHeader("Last-Modified", last_mod)
REQUEST.RESPONSE.setHeader("Content-Type", self.content_type)
# RFC violation. See http://collector.zope.org/Zope/544
# REQUEST.RESPONSE.setHeader('Content-Length', self.get_size())
REQUEST.RESPONSE.setStatus(304)
return 1
示例5: index_html
def index_html(self, REQUEST, RESPONSE):
"""
The default view of the contents of a File or Image.
Returns the contents of the file or image. Also, sets the
Content-Type HTTP header to the objects content type.
"""
# HTTP If-Modified-Since header handling.
data = self._readFile()
header=REQUEST.get_header('If-Modified-Since', None)
if header is not None:
header=string.split(header, ';')[0]
# Some proxies seem to send invalid date strings for this
# header. If the date string is not valid, we ignore it
# rather than raise an error to be generally consistent
# with common servers such as Apache (which can usually
# understand the screwy date string as a lucky side effect
# of the way they parse it).
try: mod_since=long(DateTime(header).timeTime())
except: mod_since=None
if mod_since is not None:
last_mod = self.file_mod_time
if last_mod > 0 and last_mod <= mod_since:
RESPONSE.setStatus(304)
return ''
RESPONSE.setHeader('Last-Modified', rfc1123_date(self.file_mod_time))
RESPONSE.setHeader('Content-Type', self.content_type)
RESPONSE.setHeader('Content-Length', len(data))
return data
示例6: index_html
def index_html(self, instance, REQUEST=None, RESPONSE=None, disposition='inline'):
""" make it directly viewable when entering the objects URL """
if REQUEST is None:
REQUEST = instance.REQUEST
if RESPONSE is None:
RESPONSE = REQUEST.RESPONSE
blob = self.getUnwrapped(instance, raw=True) # TODO: why 'raw'?
RESPONSE.setHeader('Last-Modified', rfc1123_date(instance._p_mtime))
RESPONSE.setHeader('Content-Type', self.getContentType(instance))
# The only change is to comment out this header:
#RESPONSE.setHeader('Accept-Ranges', 'bytes')
if handleIfModifiedSince(instance, REQUEST, RESPONSE):
return ''
length = blob.get_size()
RESPONSE.setHeader('Content-Length', length)
filename = self.getFilename(instance)
if filename is not None:
filename = IUserPreferredFileNameNormalizer(REQUEST).normalize(
unicode(filename, instance.getCharset()))
header_value = contentDispositionHeader(
disposition=disposition,
filename=filename)
RESPONSE.setHeader("Content-disposition", header_value)
range = handleRequestRange(instance, length, REQUEST, RESPONSE)
return blob.getIterator(**range)
示例7: get_logo
def get_logo(self, disposition='inline', headers=True):
portal = getToolByName(self.context, 'portal_url').getPortalObject()
customstyles_util = CustomStylesUtility(portal)
customstyles = customstyles_util.annotations.get(
'customstyles', OOBTree(DEFAULT_STYLES))
REQUEST = self.request
RESPONSE = REQUEST.RESPONSE
blob = LOGO_KEY in customstyles and customstyles[LOGO_RIGHT_KEY] or None
if not blob:
return ''
length = blob.get_size()
if headers:
RESPONSE.setHeader('Last-Modified',
rfc1123_date(self.context._p_mtime))
RESPONSE.setHeader('Content-Type', blob.getContentType())
RESPONSE.setHeader('Accept-Ranges', 'bytes')
if handleIfModifiedSince(self.context, REQUEST, RESPONSE):
return ''
RESPONSE.setHeader('Content-Length', length)
filename = blob.getFilename()
if filename is not None:
filename = IUserPreferredFileNameNormalizer(REQUEST).normalize(
unicode(filename, self.context.getCharset()))
header_value = contentDispositionHeader(
disposition=disposition,
filename=filename)
RESPONSE.setHeader("Content-disposition", header_value)
range = handleRequestRange(self.context, length, REQUEST, RESPONSE)
return blob.getIterator(**range)
示例8: test304ResponseSetsCache
def test304ResponseSetsCache(self):
response = self.publish(self.file_path,
env={'HTTP_IF_MODIFIED_SINCE': rfc1123_date(DateTime()+7)},
basic=user_auth)
self.assertEqual(response.getStatus(), 304)
self.assertEqual(self.cache.data, None)
self.assertEqual(self.cache.called, ['set'])
示例9: __call__
def __call__(self):
sm = getSecurityManager()
if not sm.checkPermission(permissions.View, self.context.context):
raise Unauthorized
settings = self.context.settings
filepath = self.context.filepath
blob = settings.blob_files[filepath]
blobfi = openBlob(blob)
length = os.fstat(blobfi.fileno()).st_size
blobfi.close()
ext = os.path.splitext(os.path.normcase(filepath))[1][1:]
if ext == 'txt':
ct = 'text/plain'
else:
ct = 'image/%s' % ext
self.request.response.setHeader('Last-Modified',
rfc1123_date(self.context._p_mtime))
self.request.response.setHeader('Accept-Ranges', 'bytes')
self.request.response.setHeader("Content-Length", length)
self.request.response.setHeader('Content-Type', ct)
request_range = handleRequestRange(
self.context, length, self.request, self.request.response)
return BlobStreamIterator(blob, **request_range)
示例10: _FSCacheHeaders
def _FSCacheHeaders(obj):
REQUEST = getattr(obj, 'REQUEST', None)
if REQUEST is None:
return False
RESPONSE = REQUEST.RESPONSE
header = REQUEST.get_header('If-Modified-Since', None)
last_mod = obj._file_mod_time
if header is not None:
header = header.split(';')[0]
# Some proxies seem to send invalid date strings for this
# header. If the date string is not valid, we ignore it
# rather than raise an error to be generally consistent
# with common servers such as Apache (which can usually
# understand the screwy date string as a lucky side effect
# of the way they parse it).
try:
mod_since=DateTime(header)
mod_since=long(mod_since.timeTime())
except TypeError:
mod_since=None
if mod_since is not None:
if last_mod > 0 and last_mod <= mod_since:
RESPONSE.setStatus(304)
return True
#Last-Modified will get stomped on by a cache policy if there is
#one set....
RESPONSE.setHeader('Last-Modified', rfc1123_date(last_mod))
示例11: test_index_html_with_304_and_caching
def test_index_html_with_304_and_caching( self ):
# See collector #355
self.root.caching_policy_manager = DummyCachingManager()
original_len = len(self.RESPONSE.headers)
path, ref = self._extractFile()
import os
from webdav.common import rfc1123_date
mod_time = os.stat( path )[ 8 ]
image = self._makeOne( 'test_image', 'test_image.gif' )
image = image.__of__( self.root )
self.REQUEST.environ[ 'IF_MODIFIED_SINCE'
] = '%s;' % rfc1123_date( mod_time+3600 )
data = image.index_html( self.REQUEST, self.RESPONSE )
self.assertEqual( data, '' )
self.assertEqual( self.RESPONSE.getStatus(), 304 )
headers = self.RESPONSE.headers
self.failUnless(len(headers) >= original_len + 3)
self.failUnless('foo' in headers.keys())
self.failUnless('bar' in headers.keys())
self.assertEqual(headers['test_path'], '/test_image')
示例12: index_html
def index_html(self, REQUEST=None, RESPONSE=None, charset='utf-8', disposition='inline'):
""" make it directly viewable when entering the objects URL """
if REQUEST is None:
REQUEST = self.REQUEST
if RESPONSE is None:
RESPONSE = REQUEST.RESPONSE
RESPONSE.setHeader('Last-Modified', rfc1123_date(self._p_mtime))
RESPONSE.setHeader('Content-Type', self.getContentType())
RESPONSE.setHeader('Accept-Ranges', 'bytes')
if handleIfModifiedSince(self, REQUEST, RESPONSE):
return ''
length = self.get_size()
RESPONSE.setHeader('Content-Length', length)
filename = self.getFilename()
if filename is not None:
if not isinstance(filename, unicode):
filename = unicode(filename, charset)
filename = IUserPreferredFileNameNormalizer(REQUEST).normalize(
filename)
header_value = contentDispositionHeader(
disposition=disposition,
filename=filename)
RESPONSE.setHeader("Content-disposition", header_value)
request_range = handleRequestRange(self, length, REQUEST, RESPONSE)
return self.getIterator(**request_range)
示例13: HEAD
def HEAD(self, REQUEST, RESPONSE):
"""Retrieve resource information without a response body."""
self.dav__init(REQUEST, RESPONSE)
content_type=None
if hasattr(self, 'content_type'):
content_type=absattr(self.content_type)
if content_type is None:
url=urlfix(REQUEST['URL'], 'HEAD')
name=unquote(filter(None, url.split( '/')[-1]))
content_type, encoding=mimetypes.guess_type(name)
if content_type is None:
if hasattr(self, 'default_content_type'):
content_type=absattr(self.default_content_type)
if content_type is None:
content_type = 'application/octet-stream'
RESPONSE.setHeader('Content-Type', content_type.lower())
if hasattr(aq_base(self), 'get_size'):
RESPONSE.setHeader('Content-Length', absattr(self.get_size))
if hasattr(self, '_p_mtime'):
mtime=rfc1123_date(self._p_mtime)
RESPONSE.setHeader('Last-Modified', mtime)
if hasattr(aq_base(self), 'http__etag'):
etag = self.http__etag(readonly=1)
if etag:
RESPONSE.setHeader('Etag', etag)
RESPONSE.setStatus(200)
return RESPONSE
示例14: test_index_html_with_304_and_caching
def test_index_html_with_304_and_caching( self ):
# See collector #355
self._setupCachingPolicyManager(DummyCachingManager())
original_len = len(self.RESPONSE.headers)
path, ref = self._extractFile()
from webdav.common import rfc1123_date
self.root.image = self._makeOne( 'test_image', 'test_image.gif' )
image = self.root.image
transaction.savepoint(optimistic=True)
mod_time = image.modified()
self.REQUEST.environ[ 'IF_MODIFIED_SINCE'
] = '%s;' % rfc1123_date( mod_time+1 )
data = image.index_html( self.REQUEST, self.RESPONSE )
self.assertEqual( data, '' )
self.assertEqual( self.RESPONSE.getStatus(), 304 )
headers = self.RESPONSE.headers
self.failUnless(len(headers) >= original_len + 3)
self.failUnless('foo' in headers.keys())
self.failUnless('bar' in headers.keys())
self.assertEqual(headers['test_path'], '/test_image')
示例15: render_attachment_preview
def render_attachment_preview(self, attachment):
sm = getSecurityManager()
if not sm.checkPermission(permissions.View, self.context):
raise Unauthorized
r = self.request.response
settings = Settings(attachment)
if self.preview_type not in ("large", "normal", "small"):
self.preview_type = "small"
if self.page is None:
self.page = 1
filepath = u"%s/dump_%s.%s" % (self.preview_type, self.page, settings.pdf_image_format)
blob = settings.blob_files[filepath]
blobfi = openBlob(blob)
length = os.fstat(blobfi.fileno()).st_size
blobfi.close()
ext = os.path.splitext(os.path.normcase(filepath))[1][1:]
if ext == "txt":
ct = "text/plain"
else:
ct = "image/%s" % ext
r.setHeader("Content-Type", ct)
r.setHeader("Last-Modified", rfc1123_date(self.context._p_mtime))
r.setHeader("Accept-Ranges", "bytes")
r.setHeader("Content-Length", length)
request_range = handleRequestRange(self.context, length, self.request, self.request.response)
return BlobStreamIterator(blob, **request_range)