#!/usr/bin/python
# -*- coding: utf-8 -*-
"""Group of utility functions.
Used in various parts of the archive interface.
"""
import email.utils as eut
import time
from os import path
from .exception import ArchiveInterfaceError
[docs]def bytes_type(unicode_obj):
"""Convert the unicode object into bytes."""
if isinstance(unicode_obj, bytes):
return unicode_obj
return bytes(unicode_obj, 'UTF-8')
[docs]def file_status(status, response):
"""Response for when file is on the hpss system."""
response_headers = [
('X-Pacifica-Messsage', 'File was found' if status else 'File Not found'),
('X-Pacifica-File', str(getattr(status, 'filepath', 'File Not Found'))),
('X-Content-Length', str(getattr(status, 'filesize', 'File Not Found'))),
('Last-Modified', str(getattr(status, 'mtime', 'File Not Found'))),
('X-Pacifica-Ctime', str(getattr(status, 'ctime', 'File Not Found'))),
(
'X-Pacifica-Bytes-Per-Level',
str(getattr(status, 'bytes_per_level', 'File Not Found'))
),
(
'X-Pacifica-File-Storage-Media',
str(getattr(status, 'file_storage_media', 'File Not Found'))
),
('Content-Type', 'application/json')
]
response.status = '204 No Content' if status else '404 Not Found'
for key, value in response_headers:
response.headers[key] = value
[docs]def un_abs_path(path_name):
"""Remove absolute path piece."""
try:
if path.isabs(path_name):
path_name = path_name[1:]
return path_name
except (AttributeError, TypeError) as ex:
raise ArchiveInterfaceError('Cant remove absolute path: ' + str(ex))
[docs]def get_http_modified_time(env):
"""Get the modified time from the request in unix timestamp.
Returns current time if no time was passed.
"""
try:
mod_time = None
if 'HTTP_LAST_MODIFIED' in env:
mod_time = eut.mktime_tz(
eut.parsedate_tz(env['HTTP_LAST_MODIFIED']))
else:
mod_time = time.time()
return mod_time
except (TypeError, IndexError, AttributeError) as ex:
raise ArchiveInterfaceError('Cant parse the files modtime: ' + str(ex))