re-implement auto-updates
This commit is contained in:
		
							parent
							
								
									72c33a2348
								
							
						
					
					
						commit
						674cad07ea
					
				|  | @ -6,34 +6,37 @@ import shlex | ||||||
| import subprocess | import subprocess | ||||||
| import sys | import sys | ||||||
| import urllib.parse | import urllib.parse | ||||||
| 
 | import importlib | ||||||
| import Items | import Items | ||||||
| import Regions | import Regions | ||||||
| 
 | 
 | ||||||
| while True: | def update_command(): | ||||||
|     try: |     subprocess.call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt', '--upgrade']) | ||||||
|         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']) |  | ||||||
| 
 | 
 | ||||||
| while True: | with open('requirements.txt') as requirementsfile: | ||||||
|     try: |     for line in requirementsfile.readlines(): | ||||||
|         import websockets |         module, remoteversion = line.split(">=") | ||||||
|         break |         try: | ||||||
|     except ImportError: |             module = importlib.import_module(module) | ||||||
|         websockets = None |         except: | ||||||
|         print('Required python module "websockets" not found, press enter to install it') |             import traceback | ||||||
|         input() |             traceback.print_exc() | ||||||
|         subprocess.call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'websockets']) |             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 aioconsole | ||||||
|     import colorama | import websockets | ||||||
| except ImportError: | import colorama | ||||||
|     colorama = None |  | ||||||
| 
 | 
 | ||||||
| class ReceivedItem: | class ReceivedItem: | ||||||
|     def __init__(self, item, location, player): |     def __init__(self, item, location, player): | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								README.md
								
								
								
								
							
							
						
						
									
										16
									
								
								README.md
								
								
								
								
							|  | @ -9,15 +9,15 @@ Additions/Changes | ||||||
| 
 | 
 | ||||||
| MultiMystery.py | 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. |  * 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. |  * Additional instructions and settings are at the start of the file. Open with a text editor. | ||||||
|   |   | ||||||
|  MultiServer.py |  MultiServer.py | ||||||
|   * Added a try/except to prevent malformed console commands from crashing the entire server |   * 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) |   * Added /hint command on the server (use just /hint for help on command) | ||||||
|   * can be used as /hint Playername Itemname | can be used as /hint Playername Itemname | ||||||
|   * All Itemnames can be found in Items.py starting at line 25 | All Itemnames can be found in Items.py starting at line 25 | ||||||
|   * example   | example:   | ||||||
| /hint Berserker Progressive Sword   | /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 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   | 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 | Mystery.py | ||||||
|  * Fix fast_ganon not working at all currently |  * Fix fast_ganon not working at all currently | ||||||
|  * Defaults to generating a non-race ROM (Bonta's only makes race ROMs at this time) |  * 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 |  * When an error is generated due to a broken .yaml file, it now mentions in the error trace which file it is | ||||||
|   |   | ||||||
| MultiClient.py | 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 | aioconsole>=0.1.15 | ||||||
| colorama==0.4.3 | colorama>=0.4.3 | ||||||
| websockets==8.1 | websockets>=8.1 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue