Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pystache_custom
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
pystache_custom
Commits
0de74f66
Commit
0de74f66
authored
May 05, 2012
by
Chris Jerdonek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added pretty-printing to the nodes of the ParsedTemplate.
parent
37b4e3dc
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
8 deletions
+45
-8
pystache/parser.py
+45
-8
No files found.
pystache/parser.py
View file @
0de74f66
...
...
@@ -26,6 +26,11 @@ def parse(template, delimiters=None):
delimiters: a 2-tuple of delimiters. Defaults to the package default.
Examples:
>>> parse("Hey {{#you}}{{name}}!{{/you}}")
['Hey ', _SectionNode(key='you', index_begin=12, index_end=21, parsed=[_EscapeNode(key='name'), '!'])]
"""
parser
=
_Parser
(
delimiters
)
return
parser
.
parse
(
template
)
...
...
@@ -66,9 +71,23 @@ class ParsingError(Exception):
## Node types
def
_format
(
obj
,
exclude
=
None
):
if
exclude
is
None
:
exclude
=
[]
exclude
.
append
(
'key'
)
attrs
=
obj
.
__dict__
names
=
list
(
set
(
attrs
.
keys
())
-
set
(
exclude
))
names
.
sort
()
names
.
insert
(
0
,
'key'
)
args
=
[
"
%
s=
%
s"
%
(
name
,
repr
(
attrs
[
name
]))
for
name
in
names
]
return
"
%
s(
%
s)"
%
(
obj
.
__class__
.
__name__
,
", "
.
join
(
args
))
class
_CommentNode
(
object
):
def
__repr__
(
self
):
return
_format
(
self
)
def
render
(
self
,
engine
,
context
):
return
u''
...
...
@@ -78,15 +97,21 @@ class _ChangeNode(object):
def
__init__
(
self
,
delimiters
):
self
.
delimiters
=
delimiters
def
__repr__
(
self
):
return
_format
(
self
)
def
render
(
self
,
engine
,
context
):
return
u''
class
_
Tag
Node
(
object
):
class
_
Escape
Node
(
object
):
def
__init__
(
self
,
key
):
self
.
key
=
key
def
__repr__
(
self
):
return
_format
(
self
)
def
render
(
self
,
engine
,
context
):
s
=
engine
.
fetch_string
(
context
,
self
.
key
)
return
engine
.
escape
(
s
)
...
...
@@ -97,6 +122,9 @@ class _LiteralNode(object):
def
__init__
(
self
,
key
):
self
.
key
=
key
def
__repr__
(
self
):
return
_format
(
self
)
def
render
(
self
,
engine
,
context
):
s
=
engine
.
fetch_string
(
context
,
self
.
key
)
return
engine
.
literal
(
s
)
...
...
@@ -108,6 +136,9 @@ class _PartialNode(object):
self
.
key
=
key
self
.
indent
=
indent
def
__repr__
(
self
):
return
_format
(
self
)
def
render
(
self
,
engine
,
context
):
template
=
engine
.
resolve_partial
(
self
.
key
)
# Indent before rendering.
...
...
@@ -122,6 +153,9 @@ class _InvertedNode(object):
self
.
key
=
key
self
.
parsed_section
=
parsed_section
def
__repr__
(
self
):
return
_format
(
self
)
def
render
(
self
,
engine
,
context
):
# TODO: is there a bug because we are not using the same
# logic as in fetch_string()?
...
...
@@ -138,13 +172,16 @@ class _SectionNode(object):
# TODO: the template_ and parsed_template_ arguments don't both seem
# to be necessary. Can we remove one of them? For example, if
# callable(data) is True, then the initial parsed_template isn't used.
def
__init__
(
self
,
key
,
parsed
_contents
,
delimiters
,
template
,
section_begin_index
,
section_end_index
):
def
__init__
(
self
,
key
,
parsed
,
delimiters
,
template
,
index_begin
,
index_end
):
self
.
delimiters
=
delimiters
self
.
key
=
key
self
.
parsed
_contents
=
parsed_contents
self
.
parsed
=
parsed
self
.
template
=
template
self
.
section_begin_index
=
section_begin_index
self
.
section_end_index
=
section_end_index
self
.
index_begin
=
index_begin
self
.
index_end
=
index_end
def
__repr__
(
self
):
return
_format
(
self
,
exclude
=
[
'delimiters'
,
'template'
])
def
render
(
self
,
engine
,
context
):
data
=
engine
.
fetch_section_data
(
context
,
self
.
key
)
...
...
@@ -167,13 +204,13 @@ class _SectionNode(object):
# https://github.com/defunkt/pystache/issues/113
#
# TODO: should we check the arity?
val
=
val
(
self
.
template
[
self
.
section_begin_index
:
self
.
section_end_index
])
val
=
val
(
self
.
template
[
self
.
index_begin
:
self
.
index_end
])
val
=
engine
.
_render_value
(
val
,
context
,
delimiters
=
self
.
delimiters
)
parts
.
append
(
val
)
continue
context
.
push
(
val
)
parts
.
append
(
engine
.
render_parsed
(
self
.
parsed
_contents
,
context
))
parts
.
append
(
engine
.
render_parsed
(
self
.
parsed
,
context
))
context
.
pop
()
return
unicode
(
''
.
join
(
parts
))
...
...
@@ -310,7 +347,7 @@ class _Parser(object):
return
_ChangeNode
(
delimiters
)
if
tag_type
==
''
:
return
_
Tag
Node
(
tag_key
)
return
_
Escape
Node
(
tag_key
)
if
tag_type
==
'&'
:
return
_LiteralNode
(
tag_key
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment