From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 8D1EC1381F3 for ; Wed, 14 Aug 2013 14:56:27 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A58DCE0B45; Wed, 14 Aug 2013 14:56:26 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 29F91E0B45 for ; Wed, 14 Aug 2013 14:56:26 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id F341633EC6C for ; Wed, 14 Aug 2013 14:56:24 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 88585E5463 for ; Wed, 14 Aug 2013 14:56:23 +0000 (UTC) From: "André Erdmann" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "André Erdmann" Message-ID: <1376395649.58094496a2b1393988a81f297ef62e3db4612937.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/argparser.py roverlay/status.py X-VCS-Directories: roverlay/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: 58094496a2b1393988a81f297ef62e3db4612937 X-VCS-Branch: master Date: Wed, 14 Aug 2013 14:56:23 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 4b115501-e600-4732-b87a-5af7adf9894b X-Archives-Hash: 6b1b4012966e48dde67a3865acf9083e commit: 58094496a2b1393988a81f297ef62e3db4612937 Author: André Erdmann mailerd de> AuthorDate: Tue Aug 13 12:07:29 2013 +0000 Commit: André Erdmann mailerd de> CommitDate: Tue Aug 13 12:07:29 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=58094496 roverlay/status: smart(er) template file lookup automatically append file extensions when searching for the template file, depending on the script mode ('.html' for cgi, '.txt' for cli). --- roverlay/argparser.py | 7 ++--- roverlay/status.py | 80 ++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 72 insertions(+), 15 deletions(-) diff --git a/roverlay/argparser.py b/roverlay/argparser.py index 84e1478..a01d1c9 100644 --- a/roverlay/argparser.py +++ b/roverlay/argparser.py @@ -523,7 +523,7 @@ class RoverlayArgumentParser ( RoverlayArgumentParserBase ): # --- end of setup_actions (...) --- def parse_actions ( self ): - command = self.parsed ['command'] + self.command = self.parsed ['command'] # --- end of parse_actions (...) --- # --- end of RoverlayArgumentParser --- @@ -583,9 +583,8 @@ class RoverlayStatusArgumentParser ( RoverlayArgumentParser ): arg ( '-t', '--template', dest='template', default=argparse.SUPPRESS, - flags=self.ARG_WITH_DEFAULT|self.ARG_META_FILE, - type=is_fs_file, - help='template file for generating output', + flags=self.ARG_ADD_DEFAULT, metavar='', + help='template file or name for generating output', ) arg ( diff --git a/roverlay/status.py b/roverlay/status.py index 7872674..56a2d61 100644 --- a/roverlay/status.py +++ b/roverlay/status.py @@ -5,7 +5,6 @@ # either version 2 of the License, or (at your option) any later version. from __future__ import print_function -#from __future__ import division import os import sys @@ -39,6 +38,14 @@ class ReferenceableDict ( dict ): return sorted ( self.items(), key=lambda kv: keysort ( kv[0] ) ) # --- end of sorted_items (...) --- + def sorted_env_vars ( self, keysort=None ): + # return list with "scalar" types only + return list ( + kv for kv in self.sorted_items ( keysort=keysort ) + if isinstance ( kv[1], ( str, int, float ) ) + ) + # --- end of sorted_env_vars (...) --- + # --- end of ReferenceableDict --- class SelfReferencingDict ( ReferenceableDict ): @@ -69,6 +76,11 @@ class StatusRuntimeEnvironment ( roverlay.runtime.RuntimeEnvironmentBase ): TEMPLATE_ENCODING = 'utf-8' + SCRIPT_MODE_FILE_EXT = { + 'cgi': '.html', + 'cli': '.txt', + } + # variables from /etc/nginx/fastcgi.conf # (will be kept in template env dict depending on script mode) # @@ -137,16 +149,22 @@ class StatusRuntimeEnvironment ( roverlay.runtime.RuntimeEnvironmentBase ): def do_setup_mako ( self ): template_dirs = [] + self.default_template = self.script_mode if 'template' in self.options: - dirname, basename = os.path.split ( + # not ideal, but should suffice + # otherwise, introduce a --template-name arg + # + fspath = os.path.abspath ( self.options ['template'].rstrip ( os.sep ) ) - assert dirname and basename - template_dirs.append ( dirname ) - self.default_template = basename - else: - self.default_template = self.script_mode + if os.path.isfile ( fspath ): + dirname, basename = os.path.split ( fspath ) + assert dirname and basename + template_dirs.append ( dirname ) + self.default_template = basename + else: + self.default_template = self.options ['template'] # -- end if if self.installed: @@ -172,6 +190,7 @@ class StatusRuntimeEnvironment ( roverlay.runtime.RuntimeEnvironmentBase ): self._mako_lookup = mako.lookup.TemplateLookup ( directories=template_dirs, module_directory=module_dir, output_encoding=self.TEMPLATE_ENCODING, + #future_imports=[ 'print_function', 'division', ], ) # --- end of do_setup_mako (...) --- @@ -187,6 +206,8 @@ class StatusRuntimeEnvironment ( roverlay.runtime.RuntimeEnvironmentBase ): roverlay.tools.shenv.setup_env() ) roverlay.tools.shenv.restore_msg_vars ( self.template_vars ) + #self.template_vars ['ROVERLAY_PHASE'] = 'status_' + self.command + self.template_vars ['ROVERLAY_PHASE'] = 'status' try: del self.template_vars ['STATS_DB'] @@ -235,12 +256,42 @@ class StatusRuntimeEnvironment ( roverlay.runtime.RuntimeEnvironmentBase ): self.do_setup_mako() # --- end of do_setup (...) --- - def serve_template ( self, template_name=None, catch_exceptions=True ): + def serve_template ( self, + template_name = None, + file_extensions = [ '', '.mako', '.tmpl' ], + append_mode_ext = True, + catch_exceptions = True, + ): try: - my_template = self._mako_lookup.get_template ( + my_template_name = ( template_name if template_name is not None else self.default_template ) + + if append_mode_ext: + fext_list = list ( file_extensions ) + fext_list.append ( self.get_script_mode_file_ext() ) + else: + fext_list = file_extensions + + # TODO/FIXME: does TemplateLookup support file extension_s_ lookup? + last_fext_index = len ( fext_list ) - 1 + for index, f_ext in enumerate ( fext_list ): + if index == last_fext_index: + my_template = self._mako_lookup.get_template ( + my_template_name + f_ext + ) + else: + try: + my_template = self._mako_lookup.get_template ( + my_template_name + f_ext + ) + except mako.exceptions.TopLevelLookupException: + pass + else: + break + # -- end if + ret = my_template.render ( **self.template_vars ) except: if catch_exceptions: @@ -286,6 +337,12 @@ class StatusRuntimeEnvironment ( roverlay.runtime.RuntimeEnvironmentBase ): return str ( data ) # --- end of decode (...) --- + def get_script_mode_file_ext ( self ): + return self.SCRIPT_MODE_FILE_EXT.get ( + self.script_mode, ( '.' + self.script_mode ) + ) + # --- end of get_script_mode_file_ext (...) --- + # --- end of StatusRuntimeEnvironment --- @@ -294,6 +351,7 @@ def main_installed ( *args, **kwargs ): # --- end of main_installed (...) --- def main ( installed, *args, **kw ): + main_env = StatusRuntimeEnvironment ( installed, *args, **kw ) main_env.setup() @@ -308,7 +366,7 @@ def main ( installed, *args, **kw ): #main_env.write_cgi_header ( FH, encode=True ) FH.write ( output_encoded ) else: - output = main_env.decode ( output_encoded ) - main_env.write_cgi_header ( sys.stdout, force=True ) + output = main_env.decode ( output_encoded ).lstrip ( '\n' ) + main_env.write_cgi_header ( sys.stdout ) sys.stdout.write ( output ) # --- end of main (...) ---