Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:smarty12:Python
python-htmltmpl
python-htmltmpl-1.22-performance.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File python-htmltmpl-1.22-performance.patch of Package python-htmltmpl
Index: htmltmpl.py =================================================================== RCS file: /cvsroot/htmltmpl/htmltmpl/htmltmpl.py,v retrieving revision 1.16 diff -a -u -r1.16 htmltmpl.py --- htmltmpl.py 17 Dec 2001 07:21:04 -0000 1.16 +++ htmltmpl.py 3 Jul 2003 11:11:56 -0000 @@ -76,6 +76,12 @@ LOCK_SH = 2 LOCK_UN = 3 +def DEB(str): + """ Print debugging message to stderr. + @hidden + """ + print >> sys.stderr, str + ############################################## # CLASS: TemplateManager # ############################################## @@ -166,7 +172,7 @@ if precompile and not LOCKTYPE: raise TemplateError, "Template precompilation is not "\ "available on this platform." - self.DEB("INIT DONE") + self._debug and DEB("INIT DONE") def prepare(self, file): """ Preprocess, parse, tokenize and compile the template. @@ -212,17 +218,17 @@ compile_params = (self._include, self._max_include, self._comments, self._gettext) if precompiled.is_uptodate(compile_params): - self.DEB("PRECOMPILED: UPTODATE") + self._debug and DEB("PRECOMPILED: UPTODATE") compiled = precompiled else: - self.DEB("PRECOMPILED: NOT UPTODATE") + self._debug and DEB("PRECOMPILED: NOT UPTODATE") compiled = self.update(precompiled) else: - self.DEB("PRECOMPILED: NOT PRECOMPILED") + self._debug and DEB("PRECOMPILED: NOT PRECOMPILED") compiled = self.compile(file) self.save_precompiled(compiled) else: - self.DEB("PRECOMPILATION DISABLED") + self._debug and DEB("PRECOMPILATION DISABLED") compiled = self.compile(file) return compiled @@ -244,7 +250,7 @@ <em>TemplateCompiler</em>. The instance must represent a template compiled from a file on disk. """ - self.DEB("UPDATE") + self._debug and DEB("UPDATE") updated = self.compile(template.file()) if self._precompile: self.save_precompiled(updated) @@ -254,12 +260,6 @@ # PRIVATE METHODS # ############################################## - def DEB(self, str): - """ Print debugging message to stderr if debugging is enabled. - @hidden - """ - if self._debug: print >> sys.stderr, str - def lock_file(self, file, lock): """ Provide platform independent file locking. @hidden @@ -316,7 +316,7 @@ @hidden """ filename = file + "c" # "template.tmplc" - self.DEB("LOADING PRECOMPILED") + self._debug and DEB("LOADING PRECOMPILED") try: remove_bad = 0 file = None @@ -390,7 +390,7 @@ remove_bad = 1 raise else: - self.DEB("SAVING PRECOMPILED") + self._debug and DEB("SAVING PRECOMPILED") finally: if file: self.lock_file(file, LOCK_UN) @@ -439,7 +439,7 @@ should be automatically looked up in enclosing scopes. Automatic global lookup is disabled by default. Global lookup - can be overriden on a per-variable basis by the + can be overridden on a per-variable basis by the <strong>GLOBAL</strong> parameter of a <strong>TMPL_VAR</strong> statement. @@ -499,7 +499,7 @@ raise TemplateError, "Value of toplevel variable '%s' must "\ "be either a scalar or a list." % var self._vars[var] = value - self.DEB("VALUE SET: " + str(var)) + self._debug and DEB("VALUE SET: " + str(var)) def reset(self, keep_data=0): """ Reset the template data. @@ -521,7 +521,7 @@ self._current_pos = 0 if not keep_data: self._vars.clear() - self.DEB("RESET") + self._debug and DEB("RESET") def process(self, template, part=None): """ Process a compiled template. Return the result as string. @@ -549,7 +549,7 @@ If this parameter is not specified, then the whole template is processed, or all remaining parts are processed. """ - self.DEB("APP INPUT:") + self._debug and DEB("APP INPUT:") if self._debug: pprint.pprint(self._vars, sys.stderr) if part != None and (part == 0 or part < self._current_part): raise TemplateError, "process() - invalid part number" @@ -574,7 +574,7 @@ tokens = template.tokens() len_tokens = len(tokens) - out = "" # buffer for processed output + out = [] # buffer for processed output # Recover position at which we ended after processing of last part. i = self._current_pos @@ -601,12 +601,12 @@ skip_params = 1 # If output of current block is not disabled then append - # the substitued and escaped variable to the output. + # the substituted and escaped variable to the output. if DISABLE_OUTPUT not in output_control: value = str(self.find_value(var, loop_name, loop_pass, loop_total, globalp)) - out += self.escape(value, escape) - self.DEB("VAR: " + str(var)) + out.append(self.escape(value, escape)) + self._debug and DEB("VAR: " + str(var)) elif token == "<TMPL_LOOP": var = tokens[i + PARAM_NAME] @@ -629,10 +629,10 @@ if passtotal == 0: # This loop is empty. output_control.append(DISABLE_OUTPUT) - self.DEB("LOOP: DISABLE: " + str(var)) + self._debug and DEB("LOOP: DISABLE: " + str(var)) else: output_control.append(ENABLE_OUTPUT) - self.DEB("LOOP: FIRST PASS: %s TOTAL: %d"\ + self._debug and DEB("LOOP: FIRST PASS: %s TOTAL: %d"\ % (var, passtotal)) elif token == "<TMPL_IF": @@ -644,10 +644,10 @@ if self.find_value(var, loop_name, loop_pass, loop_total, globalp): output_control.append(ENABLE_OUTPUT) - self.DEB("IF: ENABLE: " + str(var)) + self._debug and DEB("IF: ENABLE: " + str(var)) else: output_control.append(DISABLE_OUTPUT) - self.DEB("IF: DISABLE: " + str(var)) + self._debug and DEB("IF: DISABLE: " + str(var)) elif token == "<TMPL_UNLESS": var = tokens[i + PARAM_NAME] @@ -658,10 +658,10 @@ if self.find_value(var, loop_name, loop_pass, loop_total, globalp): output_control.append(DISABLE_OUTPUT) - self.DEB("UNLESS: DISABLE: " + str(var)) + self._debug and DEB("UNLESS: DISABLE: " + str(var)) else: output_control.append(ENABLE_OUTPUT) - self.DEB("UNLESS: ENABLE: " + str(var)) + self._debug and DEB("UNLESS: ENABLE: " + str(var)) elif token == "</TMPL_LOOP": skip_params = 1 @@ -679,26 +679,26 @@ loop_start.pop() loop_total.pop() output_control.pop() - self.DEB("LOOP: END") + self._debug and DEB("LOOP: END") else: - # Jump to the beggining of this loop block + # Jump to the beginning of this loop block # to process next pass of the loop. i = loop_start[-1] - self.DEB("LOOP: NEXT PASS") + self._debug and DEB("LOOP: NEXT PASS") elif token == "</TMPL_IF": skip_params = 1 if not output_control: raise TemplateError, "Unmatched </TMPL_IF>." output_control.pop() - self.DEB("IF: END") + self._debug and DEB("IF: END") elif token == "</TMPL_UNLESS": skip_params = 1 if not output_control: raise TemplateError, "Unmatched </TMPL_UNLESS>." output_control.pop() - self.DEB("UNLESS: END") + self._debug and DEB("UNLESS: END") elif token == "<TMPL_ELSE": skip_params = 1 @@ -707,23 +707,23 @@ if output_control[-1] == DISABLE_OUTPUT: # Condition was false, activate the ELSE block. output_control[-1] = ENABLE_OUTPUT - self.DEB("ELSE: ENABLE") + self._debug and DEB("ELSE: ENABLE") elif output_control[-1] == ENABLE_OUTPUT: # Condition was true, deactivate the ELSE block. output_control[-1] = DISABLE_OUTPUT - self.DEB("ELSE: DISABLE") + self._debug and DEB("ELSE: DISABLE") else: raise TemplateError, "BUG: ELSE: INVALID FLAG" elif token == "<TMPL_BOUNDARY": if part and part == self._current_part: - self.DEB("BOUNDARY ON") + self._debug and DEB("BOUNDARY ON") self._current_part += 1 self._current_pos = i + 1 + PARAMS_NUMBER break else: skip_params = 1 - self.DEB("BOUNDARY OFF") + self._debug and DEB("BOUNDARY OFF") self._current_part += 1 elif token == "<TMPL_INCLUDE": @@ -731,22 +731,22 @@ # when it was not replaced by the parser. skip_params = 1 filename = tokens[i + PARAM_NAME] - out += """ + out.append(""" <br /> <p> <strong>HTMLTMPL WARNING:</strong><br /> Cannot include template: <strong>%s</strong> </p> <br /> - """ % filename - self.DEB("CANNOT INCLUDE WARNING") + """ % filename) + self._debug and DEB("CANNOT INCLUDE WARNING") elif token == "<TMPL_GETTEXT": skip_params = 1 if DISABLE_OUTPUT not in output_control: text = tokens[i + PARAM_GETTEXT_STRING] - out += gettext.gettext(text) - self.DEB("GETTEXT: " + text) + out.append(gettext.gettext(text)) + self._debug and DEB("GETTEXT: " + text) else: # Unknown processing directive. @@ -756,7 +756,7 @@ # Raw textual template data. # If output of current block is not disabled, then # append template data to the output buffer. - out += token + out.append(token) i += 1 # end of the big while loop @@ -764,18 +764,12 @@ # Check whether all opening statements were closed. if loop_name: raise TemplateError, "Missing </TMPL_LOOP>." if output_control: raise TemplateError, "Missing </TMPL_IF> or </TMPL_UNLESS>" - return out + return "".join(out) ############################################## # PRIVATE METHODS # ############################################## - def DEB(self, str): - """ Print debugging message to stderr if debugging is enabled. - @hidden - """ - if self._debug: print >> sys.stderr, str - def find_value(self, var, loop_name, loop_pass, loop_total, global_override=None): """ Search the self._vars data structure to find variable var @@ -783,11 +777,11 @@ is currently being processed. If the variable is an ordinary variable, then return it. - If the variable is an identificator of a loop, then + If the variable is an identifier of a loop, then return the total number of times this loop will be executed. - Return an empty string, if the variable is not + Return an empty string if the variable is not found at all. @hidden @@ -808,7 +802,7 @@ self.is_ordinary_var(scope[var]): globals.append(scope[var]) - # Descent deeper into the hierarchy. + # Descend deeper into the hierarchy. if scope.has_key(loop_name[i]) and scope[loop_name[i]]: scope = scope[loop_name[i]][loop_pass[i]] else: @@ -843,7 +837,7 @@ @hidden """ - self.DEB("MAGIC: '%s', PASS: %d, TOTAL: %d"\ + self._debug and DEB("MAGIC: '%s', PASS: %d, TOTAL: %d"\ % (var, loop_pass, loop_total)) if var == "__FIRST__": if loop_pass == 0: @@ -889,7 +883,7 @@ raise TemplateError, "Magic variable __EVERY__x: "\ "Pass number cannot be zero." elif (loop_pass + 1) % every == 0: - self.DEB("MAGIC: EVERY: " + str(every)) + self._debug and DEB("MAGIC: EVERY: " + str(every)) return 1 else: return 0 @@ -934,7 +928,7 @@ class. The compiled form is used as input for the TemplateProcessor which uses it to actually process the template. - This class should be used direcly only when you need to compile + This class should be used directly only when you need to compile a template from a string. If your template is in a file, then you should use the <em>TemplateManager</em> class which provides a higher level interface to this class and also can save the @@ -979,10 +973,10 @@ @param file Filename of the template. See the <em>prepare()</em> method of the <em>TemplateManager</em> - class for exaplanation of this parameter. + class for explanation of this parameter. """ - self.DEB("COMPILING FROM FILE: " + file) + self._debug and DEB("COMPILING FROM FILE: " + file) self._include_path = os.path.join(os.path.dirname(file), INCLUDE_DIR) tokens = self.parse(self.read(file)) compile_params = (self._include, self._max_include, self._comments, @@ -1004,7 +998,7 @@ @param data String containing the template data. """ - self.DEB("COMPILING FROM STRING") + self._debug and DEB("COMPILING FROM STRING") self._include = 0 tokens = self.parse(data) compile_params = (self._include, self._max_include, self._comments, @@ -1015,19 +1009,13 @@ ############################################## # PRIVATE METHODS # ############################################## - - def DEB(self, str): - """ Print debugging message to stderr if debugging is enabled. - @hidden - """ - if self._debug: print >> sys.stderr, str def read(self, filename): """ Read content of file and return it. Raise an error if a problem occurs. @hidden """ - self.DEB("READING: " + filename) + self._debug and DEB("READING: " + filename) try: f = None try: @@ -1049,11 +1037,11 @@ @hidden """ if self._comments: - self.DEB("PREPROCESS: COMMENTS") + self._debug and DEB("PREPROCESS: COMMENTS") template_data = self.remove_comments(template_data) tokens = self.tokenize(template_data) if self._include: - self.DEB("PREPROCESS: INCLUDES") + self._debug and DEB("PREPROCESS: INCLUDES") self.include_templates(tokens) return tokens @@ -1092,7 +1080,7 @@ # Do not include the template. # Protection against infinite recursive includes. skip_params = 1 - self.DEB("INCLUDE: LIMIT REACHED: " + filename) + self._debug and DEB("INCLUDE: LIMIT REACHED: " + filename) else: # Include the template. skip_params = 0 @@ -1106,7 +1094,7 @@ # token and its parameters. tokens[i:i+PARAMS_NUMBER+1] = include_tokens i = i + len(include_tokens) - self.DEB("INCLUDED: " + filename) + self._debug and DEB("INCLUDED: " + filename) continue # Do not increment 'i' below. i += 1 # end of the main while loop @@ -1122,7 +1110,7 @@ @hidden """ - self.DEB("TOKENIZING TEMPLATE") + self._debug and DEB("TOKENIZING TEMPLATE") # NOTE: The TWO double quotes in character class in the regexp below # are there only to prevent confusion of syntax highlighter in Emacs. pattern = r""" @@ -1152,7 +1140,7 @@ else: # "Normal" template data. if self._gettext: - self.DEB("PARSING GETTEXT STRINGS") + self._debug and DEB("PARSING GETTEXT STRINGS") self.gettext_tokens(tokens, statement) else: tokens.append(statement) @@ -1226,7 +1214,7 @@ """ Append a gettext token and gettext string to the tokens array. @hidden """ - self.DEB("GETTEXT PARSER: TOKEN: " + str) + self._debug and DEB("GETTEXT PARSER: TOKEN: " + str) tokens.append("<TMPL_GETTEXT") tokens.append(str) tokens.append(None) @@ -1234,7 +1222,7 @@ def strip_brackets(self, statement): """ Strip HTML brackets (with optional HTML comments) from the - beggining and from the end of a statement. + beginning and from the end of a statement. @hidden """ if statement.startswith("<!-- TMPL_") or \ @@ -1249,12 +1237,12 @@ """ directive = params[0] del params[0] - self.DEB("TOKENIZER: DIRECTIVE: " + directive) + self._debug and DEB("TOKENIZER: DIRECTIVE: " + directive) return "<" + directive def find_name(self, params): """ Extract identifier from a statement. The identifier can be - specified both implicitely or explicitely as a 'NAME' parameter. + specified both implicitly or explicitly as a 'NAME' parameter. @hidden """ if len(params) > 0 and '=' not in params[0]: @@ -1264,7 +1252,7 @@ else: # explicit identifier as a 'NAME' parameter name = self.find_param("NAME", params) - self.DEB("TOKENIZER: NAME: " + str(name)) + self._debug and DEB("TOKENIZER: NAME: " + str(name)) return name def find_param(self, param, params): @@ -1282,10 +1270,12 @@ else: # The value is without double quotes. ret_value = value - self.DEB("TOKENIZER: PARAM: '%s' => '%s'" % (param, ret_value)) + self._debug and DEB("TOKENIZER: PARAM: '%s' => '%s'"\ + % (param, ret_value)) return ret_value else: - self.DEB("TOKENIZER: PARAM: '%s' => NOT DEFINED" % param) + self._debug and DEB("TOKENIZER: PARAM: '%s' => NOT DEFINED"\ + % param) return None @@ -1322,16 +1312,16 @@ self._include_mtimes = {} if not file: - self.DEB("TEMPLATE WAS COMPILED FROM A STRING") + self._debug and DEB("TEMPLATE WAS COMPILED FROM A STRING") return - # Save modifitcation time of the main template file. + # Save modification time of the main template file. if os.path.isfile(file): self._mtime = os.path.getmtime(file) else: raise TemplateError, "Template: file does not exist: '%s'" % file - # Save modificaton times of all included template files. + # Save modification times of all included template files. for inc_file in include_files: if os.path.isfile(inc_file): self._include_mtimes[inc_file] = os.path.getmtime(inc_file) @@ -1339,7 +1329,7 @@ raise TemplateError, "Template: file does not exist: '%s'"\ % inc_file - self.DEB("NEW TEMPLATE CREATED") + self._debug and DEB("NEW TEMPLATE CREATED") def is_uptodate(self, compile_params=None): """ Check whether the compiled template is uptodate. @@ -1359,15 +1349,15 @@ internal use by the <em>TemplateManager</em>. """ if not self._file: - self.DEB("TEMPLATE COMPILED FROM A STRING") + self._debug and DEB("TEMPLATE COMPILED FROM A STRING") return 0 if self._version != __version__: - self.DEB("TEMPLATE: VERSION NOT UPTODATE") + self._debug and DEB("TEMPLATE: VERSION NOT UPTODATE") return 0 if compile_params != None and compile_params != self._compile_params: - self.DEB("TEMPLATE: DIFFERENT COMPILATION PARAMS") + self._debug and DEB("TEMPLATE: DIFFERENT COMPILATION PARAMS") return 0 # Check modification times of the main template and all included @@ -1377,7 +1367,7 @@ # Main template file. if not (os.path.isfile(self._file) and \ self._mtime == os.path.getmtime(self._file)): - self.DEB("TEMPLATE: NOT UPTODATE: " + self._file) + self._debug and DEB("TEMPLATE: NOT UPTODATE: " + self._file) return 0 # Included templates. @@ -1385,10 +1375,10 @@ if not (os.path.isfile(inc_file) and \ self._include_mtimes[inc_file] == \ os.path.getmtime(inc_file)): - self.DEB("TEMPLATE: NOT UPTODATE: " + inc_file) + self._debug and DEB("TEMPLATE: NOT UPTODATE: " + inc_file) return 0 else: - self.DEB("TEMPLATE: UPTODATE") + self._debug and DEB("TEMPLATE: UPTODATE") return 1 def tokens(self): @@ -1431,13 +1421,6 @@ self.__dict__ = dict - def DEB(self, str): - """ Print debugging message to stderr. - @hidden - """ - if self._debug: print >> sys.stderr, str - - ############################################## # EXCEPTIONS # ############################################## @@ -1452,7 +1435,7 @@ All potential IOError exceptions are handled by the module and are converted to TemplateError exceptions. That means you should catch the TemplateError exception if there is a possibility that for example - the template file will not be accesssible. + the template file will not be accessible. The exception can be raised by constructors or by any method of any class.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor