diff --git a/addons/source-python/packages/source-python/core/command/__init__.py b/addons/source-python/packages/source-python/core/command/__init__.py index c26541901..0edc4047f 100644 --- a/addons/source-python/packages/source-python/core/command/__init__.py +++ b/addons/source-python/packages/source-python/core/command/__init__.py @@ -17,6 +17,7 @@ # Source.Python Imports # Commands +from commands.typed import TypedClientCommand from commands.typed import TypedServerCommand # Core from core import core_logger @@ -99,18 +100,21 @@ def print_credits(self): # >> sp # ============================================================================= @core_command.server_sub_command(['delay']) +@core_command.client_sub_command(['delay'], 'sp.delay') def _sp_delay(command_info, delay:float, command, *args): """Execute a command after a given delay.""" Delay(delay, queue_command_string, (command + ' ' + ' '.join(args), )) @core_command.server_sub_command(['credits']) +@core_command.client_sub_command(['credits'], 'sp.credits') def _sp_credits(command_info): """List all credits for Source.Python.""" core_command.print_credits() @core_command.server_sub_command(['help']) +@core_command.client_sub_command(['help'], 'sp.help') def _sp_help(command_info, command=None, *server_sub_commands): """Print all sp sub-commands or help for a specific command.""" if command is None: @@ -131,6 +135,7 @@ def _sp_help(command_info, command=None, *server_sub_commands): @core_command.server_sub_command(['info']) +@core_command.client_sub_command(['info'], 'sp.info') def print_info(info): """Print information about OS, SP and installed plugins.""" result = '\nDate : {}'.format(datetime.utcnow()) @@ -162,6 +167,7 @@ def print_info(info): @core_command.server_sub_command(['update']) +@core_command.client_sub_command(['update'], 'sp.update') def update_sp(info): """Update Source.Python to the latest version. A restart of the server is required. @@ -169,12 +175,14 @@ def update_sp(info): if not is_unversioned() and VERSION >= get_last_successful_build_number(): core_command_logger.log_message('No new version available.') return - + do_full_update() - + # ============================================================================= # >> DESCRIPTION # ============================================================================= TypedServerCommand.parser.set_node_description( 'sp', 'Source.Python main command.') +TypedClientCommand.parser.set_node_description( + 'sp', 'Source.Python main command.') diff --git a/addons/source-python/packages/source-python/core/command/auth.py b/addons/source-python/packages/source-python/core/command/auth.py index e8523760e..caa2c36ad 100644 --- a/addons/source-python/packages/source-python/core/command/auth.py +++ b/addons/source-python/packages/source-python/core/command/auth.py @@ -10,6 +10,7 @@ from auth.manager import auth_manager # Commands from commands.typed import filter_str +from commands.typed import TypedClientCommand from commands.typed import TypedServerCommand # Core from core.command import core_command @@ -28,6 +29,9 @@ # >> sp auth backend # ============================================================================= @core_command.server_sub_command(['auth', 'backend', 'set']) +@core_command.client_sub_command( + ['auth', 'backend', 'set'], 'sp.auth.backend.set' +) def _sp_auth_load(command_info, backend): """Set the active backend.""" try: @@ -36,9 +40,13 @@ def _sp_auth_load(command_info, backend): logger.log_message('Backend "{}" does not exist.'.format(backend)) else: logger.log_message( - 'Backend "{}" has been loaded sucessfully!'.format(backend)) + 'Backend "{}" has been loaded successfully!'.format(backend)) + @core_command.server_sub_command(['auth', 'backend', 'list']) +@core_command.client_sub_command( + ['auth', 'backend', 'list'], 'sp.auth.backend.list' +) def _sp_auth_list(command_info): """List all available backends and marks the active backend.""" if not auth_manager: @@ -58,6 +66,9 @@ def _sp_auth_list(command_info): # >> sp auth permission player # ============================================================================= @core_command.server_sub_command(['auth', 'permission', 'player', 'add']) +@core_command.client_sub_command( + ['auth', 'permission', 'player', 'add'], 'sp.auth.perm.player.add' +) def _sp_auth_permission_player_add( command_info, players:filter_str, permission, server_id:int=None): """Grant a permission to players.""" @@ -72,7 +83,11 @@ def _sp_auth_permission_player_add( logger.log_message('Granted permission "{}" to {}.'.format( permission, player.name)) + @core_command.server_sub_command(['auth', 'permission', 'player', 'remove']) +@core_command.client_sub_command( + ['auth', 'permission', 'player', 'remove'], 'sp.auth.perm.player.remove' +) def _sp_auth_permission_player_remove( command_info, players:filter_str, permission, server_id:int=None): """Remove a permission from players.""" @@ -88,9 +103,14 @@ def _sp_auth_permission_player_remove( 'Removed permission "{}" from {}.'.format( permission, player.name)) -@core_command.server_sub_command([ - 'auth', 'permission', 'player', 'add_parent' -]) + +@core_command.server_sub_command( + ['auth', 'permission', 'player', 'add_parent'] +) +@core_command.client_sub_command( + ['auth', 'permission', 'player', 'add_parent'], + 'sp.auth.perm.player.parent.add' +) def _sp_auth_permission_player_add_parent( command_info, players:filter_str, parent): """Add a parent to players.""" @@ -105,9 +125,14 @@ def _sp_auth_permission_player_add_parent( logger.log_message( 'Added parent "{}" to {}.'.format(parent, player.name)) -@core_command.server_sub_command([ - 'auth', 'permission', 'player', 'remove_parent' -]) + +@core_command.server_sub_command( + ['auth', 'permission', 'player', 'remove_parent'] +) +@core_command.client_sub_command( + ['auth', 'permission', 'player', 'remove_parent'], + 'sp.auth.perm.player.parent.remove' +) def _sp_auth_permission_player_remove_parent( command_info, players:filter_str, parent): """Remove a parent from players.""" @@ -122,7 +147,11 @@ def _sp_auth_permission_player_remove_parent( logger.log_message( 'Removed parent "{}" from {}.'.format(parent, player.name)) + @core_command.server_sub_command(['auth', 'permission', 'player', 'test']) +@core_command.client_sub_command( + ['auth', 'permission', 'player', 'test'], 'sp.auth.perm.player.test' +) def _sp_auth_permission_player_test(command_info, permission): """Test which players are granted a permission.""" logger.log_message( @@ -149,6 +178,9 @@ def _sp_auth_permission_player_test(command_info, permission): # >> sp auth permission parent # ============================================================================= @core_command.server_sub_command(['auth', 'permission', 'parent', 'add']) +@core_command.client_sub_command( + ['auth', 'permission', 'parent', 'add'], 'sp.auth.perm.parent.add' +) def _sp_auth_permission_parent_add( command_info, parent, permission, server_id:int=None): """Add a permission to a parent.""" @@ -156,7 +188,11 @@ def _sp_auth_permission_parent_add( logger.log_message( 'Added permission "{}" to parent "{}".'.format(permission, parent)) + @core_command.server_sub_command(['auth', 'permission', 'parent', 'remove']) +@core_command.client_sub_command( + ['auth', 'permission', 'parent', 'remove'], 'sp.auth.perm.parent.remove' +) def _sp_auth_permission_parent_remove( command_info, parent, permission, server_id:int=None): """Remove a permission from a parent.""" @@ -164,9 +200,14 @@ def _sp_auth_permission_parent_remove( logger.log_message('Removed permission "{}" from parent "{}".'.format( permission, parent)) -@core_command.server_sub_command([ - 'auth', 'permission', 'parent', 'add_parent' -]) + +@core_command.server_sub_command( + ['auth', 'permission', 'parent', 'add_parent'] +) +@core_command.client_sub_command( + ['auth', 'permission', 'parent', 'add_parent'], + 'sp.auth.perm.parent.parent.add' +) def _sp_auth_permission_parent_add_parent( command_info, parent, parent_to_add): """Add a parent to a parent.""" @@ -174,9 +215,14 @@ def _sp_auth_permission_parent_add_parent( logger.log_message( 'Added parent "{}" to parent "{}".'.format(parent_to_add, parent)) -@core_command.server_sub_command([ - 'auth', 'permission', 'parent', 'remove_parent' -]) + +@core_command.server_sub_command( + ['auth', 'permission', 'parent', 'remove_parent'] +) +@core_command.client_sub_command( + ['auth', 'permission', 'parent', 'remove_parent'], + 'sp.auth.perm.parent.parent.remove' +) def _sp_auth_permission_parent_remove_parent( command_info, parent, parent_to_remove): """Remove a parent from a parent.""" @@ -186,9 +232,11 @@ def _sp_auth_permission_parent_remove_parent( 'Removed parent "{}" from parent "{}".'.format( parent_to_remove, parent)) -@core_command.server_sub_command([ - 'auth', 'permission', 'parent', 'list' -]) + +@core_command.server_sub_command(['auth', 'permission', 'parent', 'list']) +@core_command.client_sub_command( + ['auth', 'permission', 'parent', 'list'], 'sp.auth.perm.parent.list' +) def _sp_auth_permission_parent_list( command_info, name=None): """List all parents and permissions of a given parent or all parents.""" @@ -215,19 +263,34 @@ def _sp_auth_permission_parent_list( TypedServerCommand.parser.set_node_description( ['sp', 'auth'], 'Authorization specific commands.') +TypedClientCommand.parser.set_node_description( + ['sp', 'auth'], + 'Authorization specific commands.') TypedServerCommand.parser.set_node_description( ['sp', 'auth', 'backend'], 'Authorization backend specific commands.') +TypedClientCommand.parser.set_node_description( + ['sp', 'auth', 'backend'], + 'Authorization backend specific commands.') TypedServerCommand.parser.set_node_description( ['sp', 'auth', 'permission'], 'Commands to modify permissions.') +TypedClientCommand.parser.set_node_description( + ['sp', 'auth', 'permission'], + 'Commands to modify permissions.') TypedServerCommand.parser.set_node_description( ['sp', 'auth', 'permission', 'parent'], 'Commands to modify parent permissions.') +TypedClientCommand.parser.set_node_description( + ['sp', 'auth', 'permission', 'parent'], + 'Commands to modify parent permissions.') TypedServerCommand.parser.set_node_description( ['sp', 'auth', 'permission', 'player'], 'Commands to modify player permissions.') +TypedClientCommand.parser.set_node_description( + ['sp', 'auth', 'permission', 'player'], + 'Commands to modify player permissions.') diff --git a/addons/source-python/packages/source-python/core/command/docs.py b/addons/source-python/packages/source-python/core/command/docs.py index ce37627a3..5c444e71d 100644 --- a/addons/source-python/packages/source-python/core/command/docs.py +++ b/addons/source-python/packages/source-python/core/command/docs.py @@ -13,6 +13,7 @@ # Autodoc from autodoc import SphinxProject # Commands +from commands.typed import TypedClientCommand from commands.typed import TypedServerCommand # Core from core.command import core_command @@ -41,18 +42,21 @@ # >> sp docs create/generate/build # ============================================================================= @core_command.server_sub_command(['docs', 'create']) +@core_command.client_sub_command(['docs', 'create'], 'sp.docs.create') def _sp_docs_create(command_info, package): """Create a Sphinx project.""" _create_sphinx_project(package) @core_command.server_sub_command(['docs', 'generate']) +@core_command.client_sub_command(['docs', 'generate'], 'sp.docs.generate') def _sp_docs_generate(command_info, package): """Generate a Sphinx project.""" _generate_sphinx_project(package) @core_command.server_sub_command(['docs', 'build']) +@core_command.client_sub_command(['docs', 'build'], 'sp.docs.build') def _sp_docs_build(command_info, package): """Build a Sphinx project.""" _build_sphinx_project(package) @@ -448,3 +452,5 @@ def is_plugin(package): # ============================================================================= TypedServerCommand.parser.set_node_description( ['sp', 'docs'], 'Documentation specific commands.') +TypedClientCommand.parser.set_node_description( + ['sp', 'docs'], 'Documentation specific commands.') diff --git a/addons/source-python/packages/source-python/core/command/dump.py b/addons/source-python/packages/source-python/core/command/dump.py index 38837acf9..bfe9efaf1 100644 --- a/addons/source-python/packages/source-python/core/command/dump.py +++ b/addons/source-python/packages/source-python/core/command/dump.py @@ -7,6 +7,7 @@ # ============================================================================= # Source.Python Imports # Commands +from commands.typed import TypedClientCommand from commands.typed import TypedServerCommand # Core from core import dumps @@ -18,31 +19,42 @@ # ============================================================================= #: .. todo:: Make file_name optional @core_command.server_sub_command(['dump', 'class_info']) +@core_command.client_sub_command(['dump', 'class_info'], 'sp.dump.class') def _sp_dump_class_info(command_info, file_name): """Dump class info.""" dumps.dump_class_info(file_name) + @core_command.server_sub_command(['dump', 'convars']) +@core_command.client_sub_command(['dump', 'convars'], 'sp.dump.convars') def _sp_dump_convars(command_info, file_name): """Dump convars.""" dumps.dump_convars(file_name) + @core_command.server_sub_command(['dump', 'datamaps']) +@core_command.client_sub_command(['dump', 'datamaps'], 'sp.dump.datamaps') def _sp_dump_datamaps(command_info, file_name): """Dump datamaps.""" dumps.dump_datamaps(file_name) + @core_command.server_sub_command(['dump', 'server_classes']) +@core_command.client_sub_command(['dump', 'server_classes'], 'sp.dump.server') def _sp_dump_server_classes(command_info, file_name): """Dump server classes.""" dumps.dump_server_classes(file_name) + @core_command.server_sub_command(['dump', 'string_tables']) +@core_command.client_sub_command(['dump', 'string_tables'], 'sp.dump.string') def _sp_dump_string_tables(command_info, file_name): """Dump string tables.""" dumps.dump_string_tables(file_name) + @core_command.server_sub_command(['dump', 'weapon_scripts']) +@core_command.client_sub_command(['dump', 'weapon_scripts'], 'sp.dump.weapon') def _sp_dump_weapon_scripts(command_info, file_name): """Dump weapon scripts.""" dumps.dump_weapon_scripts(file_name) @@ -53,3 +65,5 @@ def _sp_dump_weapon_scripts(command_info, file_name): # ============================================================================= TypedServerCommand.parser.set_node_description( ['sp', 'dump'], 'Dump various data to files.') +TypedClientCommand.parser.set_node_description( + ['sp', 'dump'], 'Dump various data to files.') diff --git a/addons/source-python/packages/source-python/core/command/plugin.py b/addons/source-python/packages/source-python/core/command/plugin.py index 0c3928411..35cbf98d4 100644 --- a/addons/source-python/packages/source-python/core/command/plugin.py +++ b/addons/source-python/packages/source-python/core/command/plugin.py @@ -7,6 +7,7 @@ # ============================================================================= # Source.Python Imports # Commands +from commands.typed import TypedClientCommand from commands.typed import TypedServerCommand # Core from core.command import core_command @@ -23,21 +24,28 @@ # >> sp plugin # ============================================================================= @core_command.server_sub_command(['plugin', 'load']) +@core_command.client_sub_command(['plugin', 'load'], 'sp.plugin.load') def _sp_plugin_load(command_info, plugin): """Load a plugin.""" core_command.load_plugin(plugin) + @core_command.server_sub_command(['plugin', 'unload']) +@core_command.client_sub_command(['plugin', 'unload'], 'sp.plugin.unload') def _sp_plugin_unload(command_info, plugin): """Unload a plugin.""" core_command.unload_plugin(plugin) + @core_command.server_sub_command(['plugin', 'reload']) +@core_command.client_sub_command(['plugin', 'reload'], 'sp.plugin.reload') def _sp_plugin_reload(command_info, plugin): """Reload a plugin.""" core_command.reload_plugin(plugin) + @core_command.server_sub_command(['plugin', 'list']) +@core_command.client_sub_command(['plugin', 'list'], 'sp.plugin.list') def _sp_plugin_list(command_info): """List all currently loaded plugins.""" core_command.print_plugins() @@ -48,3 +56,5 @@ def _sp_plugin_list(command_info): # ============================================================================= TypedServerCommand.parser.set_node_description( ['sp', 'plugin'], 'Plugin specific commands.') +TypedClientCommand.parser.set_node_description( + ['sp', 'plugin'], 'Plugin specific commands.')