Skip to content

Commit

Permalink
fix: improved testing environment and fixed existing errors (#35)
Browse files Browse the repository at this point in the history
  • Loading branch information
wfehr committed Feb 29, 2024
1 parent eebaa38 commit 83890e2
Show file tree
Hide file tree
Showing 25 changed files with 534 additions and 146 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ jobs:
uses: liskin/gh-problem-matcher-wrap@v1
with:
linters: isort
run: isort -c -rc -df djangocms_transfer
run: isort --check-only --df djangocms_transfer
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*.log
*.pot
.DS_Store
.coverage
.coverage/
.eggs/
.idea/
Expand All @@ -26,3 +27,6 @@ npm-debug.log
package-lock.json

local.sqlite

# vi
*.swp
7 changes: 6 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,14 @@ You can run tests by executing::

virtualenv env
source env/bin/activate
pip install -r tests/requirements.txt
pip install -r tests/requirements/base.txt
python setup.py test

For code formatting, `black` is used. To automatically fix errors reported from
`black`, you can install it via virtualenv and
`pip install -r tests/requirements/base.txt`.
After this you just need to run `tools/black`.


.. |pypi| image:: https://badge.fury.io/py/djangocms-transfer.svg
:target: http://badge.fury.io/py/djangocms-transfer
Expand Down
9 changes: 5 additions & 4 deletions djangocms_transfer/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
__version__ = '1.0.1'
__version__ = "1.0.1"

default_app_config = 'djangocms_transfer.apps.TranferConfig'
default_app_config = "djangocms_transfer.apps.TranferConfig"


def get_serializer_name(default='python'):
def get_serializer_name(default="python"):
from django.conf import settings
return getattr(settings, 'DJANGO_CMS_TRANSFER_SERIALIZER', default)

return getattr(settings, "DJANGO_CMS_TRANSFER_SERIALIZER", default)
4 changes: 2 additions & 2 deletions djangocms_transfer/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@


class TranferConfig(AppConfig):
name = 'djangocms_transfer'
verbose_name = _('django CMS Transfer')
name = "djangocms_transfer"
verbose_name = _("django CMS Transfer")
106 changes: 59 additions & 47 deletions djangocms_transfer/cms_plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,16 @@ class PluginImporter(CMSPluginBase):

def get_plugin_urls(self):
urlpatterns = [
re_path(r'^export-plugins/$', self.export_plugins_view, name='cms_export_plugins'),
re_path(r'^import-plugins/$', self.import_plugins_view, name='cms_import_plugins'),
re_path(
r"^export-plugins/$",
self.export_plugins_view,
name="cms_export_plugins",
),
re_path(
r"^import-plugins/$",
self.import_plugins_view,
name="cms_import_plugins",
),
]
return urlpatterns

Expand All @@ -40,56 +48,60 @@ def get_extra_plugin_menu_items(cls, request, plugin):
if plugin.plugin_type == cls.__name__:
return

data = urlencode({
'language': get_language_from_request(request),
'plugin': plugin.pk,
})
data = urlencode(
{
"language": get_language_from_request(request),
"plugin": plugin.pk,
}
)
return [
PluginMenuItem(
_('Export plugins'),
admin_reverse('cms_export_plugins') + '?' + data,
_("Export plugins"),
admin_reverse("cms_export_plugins") + "?" + data,
data={},
action='none',
action="none",
attributes={
'icon': 'export',
"icon": "export",
},
),
PluginMenuItem(
_('Import plugins'),
admin_reverse('cms_import_plugins') + '?' + data,
_("Import plugins"),
admin_reverse("cms_import_plugins") + "?" + data,
data={},
action='modal',
action="modal",
attributes={
'icon': 'import',
"icon": "import",
},
),
]

@classmethod # noqa
def get_extra_placeholder_menu_items(cls, request, placeholder): # noqa
data = urlencode({
'language': get_language_from_request(request),
'placeholder': placeholder.pk,
})
data = urlencode(
{
"language": get_language_from_request(request),
"placeholder": placeholder.pk,
}
)
return [
PluginMenuItem(
_('Export plugins'),
admin_reverse('cms_export_plugins') + '?' + data,
_("Export plugins"),
admin_reverse("cms_export_plugins") + "?" + data,
data={},
action='none',
action="none",
attributes={
'icon': 'export',
"icon": "export",
},
),
PluginMenuItem(
_('Import plugins'),
admin_reverse('cms_import_plugins') + '?' + data,
_("Import plugins"),
admin_reverse("cms_import_plugins") + "?" + data,
data={},
action='modal',
action="modal",
attributes={
'icon': 'import',
"icon": "import",
},
)
),
]

@classmethod
Expand All @@ -104,8 +116,8 @@ def import_plugins_view(cls, request):
else:
initial_data = None

if request.method == 'GET' and not new_form.is_valid():
return HttpResponseBadRequest(_('Form received unexpected values.'))
if request.method == "GET" and not new_form.is_valid():
return HttpResponseBadRequest(_("Form received unexpected values."))

import_form = PluginImportForm(
data=request.POST or None,
Expand All @@ -116,25 +128,25 @@ def import_plugins_view(cls, request):
if not import_form.is_valid():
opts = cls.model._meta
context = {
'form': import_form,
'has_change_permission': True,
'opts': opts,
'root_path': reverse('admin:index'),
'is_popup': True,
'app_label': opts.app_label,
'media': (cls().media + import_form.media),
"form": import_form,
"has_change_permission": True,
"opts": opts,
"root_path": reverse("admin:index"),
"is_popup": True,
"app_label": opts.app_label,
"media": (cls().media + import_form.media),
}
return render(request, 'djangocms_transfer/import_plugins.html', context)
return render(request, "djangocms_transfer/import_plugins.html", context)

plugin = import_form.cleaned_data.get('plugin')
language = import_form.cleaned_data['language']
plugin = import_form.cleaned_data.get("plugin")
language = import_form.cleaned_data["language"]

if plugin:
root_id = plugin.pk
placeholder = plugin.placeholder
else:
root_id = None
placeholder = import_form.cleaned_data.get('placeholder')
placeholder = import_form.cleaned_data.get("placeholder")

if not placeholder:
# Page placeholders/plugins import
Expand All @@ -158,10 +170,10 @@ def import_plugins_view(cls, request):
# Placeholder plugins import
new_plugins = placeholder.get_plugins(language).exclude(pk__in=tree_order)
data = json.loads(get_plugin_tree_as_json(request, list(new_plugins)))
data['plugin_order'] = tree_order + ['__COPY__']
data['target_placeholder_id'] = placeholder.pk
context = {'structure_data': json.dumps(data)}
return render(request, 'djangocms_transfer/placeholder_close_frame.html', context)
data["plugin_order"] = tree_order + ["__COPY__"]
data["target_placeholder_id"] = placeholder.pk
context = {"structure_data": json.dumps(data)}
return render(request, "djangocms_transfer/placeholder_close_frame.html", context)

@classmethod
def export_plugins_view(cls, request):
Expand All @@ -171,12 +183,12 @@ def export_plugins_view(cls, request):
form = PluginExportForm(request.GET or None)

if not form.is_valid():
return HttpResponseBadRequest(_('Form received unexpected values.'))
return HttpResponseBadRequest(_("Form received unexpected values."))

# TODO: Check permissions
filename = form.get_filename()
response = HttpResponse(form.run_export(), content_type='application/json')
response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
response = HttpResponse(form.run_export(), content_type="application/json")
response["Content-Disposition"] = "attachment; filename={}".format(filename)
return response


Expand Down
28 changes: 14 additions & 14 deletions djangocms_transfer/cms_toolbars.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
@toolbar_pool.register
class PluginImporter(CMSToolbar):
class Media:
css = {
'all': ('djangocms_transfer/css/transfer.css',)
}
css = {"all": ("djangocms_transfer/css/transfer.css",)}

def populate(self):
# always use draft if we have a page
Expand All @@ -27,30 +25,32 @@ def populate(self):
if not user_can_change_page(self.request.user, page):
return

page_menu = self.toolbar.get_menu('page')
page_menu = self.toolbar.get_menu("page")

if not page_menu or page_menu.disabled:
return

data = urlencode({
'language': self.current_lang,
'cms_page': page.pk,
})
data = urlencode(
{
"language": self.current_lang,
"cms_page": page.pk,
}
)

if GTE_CMS_3_6:
not_edit_mode = not self.toolbar.toolbar_language
else:
not_edit_mode = not self.toolbar.language

page_menu.add_break('Page menu importer break')
page_menu.add_break("Page menu importer break")
page_menu.add_link_item(
gettext('Export'),
url=admin_reverse('cms_export_plugins') + '?' + data,
gettext("Export"),
url=admin_reverse("cms_export_plugins") + "?" + data,
disabled=not_edit_mode,
)
page_menu.add_modal_item(
gettext('Import'),
url=admin_reverse('cms_import_plugins') + '?' + data,
gettext("Import"),
url=admin_reverse("cms_import_plugins") + "?" + data,
disabled=not_edit_mode,
on_close=getattr(self.toolbar, 'request_path', self.request.path),
on_close=getattr(self.toolbar, "request_path", self.request.path),
)
6 changes: 3 additions & 3 deletions djangocms_transfer/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@

cms_version = LooseVersion(cms.__version__)

LTE_CMS_3_4 = cms_version < LooseVersion('3.5')
LTE_CMS_3_5 = cms_version < LooseVersion('3.6')
GTE_CMS_3_6 = cms_version >= LooseVersion('3.6')
LTE_CMS_3_4 = cms_version < LooseVersion("3.5")
LTE_CMS_3_5 = cms_version < LooseVersion("3.6")
GTE_CMS_3_6 = cms_version >= LooseVersion("3.6")
2 changes: 1 addition & 1 deletion djangocms_transfer/datastructures.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from collections import namedtuple

from django.core.serializers import deserialize
from django.conf import settings
from django.core.serializers import deserialize
from django.db import transaction
from django.utils.encoding import force_str
from django.utils.functional import cached_property
Expand Down
10 changes: 5 additions & 5 deletions djangocms_transfer/exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ def export_page(cms_page, language):

def get_plugin_export_data(plugin):
get_data = helpers.get_plugin_data
descendants = plugin.get_descendants().order_by('path')
descendants = plugin.get_descendants().order_by("path")
plugin_data = [get_data(plugin=plugin)]
plugin_data[0]['parent_id'] = None
plugin_data[0]["parent_id"] = None
plugin_data.extend(get_data(plugin) for plugin in helpers.get_bound_plugins(descendants))
return plugin_data

Expand All @@ -41,8 +41,8 @@ def get_placeholder_export_data(placeholder, language):
# First all the root plugins are fetched, then all child plugins.
# This is needed to account for plugin path corruptions.
plugins = itertools.chain(
plugins.filter(depth=1).order_by('position'),
plugins.filter(depth__gt=1).order_by('path'),
plugins.filter(depth=1).order_by("position"),
plugins.filter(depth__gt=1).order_by("path"),
)
return [get_data(plugin) for plugin in helpers.get_bound_plugins(list(plugins))]

Expand All @@ -53,5 +53,5 @@ def get_page_export_data(cms_page, language):

for placeholder in list(placeholders):
plugins = get_placeholder_export_data(placeholder, language)
data.append({'placeholder': placeholder.slot, 'plugins': plugins})
data.append({"placeholder": placeholder.slot, "plugins": plugins})
return data
Loading

0 comments on commit 83890e2

Please sign in to comment.