re-implement auto-updates
This commit is contained in:
		
							parent
							
								
									72c33a2348
								
							
						
					
					
						commit
						674cad07ea
					
				|  | @ -6,34 +6,37 @@ import shlex | |||
| import subprocess | ||||
| import sys | ||||
| import urllib.parse | ||||
| 
 | ||||
| import importlib | ||||
| import Items | ||||
| import Regions | ||||
| 
 | ||||
| while True: | ||||
|     try: | ||||
|         import aioconsole | ||||
|         break | ||||
|     except ImportError: | ||||
|         aioconsole = None | ||||
|         print('Required python module "aioconsole" not found, press enter to install it') | ||||
|         input() | ||||
|         subprocess.call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'aioconsole']) | ||||
| def update_command(): | ||||
|     subprocess.call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt', '--upgrade']) | ||||
| 
 | ||||
| while True: | ||||
|     try: | ||||
|         import websockets | ||||
|         break | ||||
|     except ImportError: | ||||
|         websockets = None | ||||
|         print('Required python module "websockets" not found, press enter to install it') | ||||
|         input() | ||||
|         subprocess.call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'websockets']) | ||||
| with open('requirements.txt') as requirementsfile: | ||||
|     for line in requirementsfile.readlines(): | ||||
|         module, remoteversion = line.split(">=") | ||||
|         try: | ||||
|             module = importlib.import_module(module) | ||||
|         except: | ||||
|             import traceback | ||||
|             traceback.print_exc() | ||||
|             input(f'Required python module {module} not found, press enter to install it') | ||||
|             update_command() | ||||
|         else: | ||||
|             if hasattr(module, "__version__"): | ||||
|                 module_version = module.__version__ | ||||
|                 module = module.__name__ #also unloads the module to make it writable | ||||
|                 if type(module_version) == str: | ||||
|                     module_version = tuple(int(part.strip()) for part in module_version.split(".")) | ||||
|                 remoteversion = tuple(int(part.strip()) for part in remoteversion.split(".")) | ||||
|                 if module_version < remoteversion: | ||||
|                     input(f'Required python module {module} is outdated ({module_version}<{remoteversion}), press enter to upgrade it') | ||||
|                     update_command() | ||||
| 
 | ||||
| try: | ||||
|     import colorama | ||||
| except ImportError: | ||||
|     colorama = None | ||||
| import aioconsole | ||||
| import websockets | ||||
| import colorama | ||||
| 
 | ||||
| class ReceivedItem: | ||||
|     def __init__(self, item, location, player): | ||||
|  |  | |||
							
								
								
									
										16
									
								
								README.md
								
								
								
								
							
							
						
						
									
										16
									
								
								README.md
								
								
								
								
							|  | @ -9,15 +9,15 @@ Additions/Changes | |||
| 
 | ||||
| MultiMystery.py | ||||
|  * Allows you to generate a Multiworld with individual player mystery weights. Since weights can also be set to 100%, this also allows for individual settings for each player in a regular multiworld. | ||||
|  * Basis is a .yaml file that sets these weights. You can find an easy.yaml in this project folder to get started. | ||||
| Basis is a .yaml file that sets these weights. You can find an easy.yaml in this project folder to get started. | ||||
|  * Additional instructions and settings are at the start of the file. Open with a text editor. | ||||
|   | ||||
|  MultiServer.py | ||||
|   * Added a try/except to prevent malformed console commands from crashing the entire server | ||||
|   * Added /hint command on the server (use just /hint for help on command) | ||||
|   * can be used as /hint Playername Itemname | ||||
|   * All Itemnames can be found in Items.py starting at line 25 | ||||
|   * example   | ||||
| can be used as /hint Playername Itemname | ||||
| All Itemnames can be found in Items.py starting at line 25 | ||||
| example:   | ||||
| /hint Berserker Progressive Sword   | ||||
| Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Hype Cave - Top in ahhdurr's World   | ||||
| Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Blind's Hideout - Far Right in Schulzer's World   | ||||
|  | @ -27,8 +27,12 @@ Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Ganons T | |||
| Mystery.py | ||||
|  * Fix fast_ganon not working at all currently | ||||
|  * Defaults to generating a non-race ROM (Bonta's only makes race ROMs at this time) | ||||
|  * If a race ROM is desired, pass --create-race as argument to it | ||||
| If a race ROM is desired, pass --create-race as argument to it | ||||
|  * When an error is generated due to a broken .yaml file, it now mentions in the error trace which file it is | ||||
|   | ||||
| MultiClient.py | ||||
|  * Update websockets if it is too old, preventing a crash when trying to connect | ||||
|  * Update modules if they are too old, preventing a crash when trying to connect among potential other issues | ||||
|  * Autoinstall missing modules | ||||
| 
 | ||||
| Project | ||||
|  * Allow newer versions of modules than specified, as they will *usually* not break compatibility | ||||
|  | @ -1,3 +1,3 @@ | |||
| aioconsole==0.1.15 | ||||
| colorama==0.4.3 | ||||
| websockets==8.1 | ||||
| aioconsole>=0.1.15 | ||||
| colorama>=0.4.3 | ||||
| websockets>=8.1 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue