Synchronize Etiquette and YCDL.
This commit is contained in:
		
							parent
							
								
									18e1849fcf
								
							
						
					
					
						commit
						28181428be
					
				
					 4 changed files with 42 additions and 25 deletions
				
			
		|  | @ -1710,7 +1710,8 @@ class PhotoDB( | ||||||
|             existing_database = self.database_filepath.exists |             existing_database = self.database_filepath.exists | ||||||
| 
 | 
 | ||||||
|             if not existing_database and not create: |             if not existing_database and not create: | ||||||
|                 raise FileNotFoundError(f'"{self.data_directory}" does not exist and create is off.') |                 msg = f'"{self.database_filepath.absolute_path}" does not exist and create is off.' | ||||||
|  |                 raise FileNotFoundError(msg) | ||||||
| 
 | 
 | ||||||
|             os.makedirs(self.data_directory.absolute_path, exist_ok=True) |             os.makedirs(self.data_directory.absolute_path, exist_ok=True) | ||||||
|             self.sql = sqlite3.connect(self.database_filepath.absolute_path) |             self.sql = sqlite3.connect(self.database_filepath.absolute_path) | ||||||
|  |  | ||||||
|  | @ -1,3 +1,7 @@ | ||||||
|  | ''' | ||||||
|  | Do not execute this file directly. | ||||||
|  | Use etiquette_flask_launch.py to start the server with gevent. | ||||||
|  | ''' | ||||||
| import flask; from flask import request | import flask; from flask import request | ||||||
| import gzip | import gzip | ||||||
| import io | import io | ||||||
|  | @ -15,7 +19,7 @@ from . import jinja_filters | ||||||
| from . import jsonify | from . import jsonify | ||||||
| from . import sessions | from . import sessions | ||||||
| 
 | 
 | ||||||
| # Runtime init ##################################################################################### | # Flask init ####################################################################################### | ||||||
| 
 | 
 | ||||||
| root_dir = pathclass.Path(__file__).parent.parent | root_dir = pathclass.Path(__file__).parent.parent | ||||||
| 
 | 
 | ||||||
|  | @ -39,8 +43,6 @@ site.jinja_env.lstrip_blocks = True | ||||||
| jinja_filters.register_all(site) | jinja_filters.register_all(site) | ||||||
| site.debug = True | site.debug = True | ||||||
| 
 | 
 | ||||||
| P = etiquette.photodb.PhotoDB() |  | ||||||
| 
 |  | ||||||
| session_manager = sessions.SessionManager(maxlen=10000) | session_manager = sessions.SessionManager(maxlen=10000) | ||||||
| file_cache_manager = caching.FileCacheManager( | file_cache_manager = caching.FileCacheManager( | ||||||
|     maxlen=10000, |     maxlen=10000, | ||||||
|  | @ -86,7 +88,7 @@ def after_request(response): | ||||||
|     bail = bail or response.status_code < 200 |     bail = bail or response.status_code < 200 | ||||||
|     bail = bail or response.status_code >= 300 |     bail = bail or response.status_code >= 300 | ||||||
|     bail = bail or response.direct_passthrough |     bail = bail or response.direct_passthrough | ||||||
|     bail = bail or int(response.headers.get('Content-Length', gzip_minimum_size)) > gzip_maximum_size |     bail = bail or int(response.headers.get('Content-Length', 0)) > gzip_maximum_size | ||||||
|     bail = bail or len(response.get_data()) < gzip_minimum_size |     bail = bail or len(response.get_data()) < gzip_minimum_size | ||||||
|     bail = bail or 'gzip' not in accept_encoding.lower() |     bail = bail or 'gzip' not in accept_encoding.lower() | ||||||
|     bail = bail or 'Content-Encoding' in response.headers |     bail = bail or 'Content-Encoding' in response.headers | ||||||
|  | @ -208,6 +210,8 @@ def send_file(filepath, override_mimetype=None): | ||||||
|     if not filepath.is_file: |     if not filepath.is_file: | ||||||
|         flask.abort(404) |         flask.abort(404) | ||||||
| 
 | 
 | ||||||
|  |     file_size = filepath.size | ||||||
|  | 
 | ||||||
|     headers = file_cache_manager.matches(request=request, filepath=filepath) |     headers = file_cache_manager.matches(request=request, filepath=filepath) | ||||||
|     if headers: |     if headers: | ||||||
|         response = flask.Response(status=304, headers=headers) |         response = flask.Response(status=304, headers=headers) | ||||||
|  | @ -240,21 +244,21 @@ def send_file(filepath, override_mimetype=None): | ||||||
|         if range_min is None: |         if range_min is None: | ||||||
|             range_min = 0 |             range_min = 0 | ||||||
|         if range_max is None: |         if range_max is None: | ||||||
|             range_max = filepath.size |             range_max = file_size | ||||||
| 
 | 
 | ||||||
|         # because ranges are 0-indexed |         # because ranges are 0-indexed | ||||||
|         range_max = min(range_max, filepath.size - 1) |         range_max = min(range_max, file_size - 1) | ||||||
|         range_min = max(range_min, 0) |         range_min = max(range_min, 0) | ||||||
| 
 | 
 | ||||||
|         range_header = 'bytes {min}-{max}/{outof}'.format( |         range_header = 'bytes {min}-{max}/{outof}'.format( | ||||||
|             min=range_min, |             min=range_min, | ||||||
|             max=range_max, |             max=range_max, | ||||||
|             outof=filepath.size, |             outof=file_size, | ||||||
|         ) |         ) | ||||||
|         outgoing_headers['Content-Range'] = range_header |         outgoing_headers['Content-Range'] = range_header | ||||||
|         status = 206 |         status = 206 | ||||||
|     else: |     else: | ||||||
|         range_max = filepath.size - 1 |         range_max = file_size - 1 | ||||||
|         range_min = 0 |         range_min = 0 | ||||||
|         status = 200 |         status = 200 | ||||||
| 
 | 
 | ||||||
|  | @ -280,3 +284,9 @@ def send_file(filepath, override_mimetype=None): | ||||||
|         headers=outgoing_headers, |         headers=outgoing_headers, | ||||||
|     ) |     ) | ||||||
|     return response |     return response | ||||||
|  | 
 | ||||||
|  | #################################################################################################### | ||||||
|  | 
 | ||||||
|  | def init_photodb(*args, **kwargs): | ||||||
|  |     global P | ||||||
|  |     P = etiquette.photodb.PhotoDB(*args, **kwargs) | ||||||
|  |  | ||||||
|  | @ -3,6 +3,8 @@ import jinja2.filters | ||||||
| 
 | 
 | ||||||
| import voussoirkit.bytestring | import voussoirkit.bytestring | ||||||
| 
 | 
 | ||||||
|  | #################################################################################################### | ||||||
|  | 
 | ||||||
| filter_functions = [] | filter_functions = [] | ||||||
| global_functions = [] | global_functions = [] | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,51 +16,55 @@ import argparse | ||||||
| import gevent.pywsgi | import gevent.pywsgi | ||||||
| import sys | import sys | ||||||
| 
 | 
 | ||||||
|  | from voussoirkit import pathclass | ||||||
|  | 
 | ||||||
| import etiquette_flask_entrypoint | import etiquette_flask_entrypoint | ||||||
| 
 | 
 | ||||||
| site = etiquette_flask_entrypoint.site | HTTPS_DIR = pathclass.Path(__file__).parent.with_child('https') | ||||||
| 
 |  | ||||||
| def run(port=None, use_https=None): |  | ||||||
|     if port is None: |  | ||||||
|         port = 5000 |  | ||||||
|     else: |  | ||||||
|         port = int(port) |  | ||||||
| 
 | 
 | ||||||
|  | def etiquette_flask_launch(create, port, use_https): | ||||||
|     if use_https is None: |     if use_https is None: | ||||||
|         use_https = port == 443 |         use_https = port == 443 | ||||||
| 
 | 
 | ||||||
|     if use_https: |     if use_https: | ||||||
|         http = gevent.pywsgi.WSGIServer( |         http = gevent.pywsgi.WSGIServer( | ||||||
|             listener=('0.0.0.0', port), |             listener=('0.0.0.0', port), | ||||||
|             application=site, |             application=etiquette_flask_entrypoint.site, | ||||||
|             keyfile='D:\\git\\etiquette\\frontends\\etiquette_flask\\https\\etiquette.key', |             keyfile=HTTPS_DIR.with_child('etiquette.key').absolute_path, | ||||||
|             certfile='D:\\git\\etiquette\\frontends\\etiquette_flask\\https\\etiquette.crt', |             certfile=HTTPS_DIR.with_child('etiquette.crt').absolute_path, | ||||||
|         ) |         ) | ||||||
|     else: |     else: | ||||||
|         http = gevent.pywsgi.WSGIServer( |         http = gevent.pywsgi.WSGIServer( | ||||||
|             listener=('0.0.0.0', port), |             listener=('0.0.0.0', port), | ||||||
|             application=site, |             application=etiquette_flask_entrypoint.site, | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|  |     etiquette_flask_entrypoint.backend.common.init_photodb(create=create) | ||||||
|  | 
 | ||||||
|     message = f'Starting server on port {port}' |     message = f'Starting server on port {port}' | ||||||
|     if use_https: |     if use_https: | ||||||
|         message += ' (https)' |         message += ' (https)' | ||||||
|     print(message) |     print(message) | ||||||
|  | 
 | ||||||
|     try: |     try: | ||||||
|         http.serve_forever() |         http.serve_forever() | ||||||
|     except KeyboardInterrupt: |     except KeyboardInterrupt: | ||||||
|         pass |         pass | ||||||
|     return 0 |  | ||||||
| 
 | 
 | ||||||
| def run_argparse(args): | def etiquette_flask_launch_argparse(args): | ||||||
|     return run(port=args.port, use_https=args.use_https) |     return etiquette_flask_launch( | ||||||
|  |         create=args.create, | ||||||
|  |         port=args.port, | ||||||
|  |         use_https=args.use_https, | ||||||
|  |     ) | ||||||
| 
 | 
 | ||||||
| def main(argv): | def main(argv): | ||||||
|     parser = argparse.ArgumentParser() |     parser = argparse.ArgumentParser() | ||||||
| 
 | 
 | ||||||
|     parser.add_argument(dest='port', nargs='?', default=None) |     parser.add_argument('port', nargs='?', type=int, default=5000) | ||||||
|  |     parser.add_argument('--dont_create', '--dont-create', '--no-create', dest='create', action='store_false', default=True) | ||||||
|     parser.add_argument('--https', dest='use_https', action='store_true', default=None) |     parser.add_argument('--https', dest='use_https', action='store_true', default=None) | ||||||
|     parser.set_defaults(func=run_argparse) |     parser.set_defaults(func=etiquette_flask_launch_argparse) | ||||||
| 
 | 
 | ||||||
|     args = parser.parse_args(argv) |     args = parser.parse_args(argv) | ||||||
|     return args.func(args) |     return args.func(args) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue