Mercurial > libervia-web
comparison libervia/server/utils.py @ 1216:b2d067339de3
python 3 port:
/!\ Python 3.6+ is now needed to use libervia
/!\ instability may occur and features may not be working anymore, this will improve with time
/!\ TxJSONRPC dependency has been removed
The same procedure as in backend has been applied (check backend commit ab2696e34d29 logs
for details). Removed now deprecated code (Pyjamas compiled browser part, legacy blog,
JSON RPC related code).
Adapted code to work without `html` and `themes` dirs.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 13 Aug 2019 19:12:31 +0200 |
parents | 2af117bfe6cc |
children | 62bf4f87c249 |
comparison
equal
deleted
inserted
replaced
1215:f14ab8a25e8b | 1216:b2d067339de3 |
---|---|
19 from sat.core.i18n import _ | 19 from sat.core.i18n import _ |
20 from twisted.internet import reactor | 20 from twisted.internet import reactor |
21 from twisted.internet import defer | 21 from twisted.internet import defer |
22 from sat.core import exceptions | 22 from sat.core import exceptions |
23 from sat.core.log import getLogger | 23 from sat.core.log import getLogger |
24 import urllib | 24 import urllib.request, urllib.parse, urllib.error |
25 | 25 |
26 log = getLogger(__name__) | 26 log = getLogger(__name__) |
27 | 27 |
28 | 28 |
29 def quote(value, safe="@"): | 29 def quote(value, safe="@"): |
30 """shortcut to quote an unicode value for URL""" | 30 """shortcut to quote an unicode value for URL""" |
31 return urllib.quote(value.encode("utf-8"), safe=safe) | 31 return urllib.parse.quote(value.encode("utf-8"), safe=safe) |
32 | 32 |
33 | 33 |
34 class ProgressHandler(object): | 34 class ProgressHandler(object): |
35 """class to help the management of progressions""" | 35 """class to help the management of progressions""" |
36 | 36 |
44 @classmethod | 44 @classmethod |
45 def _signal(cls, name, progress_id, data, profile): | 45 def _signal(cls, name, progress_id, data, profile): |
46 handlers = cls.handlers | 46 handlers = cls.handlers |
47 if profile in handlers and progress_id in handlers[profile]: | 47 if profile in handlers and progress_id in handlers[profile]: |
48 handler_data = handlers[profile][progress_id] | 48 handler_data = handlers[profile][progress_id] |
49 timeout = handler_data[u"timeout"] | 49 timeout = handler_data["timeout"] |
50 if timeout.active(): | 50 if timeout.active(): |
51 timeout.cancel() | 51 timeout.cancel() |
52 cb = handler_data[name] | 52 cb = handler_data[name] |
53 if cb is not None: | 53 if cb is not None: |
54 cb(data) | 54 cb(data) |
55 if name == u"started": | 55 if name == "started": |
56 pass | 56 pass |
57 elif name == u"finished": | 57 elif name == "finished": |
58 handler_data[u"deferred"].callback(data) | 58 handler_data["deferred"].callback(data) |
59 handler_data[u"instance"].unregister_handler() | 59 handler_data["instance"].unregister_handler() |
60 elif name == u"error": | 60 elif name == "error": |
61 handler_data[u"deferred"].errback(Exception(data)) | 61 handler_data["deferred"].errback(Exception(data)) |
62 handler_data[u"instance"].unregister_handler() | 62 handler_data["instance"].unregister_handler() |
63 else: | 63 else: |
64 log.error(u"unexpected signal: {name}".format(name=name)) | 64 log.error("unexpected signal: {name}".format(name=name)) |
65 | 65 |
66 def _timeout(self): | 66 def _timeout(self): |
67 log.warning( | 67 log.warning( |
68 _( | 68 _( |
69 u"No progress received, cancelling handler: {progress_id} [{profile}]" | 69 "No progress received, cancelling handler: {progress_id} [{profile}]" |
70 ).format(progress_id=self.progress_id, profile=self.profile) | 70 ).format(progress_id=self.progress_id, profile=self.profile) |
71 ) | 71 ) |
72 | 72 |
73 def unregister_handler(self): | 73 def unregister_handler(self): |
74 """remove a previously registered handler""" | 74 """remove a previously registered handler""" |
75 try: | 75 try: |
76 del self.handlers[self.profile][self.progress_id] | 76 del self.handlers[self.profile][self.progress_id] |
77 except KeyError: | 77 except KeyError: |
78 log.warning( | 78 log.warning( |
79 _(u"Trying to remove unknown handler: {progress_id} [{profile}]").format( | 79 _("Trying to remove unknown handler: {progress_id} [{profile}]").format( |
80 progress_id=self.progress_id, profile=self.profile | 80 progress_id=self.progress_id, profile=self.profile |
81 ) | 81 ) |
82 ) | 82 ) |
83 else: | 83 else: |
84 if not self.handlers[self.profile]: | 84 if not self.handlers[self.profile]: |
98 handler_data = self.handlers.setdefault(self.profile, {}).setdefault( | 98 handler_data = self.handlers.setdefault(self.profile, {}).setdefault( |
99 self.progress_id, {} | 99 self.progress_id, {} |
100 ) | 100 ) |
101 if handler_data: | 101 if handler_data: |
102 raise exceptions.ConflictError( | 102 raise exceptions.ConflictError( |
103 u"There is already one handler for this progression" | 103 "There is already one handler for this progression" |
104 ) | 104 ) |
105 handler_data[u"instance"] = self | 105 handler_data["instance"] = self |
106 deferred = handler_data[u"deferred"] = defer.Deferred() | 106 deferred = handler_data["deferred"] = defer.Deferred() |
107 handler_data[u"started"] = started_cb | 107 handler_data["started"] = started_cb |
108 handler_data[u"finished"] = finished_cb | 108 handler_data["finished"] = finished_cb |
109 handler_data[u"error"] = error_cb | 109 handler_data["error"] = error_cb |
110 handler_data[u"timeout"] = reactor.callLater(timeout, self._timeout) | 110 handler_data["timeout"] = reactor.callLater(timeout, self._timeout) |
111 return deferred | 111 return deferred |
112 | 112 |
113 | 113 |
114 class SubPage(unicode): | 114 class SubPage(str): |
115 """use to mark subpages when generating a page path""" | 115 """use to mark subpages when generating a page path""" |