Skip to content

Commit

Permalink
Merge 4ddfd89 into a29167f
Browse files Browse the repository at this point in the history
  • Loading branch information
MrTango committed Oct 22, 2018
2 parents a29167f + 4ddfd89 commit e0c3fdc
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 45 deletions.
1 change: 1 addition & 0 deletions CHANGES.rst
Expand Up @@ -5,6 +5,7 @@ Changelog
------------------

- Refactor and fix docs
- Fix updating of parent FTI file, when parent type name contains spaces, fixes #331
[MrTango]


Expand Down
16 changes: 16 additions & 0 deletions bobtemplates/plone/base.py
Expand Up @@ -9,6 +9,7 @@
from mrbob.rendering import jinja2_env
from six.moves import input

import case_conversion as cc
import codecs
import keyword
import os
Expand Down Expand Up @@ -441,3 +442,18 @@ def subtemplate_warning_post_question(configurator, question, answer):
print('Abort!')
sys.exit(0)
return answer


def get_normalized_dxtypename(name):
normalized_name = cc.snakecase(get_normalized_ftiname(name))
return normalized_name


def get_normalized_classname(name):
normalized_name = cc.pascalcase(name)
return normalized_name


def get_normalized_ftiname(name):
normalized_name = name.replace(' ', '_')
return normalized_name
80 changes: 41 additions & 39 deletions bobtemplates/plone/content_type.py
Expand Up @@ -2,14 +2,16 @@
"""Generate content type."""

from bobtemplates.plone.base import base_prepare_renderer
from bobtemplates.plone.base import get_normalized_classname
from bobtemplates.plone.base import get_normalized_dxtypename
from bobtemplates.plone.base import get_normalized_ftiname
from bobtemplates.plone.base import git_commit
from bobtemplates.plone.base import is_string_in_file
from bobtemplates.plone.base import update_file
from lxml import etree
from mrbob.bobexceptions import SkipQuestion
from mrbob.bobexceptions import ValidationError

import case_conversion as cc
import keyword
import os
import re
Expand Down Expand Up @@ -119,6 +121,40 @@ def _update_types_xml(configurator):
)


def _update_parent_types_fti_xml(configurator):
parent_ct_name = configurator.variables.get('dexterity_parent_container_type_name') # NOQA: E501
if not parent_ct_name:
return
parent_dexterity_type_fti_file_name = get_normalized_ftiname(parent_ct_name) # NOQA: E501
file_name = u'{0}.xml'.format(
parent_dexterity_type_fti_file_name,
)
file_path = '{0}/profiles/default/types/{1}'.format(
configurator.variables['package_folder'],
file_name,
)

with open(file_path, 'r') as xml_file:
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(xml_file, parser)
type_name = configurator.variables['dexterity_type_name']
if len(tree.xpath(".//element[@value='{name}']".format(name=type_name))): # NOQA: E501
print(
'{name} already in {filename}, skip adding!'.format(
name=type_name,
filename=file_name,
),
)
return

match_str = """<property name="allowed_content_types">"""
insert_str = """ <element value="{0}" />
""".format(
configurator.variables['dexterity_type_name'],
)
update_file(configurator, file_path, match_str, insert_str)


def _update_rolemap_xml(configurator):
file_name = u'rolemap.xml'
file_path = '{0}/profiles/default/{1}'.format(
Expand Down Expand Up @@ -155,38 +191,6 @@ def _update_rolemap_xml(configurator):
update_file(configurator, file_path, match_str, insert_str)


def _update_ct_types_fti_xml(configurator):
parent_ct_name = configurator.variables.get('dexterity_parent_container_type_name') # NOQA: E501
if parent_ct_name:
file_name = u'{0}.xml'.format(
parent_ct_name,
)
file_path = '{0}/profiles/default/types/{1}'.format(
configurator.variables['package_folder'],
file_name,
)

with open(file_path, 'r') as xml_file:
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(xml_file, parser)
type_name = configurator.variables['dexterity_type_name']
if len(tree.xpath(".//element[@value='{name}']".format(name=type_name))): # NOQA: E501
print(
'{name} already in {filename}, skip adding!'.format(
name=type_name,
filename=file_name,
),
)
return

match_str = """<property name="allowed_content_types">"""
insert_str = """ <element value="{0}" />
""".format(
configurator.variables['dexterity_type_name'],
)
update_file(configurator, file_path, match_str, insert_str)


def _update_permissions_zcml(configurator):
file_name = u'permissions.zcml'
file_path = configurator.variables['package_folder'] + '/' + file_name
Expand Down Expand Up @@ -242,21 +246,19 @@ def prepare_renderer(configurator):
configurator = base_prepare_renderer(configurator)
configurator.variables['template_id'] = 'content_type'
type_name = configurator.variables['dexterity_type_name']
dx_type_name_klass = cc.pascalcase(
type_name,
)
dx_type_name_klass = get_normalized_classname(type_name)
configurator.variables['dexterity_type_name_klass'] = dx_type_name_klass
dx_type_fti_file_name = type_name.replace(' ', '_')
dx_type_fti_file_name = get_normalized_ftiname(type_name)
configurator.variables['dexterity_type_fti_file_name'] = dx_type_fti_file_name # NOQA: E501
dx_type_name_normalized = cc.snakecase(dx_type_fti_file_name)
dx_type_name_normalized = get_normalized_dxtypename(type_name)
configurator.variables['dexterity_type_name_normalized'] = dx_type_name_normalized # NOQA: E501
configurator.target_directory = configurator.variables['package_folder']


def post_renderer(configurator):
"""Post rendering."""
_update_types_xml(configurator)
_update_ct_types_fti_xml(configurator)
_update_parent_types_fti_xml(configurator)
_update_permissions_zcml(configurator)
_update_rolemap_xml(configurator)
_update_metadata_xml(configurator)
Expand Down
12 changes: 6 additions & 6 deletions package-tests/test_content_type.py
Expand Up @@ -168,7 +168,7 @@ def test_check_global_allow_false():
content_type.check_global_allow(configurator, None)


def test_update_ct_types_fti_xml(tmpdir):
def test_update_parent_types_fti_xml(tmpdir):
"""Test xml changes when changes are already in place."""
target_path = tmpdir.strpath + '/collective.sample'
package_path = target_path + '/src/collective/sample'
Expand All @@ -178,7 +178,7 @@ def test_update_ct_types_fti_xml(tmpdir):
os.makedirs(profiles_path)
template = """<?xml version="1.0"?>
<object xmlns:i18n="http://xml.zope.org/namespaces/i18n"
name="parent"
name="My Parent"
meta_type="Dexterity FTI"
i18n:domain="collective.sample">
<property name="global_allow">True</property>
Expand All @@ -188,7 +188,7 @@ def test_update_ct_types_fti_xml(tmpdir):
</property>
</object>
"""
with open(os.path.join(profiles_path + '/parent.xml'), 'w') as f:
with open(os.path.join(profiles_path + '/My_Parent.xml'), 'w') as f:
f.write(template)
configurator = Configurator(
template='bobtemplates.plone:content_type',
Expand All @@ -199,13 +199,13 @@ def test_update_ct_types_fti_xml(tmpdir):
variables={
'dexterity_type_name': 'child',
'dexterity_type_global_allow': 'f',
'dexterity_parent_container_type_name': 'parent',
'dexterity_parent_container_type_name': 'My Parent',
},
)
configurator.variables['package_folder'] = package_path
content_type._update_ct_types_fti_xml(configurator)
content_type._update_parent_types_fti_xml(configurator)

with open(os.path.join(profiles_path + '/parent.xml'), 'r') as f:
with open(os.path.join(profiles_path + '/My_Parent.xml'), 'r') as f:
content = f.read()
if content != template:
pytest.raises(ValidationError)
Expand Down

0 comments on commit e0c3fdc

Please sign in to comment.