Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Empty block in middle of %if...%elif...%elif...%else...%endif doesn't get a pass in the Python, leading to an IndentationError #146

Open
sqlalchemy-bot opened this issue Aug 10, 2010 · 9 comments
Labels
bug Something isn't working compiler low priority

Comments

@sqlalchemy-bot
Copy link

Migrated issue, originally created by Anonymous

How-To-Reproduce:

% if True:
test
% elif lose:
## do nothing
% elif False:
broken
% endif

Results:

An IndentationError pointing at the next line of code after the do-nothing block, complaining that Python was expecting an indented block.

Workaround:
Add <%pass%> to the do-nothing block


Attachments: 146.patch | 146.2.patch | 146.3.patch

@sqlalchemy-bot
Copy link
Author

Michael Bayer (@zzzeek) wrote:

a very old bug which I thought we had a bug report for, thought we fixed, but all these assumptions (except the first) are wrong.

@sqlalchemy-bot
Copy link
Author

Anonymous wrote:

Don't you have to add a 'pass' in that same situation in Python? Isn't this asking mako behavior to diverge from Python unnecessarily? Although it would indeed be more convenient to not have to manually insert the pass statement.

@sqlalchemy-bot
Copy link
Author

Michael Bayer (@zzzeek) wrote:

the patch is in 1b4d1fb but doesn't actually fix the above test case, it appears that the comment line screws it up:

from mako.template import Template
template = r"""
% if True:
test
% elif lose:
##  do nothing
% elif False:
broken
% endif
"""

t = Template(template)
print t.render()



Traceback (most recent call last):
  File "test.py", line 12, in <module>
    t = Template(template)
  File "/Users/classic/dev/mako/mako/template.py", line 258, in __init__
    (code, module) = _compile_text(self, text, filename)
  File "/Users/classic/dev/mako/mako/template.py", line 606, in _compile_text
    code = compile(source, cid, 'exec')
  File "memory:0x1004a68d0", line 29
    elif False:
       ^
IndentationError: expected an indented block

taking out the comment, it's fine:

from mako.template import Template
template = r"""
% if True:
test
% elif lose:
% elif False:
broken
% endif
"""

t = Template(template)
print t.render()

@sqlalchemy-bot
Copy link
Author

Michael Bayer (@zzzeek) wrote:

great, 8cce610 and we're done ! thanks!

@sqlalchemy-bot
Copy link
Author

Changes by Michael Bayer (@zzzeek):

  • changed status to closed

@smarie
Copy link

smarie commented Apr 12, 2019

Hi there, it seems that if the empty statement is the first one it still fails:

from mako.template import Template
template = r"""
% if True:
% elif lose:
test
% elif False:
broken
% endif
"""

t = Template(template)
print(t.render())  # IndentationError: expected an indented block

So the bug is not entirely fixed.

@zzzeek
Copy link
Member

zzzeek commented Apr 12, 2019

hi there -

unfortunately Mako needs a maintainer to be able to look into these issues, I can only submit PRs with tests I don't have time to diagnose intricate issues like these.

@smarie
Copy link

smarie commented Apr 12, 2019

no worries I found a workaround, but could you please just reopen the ticket so that when a maintainer is active, he will know what to fix ? Thanks!

@zzzeek
Copy link
Member

zzzeek commented Apr 12, 2019

Sure! github lets you do all that stuff too.

@zzzeek zzzeek reopened this Apr 12, 2019
cocolato added a commit to cocolato/mako that referenced this issue Feb 6, 2024
Closes: sqlalchemy#387
Pull-request: sqlalchemy#387
Pull-request-sha: f816f1f
sqlalchemy-bot pushed a commit that referenced this issue Apr 3, 2024
…sed.

Fixes: #146

When the first control block is empty or comment, the correct result will now be rendered.

```python
from mako.template import Template
template = r"""
% if False:
% elif False:
% else:
    test
% endif
"""

t = Template(template)
print(t.render())
```

Result:
```

    test

```

Closes: #387
Pull-request: #387
Pull-request-sha: fb257ff

Change-Id: Ief78cdf4eb39b6e8257332ed034dab052c715420
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working compiler low priority
Projects
None yet
Development

No branches or pull requests

3 participants