2009-12-15 14:26:01 +00:00
|
|
|
#
|
2010-02-23 13:20:05 +00:00
|
|
|
# ltmpl.py
|
2010-01-12 11:45:54 +00:00
|
|
|
#
|
|
|
|
# Copyright (C) 2009 Red Hat, Inc.
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
# Red Hat Author(s): Martin Gracik <mgracik@redhat.com>
|
2009-12-15 14:26:01 +00:00
|
|
|
#
|
|
|
|
|
2010-10-29 12:41:23 +00:00
|
|
|
import sys
|
2010-10-12 16:23:29 +00:00
|
|
|
import shlex
|
2009-12-15 14:26:01 +00:00
|
|
|
|
2010-10-12 16:23:29 +00:00
|
|
|
from mako.lookup import TemplateLookup
|
2011-05-26 18:08:01 +00:00
|
|
|
from mako.exceptions import text_error_template
|
2009-12-15 14:26:01 +00:00
|
|
|
|
2010-10-12 16:23:29 +00:00
|
|
|
|
|
|
|
class LoraxTemplate(object):
|
2011-05-10 03:42:10 +00:00
|
|
|
def __init__(self, directories=["/usr/share/lorax"]):
|
|
|
|
# we have to add ["/"] to the template lookup directories or the
|
|
|
|
# file includes won't work properly for absolute paths
|
|
|
|
self.directories = ["/"] + directories
|
2009-12-15 14:26:01 +00:00
|
|
|
|
2010-02-23 13:20:05 +00:00
|
|
|
def parse(self, template_file, variables):
|
2011-05-10 03:42:10 +00:00
|
|
|
lookup = TemplateLookup(directories=self.directories)
|
|
|
|
template = lookup.get_template(template_file)
|
2010-10-29 12:41:23 +00:00
|
|
|
|
|
|
|
try:
|
2010-12-02 12:20:41 +00:00
|
|
|
textbuf = template.render(**variables)
|
2010-10-29 12:41:23 +00:00
|
|
|
except:
|
2011-05-26 18:08:01 +00:00
|
|
|
print text_error_template().render()
|
2010-10-29 12:41:23 +00:00
|
|
|
sys.exit(2)
|
2010-02-23 13:20:05 +00:00
|
|
|
|
2010-10-12 16:23:29 +00:00
|
|
|
# split, strip and remove empty lines
|
2010-12-02 12:20:41 +00:00
|
|
|
lines = textbuf.splitlines()
|
2010-10-12 16:23:29 +00:00
|
|
|
lines = map(lambda line: line.strip(), lines)
|
|
|
|
lines = filter(lambda line: line, lines)
|
|
|
|
|
2011-03-10 09:53:55 +00:00
|
|
|
# mako template now returns unicode strings
|
|
|
|
lines = map(lambda line: line.encode("ascii"), lines)
|
|
|
|
|
2010-10-12 16:23:29 +00:00
|
|
|
# split with shlex
|
2010-12-02 12:20:41 +00:00
|
|
|
lines = map(shlex.split, lines)
|
2010-10-12 16:23:29 +00:00
|
|
|
|
2011-04-27 20:37:19 +00:00
|
|
|
self.lines = lines
|
2010-02-23 13:20:05 +00:00
|
|
|
return lines
|
2011-04-27 20:37:19 +00:00
|
|
|
|
|
|
|
def getdata(self, cmd, mode="tokens"):
|
|
|
|
'''returns a generator that yields every token on every line starting
|
|
|
|
with 'cmd'. if mode is "lines", you get a list for each line instead.'''
|
|
|
|
if mode == "lines":
|
|
|
|
return (f[1:] for f in self.lines if f[0]==cmd)
|
|
|
|
else:
|
|
|
|
return (i for f in self.lines if f[0]==cmd for i in f[1:])
|