Skip to content

Commit

Permalink
AA-730 better regular expression
Browse files Browse the repository at this point in the history
  • Loading branch information
jacoor committed Jan 26, 2015
1 parent df02cff commit ccc3a03
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
9 changes: 6 additions & 3 deletions basic_email/views.py
Expand Up @@ -45,6 +45,7 @@ def get_context_data(self, *args, **kwargs):

class PreviewEmailView(TemplateView):
sub_tmp_dir = 'emails_tmp'
tmpl_variable_prefix = '{##_'

def get_email_template(self, *args, **kwargs):
if not self.request.GET.get('template'):
Expand Down Expand Up @@ -74,7 +75,7 @@ def content_encode(self, content):
content = content.replace('{% block ', '{#_block ')
content = content.replace('{% endblock ', '{#_endblock ')
content = content.replace('{%', '{#_')
content = content.replace('{{', '{##_ ')
content = content.replace('{{', self.tmpl_variable_prefix)
content = content.replace('{#_extends', '{% extends')
content = content.replace('{#_block ', '{% block ')
content = content.replace('{#_endblock ', '{% endblock ')
Expand Down Expand Up @@ -103,8 +104,10 @@ def list_template_variables(self):
self.prepare_tmp_files(tmp_dir)
file_name = self.get_email_template().replace(settings.BASIC_EMAIL_DIRECTORY, self.sub_tmp_dir)
content = render_to_string(file_name)
regexp = re.compile('(?<={##_ )\w+')
variables = regexp.findall(content)
regexp = re.compile(self.tmpl_variable_prefix + '\s*\w+')
# this regexp (?<={##_\s+)\w+') will not work since look behind statement requires fixed width expression
# need to manually remove prefix
variables = [v.replace(self.tmpl_variable_prefix, '').strip() for v in regexp.findall(content)]
shutil.rmtree(tmp_dir) # careful! removes whole tree.
return variables

Expand Down
11 changes: 11 additions & 0 deletions example_project/templates/emails/email_start.html
Expand Up @@ -36,6 +36,17 @@
<h3>Welcome, Elijah Baily {{test_template_variable_1}}</h3>
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et. {{test_template_variable_2}}</p>

<p>
Testing variable 3 {{ test_template_variable_3 }}
</p>

<p>
Testing variable 4 {{ test_template_variable_4 }}
</p>

<p>
Testing variable 5 {{ test_template_variable_5 }}
</p>
<!-- A Real Hero (and a real human being) -->
<p><img src="http://placehold.it/600x300" /></p><!-- /hero -->

Expand Down
12 changes: 8 additions & 4 deletions example_project/tests/tests.py
Expand Up @@ -61,7 +61,11 @@ def test_variables_list(self):
# proper
response = self.client.get(reverse('list-email-template-variables') + '?template=email_start.html')
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.context['template_variables']), 3)
self.assertEqual(response.context['template_variables'][0], 'test_base_template_variable')
self.assertEqual(response.context['template_variables'][1], 'test_template_variable_1')
self.assertEqual(response.context['template_variables'][2], 'test_template_variable_2')
self.assertEqual(len(response.context['template_variables']), 7)
self.assertEqual(response.context['template_variables'][0], 'emailSubject')
self.assertEqual(response.context['template_variables'][1], 'test_base_template_variable')
self.assertEqual(response.context['template_variables'][2], 'test_template_variable_1')
self.assertEqual(response.context['template_variables'][3], 'test_template_variable_2')
self.assertEqual(response.context['template_variables'][4], 'test_template_variable_3')
self.assertEqual(response.context['template_variables'][5], 'test_template_variable_4')
self.assertEqual(response.context['template_variables'][6], 'test_template_variable_5')

0 comments on commit ccc3a03

Please sign in to comment.