Use dotdict to remove all these ugly brackets.
This commit is contained in:
		
							parent
							
								
									af73bc580f
								
							
						
					
					
						commit
						06f26cd7b7
					
				
					 1 changed files with 14 additions and 13 deletions
				
			
		|  | @ -2,6 +2,7 @@ import flask; from flask import request | |||
| import functools | ||||
| import time | ||||
| 
 | ||||
| from voussoirkit import dotdict | ||||
| from voussoirkit import passwordy | ||||
| 
 | ||||
| import etiquette | ||||
|  | @ -31,31 +32,31 @@ def cached_endpoint(max_age): | |||
|     An example use case would be large-sized data dumps that don't need to be | ||||
|     precisely up to date every time. | ||||
|     ''' | ||||
|     state = { | ||||
|     state = dotdict.DotDict({ | ||||
|         'max_age': max_age, | ||||
|         'stored_value': None, | ||||
|         'stored_etag': None, | ||||
|         'headers': {'ETag': None, 'Cache-Control': f'max-age={max_age}'}, | ||||
|         'last_run': 0, | ||||
|     } | ||||
|     }) | ||||
| 
 | ||||
|     def wrapper(function): | ||||
|         def get_value(*args, **kwargs): | ||||
|             if state['max_age'] and (time.time() - state['last_run']) > state['max_age']: | ||||
|                 return state['stored_value'] | ||||
|             if state.max_age and (time.time() - state.last_run) > state.max_age: | ||||
|                 return state.stored_value | ||||
| 
 | ||||
|             value = function(*args, **kwargs) | ||||
|             if isinstance(value, flask.Response): | ||||
|                 if value.headers.get('Content-Type'): | ||||
|                     state['headers']['Content-Type'] = value.headers.get('Content-Type') | ||||
|                     state.headers['Content-Type'] = value.headers.get('Content-Type') | ||||
|                 value = value.response | ||||
| 
 | ||||
|             if value != state['stored_value']: | ||||
|                 state['stored_value'] = value | ||||
|                 state['stored_etag'] = passwordy.random_hex(20) | ||||
|                 state['headers']['ETag'] = state['stored_etag'] | ||||
|             if value != state.stored_value: | ||||
|                 state.stored_value = value | ||||
|                 state.stored_etag = passwordy.random_hex(20) | ||||
|                 state.headers['ETag'] = state.stored_etag | ||||
| 
 | ||||
|             state['last_run'] = time.time() | ||||
|             state.last_run = time.time() | ||||
|             return value | ||||
| 
 | ||||
|         @functools.wraps(function) | ||||
|  | @ -63,10 +64,10 @@ def cached_endpoint(max_age): | |||
|             value = get_value(*args, **kwargs) | ||||
| 
 | ||||
|             client_etag = request.headers.get('If-None-Match', None) | ||||
|             if client_etag == state['stored_etag']: | ||||
|                 response = flask.Response(status=304, headers=state['headers']) | ||||
|             if client_etag == state.stored_etag: | ||||
|                 response = flask.Response(status=304, headers=state.headers) | ||||
|             else: | ||||
|                 response = flask.Response(value, status=200, headers=state['headers']) | ||||
|                 response = flask.Response(value, status=200, headers=state.headers) | ||||
| 
 | ||||
|             return response | ||||
|         return wrapped | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue