97 lines
2.3 KiB
Cython
Executable File
97 lines
2.3 KiB
Cython
Executable File
#cython: language_level=3
|
|
|
|
'''
|
|
Created on 28 juillet 2017
|
|
|
|
@author: coissac
|
|
'''
|
|
|
|
from os import environb,getpid
|
|
from os.path import join, isdir
|
|
from tempfile import TemporaryDirectory, _get_candidate_names
|
|
from shutil import rmtree
|
|
from atexit import register
|
|
|
|
from obitools3.dms.dms import DMS
|
|
|
|
from obitools3.apps.config import getConfiguration
|
|
from obitools3.apps.config import logger
|
|
|
|
cpdef get_temp_dir():
|
|
"""
|
|
Returns a temporary directory object specific of this instance of obitools.
|
|
|
|
This is an application function. It cannot be called out of an obi command.
|
|
It requires a valid configuration.
|
|
|
|
If the function is called several time from the same obi session, the same
|
|
directory is returned.
|
|
|
|
If the OBITMP environment variable exist, the temporary directory is created
|
|
inside this directory.
|
|
|
|
The directory is automatically destroyed at the end of the end of the process.
|
|
|
|
@return: a temporary python directory object.
|
|
"""
|
|
cdef bytes tmpdirname
|
|
cdef dict config = getConfiguration()
|
|
|
|
root = config["__root_config__"]
|
|
|
|
try:
|
|
return config[root]["tempdir"].name
|
|
except KeyError:
|
|
pass
|
|
|
|
try:
|
|
basedir=environb[b'OBITMP']
|
|
except KeyError:
|
|
basedir=None
|
|
|
|
tmp = TemporaryDirectory(dir=basedir)
|
|
|
|
config[root]["tempdir"]=tmp
|
|
|
|
return tmp.name
|
|
|
|
cpdef get_temp_dir_name():
|
|
"""
|
|
Returns the name of the temporary directory object
|
|
specific of this instance of obitools.
|
|
|
|
@return: the name of the temporary directory.
|
|
|
|
@see get_temp_dir
|
|
"""
|
|
return get_temp_dir_name().name
|
|
|
|
|
|
cpdef get_temp_dms():
|
|
|
|
cdef bytes tmpdirname # @DuplicatedSignature
|
|
cdef dict config = getConfiguration() # @DuplicatedSignature
|
|
cdef DMS tmpdms
|
|
|
|
root = config["__root_config__"]
|
|
|
|
try:
|
|
return config[root]["tempdms"]
|
|
except KeyError:
|
|
pass
|
|
|
|
tmpdirname=get_temp_dir()
|
|
|
|
tempname = join(tmpdirname,
|
|
b"obi.%d.%s" % (getpid(),
|
|
tobytes(next(_get_candidate_names())))
|
|
)
|
|
|
|
tmpdms = DMS.new(tempname)
|
|
|
|
config[root]["tempdms"]=tmpdms
|
|
|
|
return tmpdms
|
|
|
|
|