Exemple #1
0
 def get_contents(self, origin):
     try:
         # with open(origin.name, encoding=self.engine.file_charset) as fp:
         path = self.get_theme_template_path(origin.loader, origin.template_name)
         with default_theme_storage.open(path) as fp:
             logger.debug("serving -- %s::%s" % (origin.loader.path, origin.template_name))
             return fp.read()
     except IOError as e:
         if e.errno == errno.ENOENT:
             raise TemplateDoesNotExist(origin)
         raise
Exemple #2
0
    def new_file(self, request, theme, path, paths_and_parts):
        opts = self.model._meta

        form = None
        if request.POST:
            form = ThemeAdminFileForm(request.POST)

            path = request.POST.get('path')
            if default_theme_storage.exists(path):
                raise Error
            elif form.is_valid():
                message = _("File '%s' saved successfully!") % path

                full_path = "/".join([theme.path, path])
                with default_theme_storage.open(full_path, 'w') as fh:
                    fh.write(request.POST.get('file_editor'))

                messages.success(request, message)

                return redirect(
                    reverse("admin:django_themes_theme_theme_editor",
                            kwargs={
                                'theme_id': theme.pk,
                                'path': path
                            }))

        template = "admin/django_themes/editor/file_text_editor.html"

        if form is None:
            form = ThemeAdminFileForm(initial={
                'path': path + '/new_file',
                'file_editor': ""
            })

        context = {
            "opts":
            opts,
            "title":
            "Creating new file | Theme Editor {theme.name}".format(
                theme=theme),
            "app_label":
            opts.app_label,
            "model_name":
            capfirst(opts.verbose_name),
            "theme":
            theme,
            "path":
            path,
            "paths":
            paths_and_parts,
            "form":
            form,
        }
        return render(request, template, context)
Exemple #3
0
    def delete_file(self, request, theme, path, paths_and_parts):
        opts = self.model._meta

        if request.POST:
            default_theme_storage.delete("/".join([theme.path, path]))
            message = _("File '%s' deleted successfully!") % path
            messages.success(request, message)
            return redirect(
                reverse("admin:django_themes_theme_theme_editor",
                        kwargs={
                            'theme_id': theme.pk,
                            'path': path.rsplit('/', 1)[0]
                        }))

        template = "admin/django_themes/editor/file_delete.html"

        lines = 0
        contents = ""
        size = None
        with default_theme_storage.open("/".join([theme.path, path])) as fh:
            size = " ".join(map(str, sizeof_fmt(fh.size)))
            for line in fh:
                contents += line
                lines += 1

        context = {
            "opts": opts,
            "title": "Theme Editor - deleting %s:%s" % (
                theme,
                path,
            ),
            "app_label": opts.app_label,
            "model_name": capfirst(opts.verbose_name),
            "theme": theme,
            "path": path,
            "paths": paths_and_parts,
            "file": {
                'name': path.split('/')[-1],
                'path': path,
                'contents': contents,
                'lines': lines,
                'size': size,
                # 'file': default_theme_storage
            }
        }
        return render(request, template, context)
Exemple #4
0
    def render_folder(self, request, theme, path, paths_and_parts):
        opts = self.model._meta
        _folders, _files = default_theme_storage.listdir("/".join(
            [theme.path, path]))
        folders = [{
            'name': folder,
            'path': posixpath.join(path, folder)
        } for folder in _folders]

        if len(paths_and_parts) > 1:
            folders.insert(0, {'name': '..', 'path': paths_and_parts[-2][-1]})

        files = []

        for file in _files:
            fname = "/".join([theme.path, path, file])
            fh = default_theme_storage.open(fname)
            files.append({
                'name': file,
                'path': posixpath.join(path, file),
                'size': " ".join(sizeof_fmt(fh.size)),
                'modified': default_theme_storage.modified_time(fname)
            })
        context = {
            "opts":
            opts,
            "title":
            "Viewing {folder} | Theme Editor {theme.name}".format(theme=theme,
                                                                  folder=path),
            "app_label":
            opts.app_label,
            "model_name":
            capfirst(opts.verbose_name),
            "theme":
            theme,
            "path":
            path,
            "paths":
            paths_and_parts,
            "files":
            files,
            "folders":
            folders,
        }
        return render(request, self.themes_folder_template, context)
Exemple #5
0
    def render_file(self, request, theme, path, paths_and_parts):
        opts = self.model._meta

        template = "admin/django_themes/editor/file_text_viewer.html"
        # file
        lines = 0
        contents = ""
        size = None
        with default_theme_storage.open("/".join([theme.path, path])) as fh:
            size = " ".join(map(str, sizeof_fmt(fh.size)))
            for line in fh:
                contents += line
                lines += 1
        # contents = .read()
        context = {
            "opts":
            opts,
            "title":
            "Viewing file {file} | Theme Editor {theme.name}".format(
                theme=theme, file=path),
            "app_label":
            opts.app_label,
            "model_name":
            capfirst(opts.verbose_name),
            "theme":
            theme,
            "path":
            path,
            "paths":
            paths_and_parts,
            "file": {
                'name': file,
                'path': path,
                'contents': contents,
                'lines': lines,
                'size': size,
                'ext': path.split('.')[-1]
                # 'file': default_theme_storage
            }
        }
        return render(request, template, context)
Exemple #6
0
    def edit_file(self, request, theme, path, paths_and_parts):
        opts = self.model._meta

        form = None
        if request.POST:
            form = ThemeAdminFileForm(request.POST)

            if form.is_valid():

                post_save_delete_path = None
                if request.POST.get('path') != path:
                    # Check stuff
                    post_save_delete_path = path
                    path = request.POST.get('path')

                    message = _(
                        "File '%s' saved and renamed successfully!") % path
                else:
                    message = _("File '%s' saved successfully!") % path

                full_path = "/".join([theme.path, path])
                if default_theme_storage.exists(full_path):
                    with default_theme_storage.open(full_path, 'w') as fh:
                        fh.write(request.POST.get('file_editor'))
                else:
                    default_theme_storage.save(
                        full_path,
                        ContentFile(request.POST.get('file_editor')))

                messages.success(request, message)
                if post_save_delete_path:
                    default_theme_storage.delete("/".join(
                        [theme.path, post_save_delete_path]))

                return redirect(
                    reverse("admin:django_themes_theme_theme_editor",
                            kwargs={
                                'theme_id': theme.pk,
                                'path': path
                            }))

        template = "admin/django_themes/editor/file_text_editor.html"

        lines = 0
        contents = ""
        size = None
        with default_theme_storage.open("/".join([theme.path, path])) as fh:
            size = " ".join(map(str, sizeof_fmt(fh.size)))
            for line in fh:
                contents += line
                lines += 1

        if form is None:
            form = ThemeAdminFileForm(initial={
                'path': path,
                'file_editor': contents
            })

        context = {
            "opts":
            opts,
            "title":
            "Editing file {file} | Theme Editor {theme.name}".format(
                theme=theme, file=path),
            "app_label":
            opts.app_label,
            "model_name":
            capfirst(opts.verbose_name),
            "theme":
            theme,
            "path":
            path,
            "paths":
            paths_and_parts,
            "form":
            form,
            "file": {
                'name': path.split('/')[-1],
                'path': path,
                'contents': contents,
                'lines': lines,
                'size': size,
                'ext': path.split('.')[-1]
                # 'file': default_theme_storage
            }
        }
        return render(request, template, context)