diff --git a/doc/configuration.rst b/doc/configuration.rst index d99ff1ff..2bee0ed3 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -106,6 +106,8 @@ the comments to get the meaning of each option. ; background luminance, used by terminal frontends ; can be "auto" (default) to autodetect, "dark" or "light" background = auto + # end-user facing URL, used by Web frontend + public_url = example.com # uncomment next line if you don't want to use local cache for pubsub items ; pubsub_cache_strategy = "no_cache" diff --git a/doc/overview.rst b/doc/overview.rst index d6805b20..e193b0e5 100644 --- a/doc/overview.rst +++ b/doc/overview.rst @@ -78,28 +78,34 @@ Libervia Web The Web frontend is the second main interface for most users. This frontend has the particularity to be in 2 parts: a server which serves HTTP content, and a client which -runs in the browser. So you have Libervia server which connect to Libervia backend which itself -connect to the XMPP server, and your browser will connect to Libervia server. +runs in the browser. So you have Libervia Web server which connect to Libervia backend which itself +connect to the XMPP server, and your browser will connect to Libervia Web server. -In the browser, you can access the server in two ways: either directly with what we call -**Libervia pages**, or with a JavaScript code in `single-page application`_ which is the -**Libervia client** (or **Libervia web app**) that we have mentioned above. +.. + # NOTE: currently not relevant as there is no Web APP anymore, may come back in the + future though + In the browser, you can access the server in two ways: either directly with what we call + **Libervia pages**, or with a JavaScript code in `single-page application`_ which is the + **Libervia client** (or **Libervia web app**) that we have mentioned above. -The **Libervia pages** are web pages managing a single feature. They can work without +The **Libervia Web Pages** are web pages managing a single feature. They can work without JavaScript when it's possible (it's not the case for instant messaging or similar highly -dynamic contents). They aims to be simple and straightforward to use. +dynamic contents). They aims to be simple and straightforward to use. That what you're +accessing when you're using Libervia Web. -The **Libervia client** is a highly dynamic web application, used to access more features. -It's more complete and may be well adapted if you want to let Libervia running in a browser tab -for an extended period. +.. + #Note: as above, not relevant anymore but may come back in the future + The **Libervia Web Client** is a highly dynamic web application, used to access more features. + It's more complete and may be well adapted if you want to let Libervia running in a browser tab + for an extended period. -Last but not least, Libervia is also the central part of the new **web framework** of -Libervia. Indeed, in addition of being a frontend to Libervia features (which is built with -this framework), you can create totally different websites which are integrated in Libervia -(and so XMPP) ecosystem. This framework uses Libervia template engine (based on `Jinja2`_) and -makes the creation of decentralised and federated websites simple. Thanks to this framework, -it's easy to experiment new ideas/features, or to change completely the look and feel of -the Libervia frontend. +Libervia Web is also the central part of the **Web Framework**. Indeed, in addition of +being a frontend to Libervia features (which is built with this framework), you can create +totally different websites which are integrated in Libervia (and so XMPP) ecosystem. This +framework uses Libervia template engine (based on `Jinja2`_) and makes the creation of +decentralised and federated websites simple. Thanks to this framework, it's easy to +experiment new ideas/features, or to change completely the look and feel of the Libervia +frontend. The `official Libervia website`_ is made with Libervia web framework. diff --git a/sat/tools/common/date_utils.py b/sat/tools/common/date_utils.py index d1aedb55..60c1b73e 100644 --- a/sat/tools/common/date_utils.py +++ b/sat/tools/common/date_utils.py @@ -25,6 +25,7 @@ import datetime from dateutil import tz, parser from dateutil.relativedelta import relativedelta from dateutil.utils import default_tzinfo +from dateutil.parser import ParserError from babel import dates import calendar import time @@ -64,9 +65,15 @@ def date_parse(value, default_tz=TZ_UTC): value = str(value).strip() dayfirst = False if YEAR_FIRST_RE.match(value) else True - dt = default_tzinfo( - parser.parse(value, default=DEFAULT_DATETIME, dayfirst=dayfirst), - default_tz) + try: + dt = default_tzinfo( + parser.parse(value, default=DEFAULT_DATETIME, dayfirst=dayfirst), + default_tz) + except ParserError as e: + if value == "now": + dt = datetime.datetime.now(tz.tzutc()) + else: + raise e return calendar.timegm(dt.utctimetuple()) def date_parse_ext(value, default_tz=TZ_UTC): diff --git a/sat_frontends/jp/cmd_avatar.py b/sat_frontends/jp/cmd_avatar.py index 228a070b..50b66d0a 100644 --- a/sat_frontends/jp/cmd_avatar.py +++ b/sat_frontends/jp/cmd_avatar.py @@ -49,7 +49,7 @@ class Get(base.CommandBase): async def showImage(self, path): sat_conf = config.parseMainConf() - cmd = config.getConfig(sat_conf, "jp", "image_cmd") + cmd = config.getConfig(sat_conf, C.CONFIG_SECTION, "image_cmd") cmds = [cmd] + DISPLAY_CMD if cmd else DISPLAY_CMD for cmd in cmds: try: diff --git a/sat_frontends/jp/cmd_blog.py b/sat_frontends/jp/cmd_blog.py index f72f3b2b..d7f7f5f1 100644 --- a/sat_frontends/jp/cmd_blog.py +++ b/sat_frontends/jp/cmd_blog.py @@ -637,7 +637,9 @@ class Edit(base.CommandBase, BlogPublishCommon, common.BaseEdit): async def start(self): # if there are user defined extension, we use them - SYNTAX_EXT.update(config.getConfig(self.sat_conf, "jp", CONF_SYNTAX_EXT, {})) + SYNTAX_EXT.update( + config.getConfig(self.sat_conf, C.CONFIG_SECTION, CONF_SYNTAX_EXT, {}) + ) self.current_syntax = await self.get_current_syntax() ( @@ -782,11 +784,13 @@ class Preview(base.CommandBase, common.BaseEdit): aionotify = None sat_conf = self.sat_conf - SYNTAX_EXT.update(config.getConfig(sat_conf, "jp", CONF_SYNTAX_EXT, {})) + SYNTAX_EXT.update( + config.getConfig(sat_conf, C.CONFIG_SECTION, CONF_SYNTAX_EXT, {}) + ) try: self.open_cb_cmd = config.getConfig( - sat_conf, "jp", "blog_preview_open_cmd", Exception + sat_conf, C.CONFIG_SECTION, "blog_preview_open_cmd", Exception ) except (NoOptionError, NoSectionError): self.open_cb_cmd = None @@ -795,7 +799,7 @@ class Preview(base.CommandBase, common.BaseEdit): open_cb = self.openPreviewExt self.update_cb_cmd = config.getConfig( - sat_conf, "jp", "blog_preview_update_cmd", self.open_cb_cmd + sat_conf, C.CONFIG_SECTION, "blog_preview_update_cmd", self.open_cb_cmd ) if self.update_cb_cmd is None: update_cb = self.showPreview diff --git a/sat_frontends/jp/common.py b/sat_frontends/jp/common.py index 2e1e46fa..7c9ecc6e 100644 --- a/sat_frontends/jp/common.py +++ b/sat_frontends/jp/common.py @@ -199,13 +199,13 @@ class BaseEdit(object): content_file_obj.close() # we prepare arguments - editor = config.getConfig(self.sat_conf, "jp", "editor") or os.getenv( + editor = config.getConfig(self.sat_conf, C.CONFIG_SECTION, "editor") or os.getenv( "EDITOR", "vi" ) try: # is there custom arguments in sat.conf ? editor_args = config.getConfig( - self.sat_conf, "jp", editor_args_opt, Exception + self.sat_conf, C.CONFIG_SECTION, editor_args_opt, Exception ) except (NoOptionError, NoSectionError): # no, we check if we know the editor and have special arguments diff --git a/tests/e2e/run_e2e.py b/tests/e2e/run_e2e.py index 8557529f..d47682c5 100755 --- a/tests/e2e/run_e2e.py +++ b/tests/e2e/run_e2e.py @@ -176,7 +176,7 @@ def use_e2e_env(): if not compose_e2e_path.is_file(): raise exceptions.NotFound('"docker-compose-e2e.yml" file can\'t be found') - with tempfile.TemporaryDirectory(prefix="sat_test_e2e_") as temp_dir: + with tempfile.TemporaryDirectory(prefix="libervia_test_e2e_") as temp_dir: override_path = Path(temp_dir) / "test_override.yml" override = yaml.load( dedent(f"""\