micropython-lib/python-stdlib/tempfile/tempfile.py

60 wiersze
1.3 KiB
Python

import errno
import os
import random
import shutil
_ascii_letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
def _get_candidate_name(size=8):
return "".join(random.choice(_ascii_letters) for _ in range(size))
def _sanitize_inputs(suffix, prefix, dir):
if dir is None:
dir = "/tmp"
if suffix is None:
suffix = ""
if prefix is None:
prefix = ""
return suffix, prefix, dir
def _try(action, *args, **kwargs):
try:
action(*args, **kwargs)
return True
except OSError as e:
if e.errno != errno.EEXIST:
raise e
return False
def mkdtemp(suffix=None, prefix=None, dir=None):
suffix, prefix, dir = _sanitize_inputs(suffix, prefix, dir)
_try(os.mkdir, dir)
while True:
name = _get_candidate_name()
file = dir + "/" + prefix + name + suffix
if _try(os.mkdir, file):
return file
class TemporaryDirectory:
def __init__(self, suffix=None, prefix=None, dir=None):
self.name = mkdtemp(suffix, prefix, dir)
def __repr__(self):
return "<{} {!r}>".format(self.__class__.__name__, self.name)
def __enter__(self):
return self.name
def __exit__(self, exc, value, tb):
self.cleanup()
def cleanup(self):
_try(shutil.rmtree, self.name)