Mercurial > libervia-web
comparison libervia/server/server.py @ 1245:079e8eb6e327
server (tasks): refactoring:
- moved `TasksManager` to `server.tasks.manager`
- tasks modules now must have a `Task` class which will be instanciated by TasksManager
- `server.tasks.task` has a basis for `Task` class
- `Task.prepare` can now be asynchronous
- `importlib` is now used to import tasks, instead of exec
- tasks are now parsed/run after pages are imported
- `server.BackendReady` is now a coroutine
- type hinting for Task attributes
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 25 Apr 2020 16:08:55 +0200 |
parents | 8f39d98416c5 |
children | aaf28d45ae67 |
comparison
equal
deleted
inserted
replaced
1244:2ed4e399e1d4 | 1245:079e8eb6e327 |
---|---|
52 from sat.tools.common import uri as common_uri | 52 from sat.tools.common import uri as common_uri |
53 import libervia | 53 import libervia |
54 from libervia.server import websockets | 54 from libervia.server import websockets |
55 from libervia.server.pages import LiberviaPage | 55 from libervia.server.pages import LiberviaPage |
56 from libervia.server.utils import quote, ProgressHandler | 56 from libervia.server.utils import quote, ProgressHandler |
57 from libervia.server.tasks import TasksManager | 57 from libervia.server.tasks.manager import TasksManager |
58 from functools import partial | 58 from functools import partial |
59 | 59 |
60 try: | 60 try: |
61 import OpenSSL | 61 import OpenSSL |
62 from twisted.internet import ssl | 62 from twisted.internet import ssl |
732 for key in to_delete: | 732 for key in to_delete: |
733 del conf[key] | 733 del conf[key] |
734 if default_dict: | 734 if default_dict: |
735 conf[''] = default_dict | 735 conf[''] = default_dict |
736 | 736 |
737 @defer.inlineCallbacks | 737 async def backendReady(self): |
738 def backendReady(self, __): | |
739 log.info(f"Libervia v{self.full_version}") | 738 log.info(f"Libervia v{self.full_version}") |
740 if self.options['dev_mode']: | 739 if self.options['dev_mode']: |
741 log.info(_("Developer mode activated")) | 740 log.info(_("Developer mode activated")) |
742 self.media_dir = self.bridge.getConfig("", "media_dir") | 741 self.media_dir = self.bridge.getConfig("", "media_dir") |
743 self.local_dir = self.bridge.getConfig("", "local_dir") | 742 self.local_dir = self.bridge.getConfig("", "local_dir") |
761 if self.options['dev_mode']: | 760 if self.options['dev_mode']: |
762 self.files_watcher.watchDir( | 761 self.files_watcher.watchDir( |
763 default_site_path, auto_add=True, recursive=True, | 762 default_site_path, auto_add=True, recursive=True, |
764 callback=LiberviaPage.onFileChange, site_root=self.sat_root, | 763 callback=LiberviaPage.onFileChange, site_root=self.sat_root, |
765 site_path=default_site_path) | 764 site_path=default_site_path) |
765 LiberviaPage.importPages(self, self.sat_root) | |
766 tasks_manager = TasksManager(self, self.sat_root) | 766 tasks_manager = TasksManager(self, self.sat_root) |
767 yield tasks_manager.runTasks() | 767 await tasks_manager.parseTasks() |
768 LiberviaPage.importPages(self, self.sat_root) | 768 await tasks_manager.runTasks() |
769 # FIXME: handle _setMenu in a more generic way, taking care of external sites | 769 # FIXME: handle _setMenu in a more generic way, taking care of external sites |
770 self.sat_root._setMenu(self.options["menu_json"]) | 770 self.sat_root._setMenu(self.options["menu_json"]) |
771 self.vhost_root.default = default_root | 771 self.vhost_root.default = default_root |
772 existing_vhosts = {b'': default_root} | 772 existing_vhosts = {b'': default_root} |
773 | 773 |
803 if self.options['dev_mode']: | 803 if self.options['dev_mode']: |
804 self.files_watcher.watchDir( | 804 self.files_watcher.watchDir( |
805 site_path, auto_add=True, recursive=True, | 805 site_path, auto_add=True, recursive=True, |
806 callback=LiberviaPage.onFileChange, site_root=res, | 806 callback=LiberviaPage.onFileChange, site_root=res, |
807 site_path=site_path) | 807 site_path=site_path) |
808 tasks_manager = TasksManager(self, res) | |
809 yield tasks_manager.runTasks() | |
810 res.putChild( | 808 res.putChild( |
811 C.BUILD_DIR.encode('utf-8'), | 809 C.BUILD_DIR.encode('utf-8'), |
812 ProtectedFile( | 810 ProtectedFile( |
813 self.getBuildPath(site_name), | 811 self.getBuildPath(site_name), |
814 defaultType="application/octet-stream"), | 812 defaultType="application/octet-stream"), |
818 # FIXME: default pages are accessible if not overriden by external website | 816 # FIXME: default pages are accessible if not overriden by external website |
819 # while necessary for login or re-using existing pages | 817 # while necessary for login or re-using existing pages |
820 # we may want to disable access to the page by direct URL | 818 # we may want to disable access to the page by direct URL |
821 # (e.g. /blog disabled except if called by external site) | 819 # (e.g. /blog disabled except if called by external site) |
822 LiberviaPage.importPages(self, res, root_path=default_site_path) | 820 LiberviaPage.importPages(self, res, root_path=default_site_path) |
821 tasks_manager = TasksManager(self, res) | |
822 await tasks_manager.parseTasks() | |
823 await tasks_manager.runTasks() | |
823 res._setMenu(self.options["menu_json"]) | 824 res._setMenu(self.options["menu_json"]) |
824 | 825 |
825 self.vhost_root.addHost(host_name.encode('utf-8'), res) | 826 self.vhost_root.addHost(host_name.encode('utf-8'), res) |
826 | 827 |
827 templates_res = web_resource.Resource() | 828 templates_res = web_resource.Resource() |
893 def _bridgeCb(self): | 894 def _bridgeCb(self): |
894 self.bridge.getReady( | 895 self.bridge.getReady( |
895 lambda: self.initialised.callback(None), | 896 lambda: self.initialised.callback(None), |
896 lambda failure: self.initialised.errback(Exception(failure)), | 897 lambda failure: self.initialised.errback(Exception(failure)), |
897 ) | 898 ) |
898 self.initialised.addCallback(self.backendReady) | 899 self.initialised.addCallback(lambda __: defer.ensureDeferred(self.backendReady())) |
899 self.initialised.addErrback(self.initEb) | 900 self.initialised.addErrback(self.initEb) |
900 | 901 |
901 def _bridgeEb(self, failure_): | 902 def _bridgeEb(self, failure_): |
902 if isinstance(failure_, BridgeExceptionNoService): | 903 if isinstance(failure_, BridgeExceptionNoService): |
903 print("Can't connect to SàT backend, are you sure it's launched ?") | 904 print("Can't connect to SàT backend, are you sure it's launched ?") |