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: | ||||
|             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): | ||||
|         ''' | ||||
|         Remove the key and return its value, or raise KeyError. | ||||
|  |  | |||
|  | @ -20,10 +20,10 @@ class DotDict: | |||
|     def __getattr__(self, key): | ||||
|         try: | ||||
|             return self.__dict__[key] | ||||
|         except KeyError: | ||||
|         except KeyError as exc: | ||||
|             if self.__default is not NO_DEFAULT: | ||||
|                 return self.__default | ||||
|             raise | ||||
|             raise AttributeError from exc | ||||
| 
 | ||||
|     def __setattr__(self, key, value): | ||||
|         self.__dict__[key] = value | ||||
|  |  | |||
|  | @ -94,6 +94,9 @@ class Extension: | |||
|     def __hash__(self): | ||||
|         return hash(self.ext) | ||||
| 
 | ||||
|     def __len__(self): | ||||
|         return len(self.ext) | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         return f'Extension({repr(self.ext)})' | ||||
| 
 | ||||
|  | @ -434,6 +437,14 @@ class Path: | |||
|         with self.open(mode, **kwargs) as handle: | ||||
|             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): | ||||
|         ''' | ||||
|         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) | ||||
|     else: | ||||
|         formatter = Formatter('[{asctime}.{msecs:03.0f}] {levelname}:{name}:{message}', style='{', datefmt=datefmt) | ||||
|     formatter.default_msec_format = '%s.%03d' | ||||
|     handler.setFormatter(formatter) | ||||
|     handler.setLevel(level) | ||||
|     root.addHandler(handler) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue