mirror of
				https://github.com/avatao-content/baseimage-tutorial-framework
				synced 2025-10-31 19:12:55 +00:00 
			
		
		
		
	Implement SourceCodeEventHandler support for multiple files
This commit is contained in:
		| @@ -4,6 +4,6 @@ from tornado.ioloop import IOLoop | |||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     anchor_webide = SourceCodeEventHandler('anchor_webide', 'login_component.py', 'login') |     anchor_webide = SourceCodeEventHandler('anchor_webide', 'login_projectdir', 'login') | ||||||
|     anchor_terminado = TerminadoEventHandler('anchor_terminado', 'terminado') |     anchor_terminado = TerminadoEventHandler('anchor_terminado', 'terminado') | ||||||
|     IOLoop.instance().start() |     IOLoop.instance().start() | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| from shutil import copy, rmtree, copytree | from shutil import copy, rmtree, copytree | ||||||
| from os.path import splitext, isfile, join | from os.path import splitext, isfile, join, basename | ||||||
| from glob import glob | from glob import glob | ||||||
|  |  | ||||||
| from tfw.util import SupervisorMixin | from tfw.util import SupervisorMixin | ||||||
| @@ -15,11 +15,11 @@ class FileManager: | |||||||
|         self._sourcedir = source_directory |         self._sourcedir = source_directory | ||||||
|         self._workdir = working_directory |         self._workdir = working_directory | ||||||
|         self._reload_files() |         self._reload_files() | ||||||
|         self.filename = selected_file or self.files[0] |         self.filename = selected_file or basename(self.files[0]) | ||||||
|         self.language = map_file_extension_to_language(self.filename) |         self.language = map_file_extension_to_language(self.filename) | ||||||
|  |  | ||||||
|     def select_file(self, filename): |     def select_file(self, filename): | ||||||
|         if not filename in self.files: |         if not self._filepath(filename) in self.files: | ||||||
|            raise EnvironmentError('No such file in workdir!') |            raise EnvironmentError('No such file in workdir!') | ||||||
|         self.filename = filename |         self.filename = filename | ||||||
|         self.language = map_file_extension_to_language(self.filename) |         self.language = map_file_extension_to_language(self.filename) | ||||||
| @@ -47,13 +47,15 @@ class FileManager: | |||||||
|  |  | ||||||
|  |  | ||||||
| class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin): | class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin): | ||||||
|     def __init__(self, anchor, filename, process_name=None): |     def __init__(self, anchor, directory, process_name=None, selected_file=None): | ||||||
|         super().__init__(anchor) |         super().__init__(anchor) | ||||||
|         self.filemanager = FileManager('login_projectdir', LOGIN_APP_DIR, selected_file=filename) |         self.filemanager = FileManager(directory, LOGIN_APP_DIR, selected_file=selected_file) | ||||||
|         self.process_name = process_name or splitext(filename)[0] |         self.process_name = process_name | ||||||
|  |  | ||||||
|         self.commands = { |         self.commands = { | ||||||
|             'read': self.read, |             'read': self.read, | ||||||
|             'write': self.write |             'write': self.write, | ||||||
|  |             'select': self.select | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         # Supervisor needs these to run the login program |         # Supervisor needs these to run the login program | ||||||
| @@ -71,6 +73,12 @@ class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin): | |||||||
|         self.filemanager.file_contents = data_json['data']['content'] |         self.filemanager.file_contents = data_json['data']['content'] | ||||||
|         self.restart_process() |         self.restart_process() | ||||||
|  |  | ||||||
|  |     def select(self, data_json): | ||||||
|  |         try: | ||||||
|  |             self.filemanager.select_file(data_json['data']['filename']) | ||||||
|  |         except EnvironmentError: | ||||||
|  |             log.critical('Failed to select file "{}"'.format(data_json['data']['filename'])) | ||||||
|  |  | ||||||
|     def handle_event(self, anchor, data_json): |     def handle_event(self, anchor, data_json): | ||||||
|         data = data_json['data'] |         data = data_json['data'] | ||||||
|         self.commands[data['command']](data_json) |         self.commands[data['command']](data_json) | ||||||
| @@ -84,4 +92,7 @@ def map_file_extension_to_language(filename): | |||||||
|         '.js': 'javascript' |         '.js': 'javascript' | ||||||
|     } |     } | ||||||
|     _, extension = splitext(filename) |     _, extension = splitext(filename) | ||||||
|     return language_map[extension] |     language = 'javascript' | ||||||
|  |     try: language = language_map[extension] | ||||||
|  |     except KeyError: log.debug('No such extension in list, falling back to default: "{}".'.format(language)) | ||||||
|  |     return language | ||||||
		Reference in New Issue
	
	Block a user