Compare commits
5 commits
acaabb7d61
...
ed3e91b5fa
| Author | SHA1 | Date | |
|---|---|---|---|
| ed3e91b5fa | |||
| 25fd738a35 | |||
| 24f74e9ee4 | |||
| e24e89a04b | |||
| 5a3e521e9a |
4 changed files with 22 additions and 3 deletions
|
|
@ -80,6 +80,15 @@ class Cache:
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return fallback
|
return fallback
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
return list(self.cache.keys())
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
return [(key, value) for (key, (value, timestamp)) in self.cache.items()]
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
return [value for (value, timestamp) in self.cache.values()]
|
||||||
|
|
||||||
def pop(self, key):
|
def pop(self, key):
|
||||||
'''
|
'''
|
||||||
Remove the key and return its value, or raise KeyError.
|
Remove the key and return its value, or raise KeyError.
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ class DotDict:
|
||||||
def __getattr__(self, key):
|
def __getattr__(self, key):
|
||||||
try:
|
try:
|
||||||
return self.__dict__[key]
|
return self.__dict__[key]
|
||||||
except KeyError:
|
except KeyError as exc:
|
||||||
if self.__default is not NO_DEFAULT:
|
if self.__default is not NO_DEFAULT:
|
||||||
return self.__default
|
return self.__default
|
||||||
raise
|
raise AttributeError from exc
|
||||||
|
|
||||||
def __setattr__(self, key, value):
|
def __setattr__(self, key, value):
|
||||||
self.__dict__[key] = value
|
self.__dict__[key] = value
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,9 @@ class Extension:
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash(self.ext)
|
return hash(self.ext)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.ext)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'Extension({repr(self.ext)})'
|
return f'Extension({repr(self.ext)})'
|
||||||
|
|
||||||
|
|
@ -434,6 +437,14 @@ class Path:
|
||||||
with self.open(mode, **kwargs) as handle:
|
with self.open(mode, **kwargs) as handle:
|
||||||
return handle.read()
|
return handle.read()
|
||||||
|
|
||||||
|
def read_generator(self, mode, chunk_size, **kwargs):
|
||||||
|
with self.open(mode, **kwargs) as handle:
|
||||||
|
while True:
|
||||||
|
chunk = handle.read(chunk_size)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
yield chunk
|
||||||
|
|
||||||
def readlines(self, mode, **kwargs):
|
def readlines(self, mode, **kwargs):
|
||||||
'''
|
'''
|
||||||
Shortcut function for opening the file handle and reading lines from it.
|
Shortcut function for opening the file handle and reading lines from it.
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,6 @@ def add_root_handler(level):
|
||||||
formatter = Formatter('[{asctime}.{msecs:03.0f}] {levelname}:{name}.{funcName}:{message}', style='{', datefmt=datefmt)
|
formatter = Formatter('[{asctime}.{msecs:03.0f}] {levelname}:{name}.{funcName}:{message}', style='{', datefmt=datefmt)
|
||||||
else:
|
else:
|
||||||
formatter = Formatter('[{asctime}.{msecs:03.0f}] {levelname}:{name}:{message}', style='{', datefmt=datefmt)
|
formatter = Formatter('[{asctime}.{msecs:03.0f}] {levelname}:{name}:{message}', style='{', datefmt=datefmt)
|
||||||
formatter.default_msec_format = '%s.%03d'
|
|
||||||
handler.setFormatter(formatter)
|
handler.setFormatter(formatter)
|
||||||
handler.setLevel(level)
|
handler.setLevel(level)
|
||||||
root.addHandler(handler)
|
root.addHandler(handler)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue