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

Plone base overhaul #71

Merged
merged 6 commits into from
May 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 72 additions & 48 deletions bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@
use the -c option to specify an alternate configuration file.
"""

from optparse import OptionParser

import os
import shutil
import sys
import tempfile

from optparse import OptionParser

tmpeggs = tempfile.mkdtemp()

usage = '''\
usage = """\
[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]

Bootstraps a buildout-based project.
Expand All @@ -37,28 +38,40 @@

Note that by using --find-links to point to local resources, you can keep
this script from going over the network.
'''
"""

parser = OptionParser(usage=usage)
parser.add_option("-v", "--version", help="use a specific zc.buildout version")

parser.add_option("-t", "--accept-buildout-test-releases",
dest='accept_buildout_test_releases',
action="store_true", default=False,
help=("Normally, if you do not specify a --version, the "
"bootstrap script and buildout gets the newest "
"*final* versions of zc.buildout and its recipes and "
"extensions for you. If you use this flag, "
"bootstrap and buildout will get the newest releases "
"even if they are alphas or betas."))
parser.add_option("-c", "--config-file",
help=("Specify the path to the buildout configuration "
"file to be used."))
parser.add_option("-f", "--find-links",
help=("Specify a URL to search for buildout releases"))
parser.add_option("--allow-site-packages",
action="store_true", default=False,
help=("Let bootstrap.py use existing site packages"))
parser.add_option(
"-t",
"--accept-buildout-test-releases",
dest="accept_buildout_test_releases",
action="store_true",
default=False,
help=(
"Normally, if you do not specify a --version, the "
"bootstrap script and buildout gets the newest "
"*final* versions of zc.buildout and its recipes and "
"extensions for you. If you use this flag, "
"bootstrap and buildout will get the newest releases "
"even if they are alphas or betas."
),
)
parser.add_option(
"-c",
"--config-file",
help=("Specify the path to the buildout configuration " "file to be used."),
)
parser.add_option(
"-f", "--find-links", help=("Specify a URL to search for buildout releases")
)
parser.add_option(
"--allow-site-packages",
action="store_true",
default=False,
help=("Let bootstrap.py use existing site packages"),
)


options, args = parser.parse_args()
Expand All @@ -75,23 +88,25 @@
from urllib2 import urlopen

ez = {}
exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez)
exec(urlopen("https://bootstrap.pypa.io/ez_setup.py").read(), ez)

if not options.allow_site_packages:
# ez_setup imports site, which adds site packages
# this will remove them from the path to ensure that incompatible versions
# this will remove them from the path to ensure that incompatible versions
# of setuptools are not in the path
import site
# inside a virtualenv, there is no 'getsitepackages'.

# inside a virtualenv, there is no 'getsitepackages'.
# We can't remove these reliably
if hasattr(site, 'getsitepackages'):
if hasattr(site, "getsitepackages"):
for sitepackage_path in site.getsitepackages():
sys.path[:] = [x for x in sys.path if sitepackage_path not in x]

setup_args = dict(to_dir=tmpeggs, download_delay=0)
ez['use_setuptools'](**setup_args)
import setuptools
ez["use_setuptools"](**setup_args)
import pkg_resources
import setuptools


# This does not (always?) update the default working set. We will
# do it.
Expand All @@ -104,36 +119,43 @@

ws = pkg_resources.working_set

cmd = [sys.executable, '-c',
'from setuptools.command.easy_install import main; main()',
'-mZqNxd', tmpeggs]
cmd = [
sys.executable,
"-c",
"from setuptools.command.easy_install import main; main()",
"-mZqNxd",
tmpeggs,
]

find_links = os.environ.get(
'bootstrap-testing-find-links',
options.find_links or
('http://downloads.buildout.org/'
if options.accept_buildout_test_releases else None)
)
"bootstrap-testing-find-links",
options.find_links
or (
"http://downloads.buildout.org/"
if options.accept_buildout_test_releases
else None
),
)
if find_links:
cmd.extend(['-f', find_links])
cmd.extend(["-f", find_links])

setuptools_path = ws.find(
pkg_resources.Requirement.parse('setuptools')).location
setuptools_path = ws.find(pkg_resources.Requirement.parse("setuptools")).location

requirement = 'zc.buildout'
requirement = "zc.buildout"
version = options.version
if version is None and not options.accept_buildout_test_releases:
# Figure out the most recent final version of zc.buildout.
import setuptools.package_index
_final_parts = '*final-', '*final'

_final_parts = "*final-", "*final"

def _final_version(parsed_version):
for part in parsed_version:
if (part[:1] == '*') and (part not in _final_parts):
if (part[:1] == "*") and (part not in _final_parts):
return False
return True
index = setuptools.package_index.PackageIndex(
search_path=[setuptools_path])

index = setuptools.package_index.PackageIndex(search_path=[setuptools_path])
if find_links:
index.add_find_links((find_links,))
req = pkg_resources.Requirement.parse(requirement)
Expand All @@ -152,13 +174,14 @@ def _final_version(parsed_version):
best.sort()
version = best[-1].version
if version:
requirement = '=='.join((requirement, version))
requirement = "==".join((requirement, version))
cmd.append(requirement)

import subprocess


if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0:
raise Exception(
"Failed to execute command:\n%s" % repr(cmd)[1:-1])
raise Exception("Failed to execute command:\n%s" % repr(cmd)[1:-1])

######################################################################
# Import and run buildout
Expand All @@ -167,12 +190,13 @@ def _final_version(parsed_version):
ws.require(requirement)
import zc.buildout.buildout

if not [a for a in args if '=' not in a]:
args.append('bootstrap')

if not [a for a in args if "=" not in a]:
args.append("bootstrap")

# if -c was provided, we push it back into args for buildout' main function
if options.config_file is not None:
args[0:0] = ['-c', options.config_file]
args[0:0] = ["-c", options.config_file]

zc.buildout.buildout.main(args)
shutil.rmtree(tmpeggs)
2 changes: 2 additions & 0 deletions news/71.breaking
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Code style, use plone.base and remove Archetypes bbb code.
[jensens]
3 changes: 1 addition & 2 deletions plone/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
# -*- coding: utf-8 -*-
__import__('pkg_resources').declare_namespace(__name__)
__import__("pkg_resources").declare_namespace(__name__)
3 changes: 1 addition & 2 deletions plone/app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
# -*- coding: utf-8 -*-
__import__('pkg_resources').declare_namespace(__name__)
__import__("pkg_resources").declare_namespace(__name__)
3 changes: 1 addition & 2 deletions plone/app/contentrules/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
# Import PloneMessageFactory to create messages in the plone domain
from zope.i18nmessageid import MessageFactory


PloneMessageFactory = MessageFactory('plone')
PloneMessageFactory = MessageFactory("plone")
26 changes: 12 additions & 14 deletions plone/app/contentrules/actions/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
from plone.app.contentrules.browser.formhelper import AddForm
from plone.app.contentrules.browser.formhelper import EditForm
from plone.app.uuid.utils import uuidToPhysicalPath
Expand All @@ -9,33 +8,33 @@
import os


class ContentWrapper(object):
class ContentWrapper:
"""
The sole purpose of this is to transform target_folder
values from UUID to path, which all of content rules expects
"""

def __init__(self, content):
self.__dict__['content'] = content
self.__dict__["content"] = content

@property
def target_folder(self):
content = self.content

if content.target_folder and content.target_folder[0] == '/':
if content.target_folder and content.target_folder[0] == "/":
# need to convert to uuid
site = getSite()
site_path = '/'.join(site.getPhysicalPath())
path = os.path.join(site_path, content.target_folder.lstrip('/'))
site_path = "/".join(site.getPhysicalPath())
path = os.path.join(site_path, content.target_folder.lstrip("/"))
target = site.restrictedTraverse(path, None)
if target is not None:
return IUUID(target, None)

def __getattr__(self, name, default=None):
return getattr(self.__dict__['content'], name, default)
return getattr(self.__dict__["content"], name, default)

def __setattr__(self, name, value):
setattr(self.__dict__['content'], name, value)
setattr(self.__dict__["content"], name, value)


class ActionAddForm(AddForm):
Expand All @@ -47,17 +46,16 @@ def create(self, data):
is what the z3c form widget uses, to paths.
"""
a = self.Type()
if data.get('target_folder', None):
if data.get("target_folder", None):
site = getSite()
site_path = '/'.join(site.getPhysicalPath())
path = uuidToPhysicalPath(data['target_folder'])
site_path = "/".join(site.getPhysicalPath())
path = uuidToPhysicalPath(data["target_folder"])
if path:
data['target_folder'] = path[len(site_path):]
data["target_folder"] = path[len(site_path) :]
form.applyChanges(self, a, data)
return a


class ActionEditForm(EditForm):

def getContent(self):
return ContentWrapper(super(ActionEditForm, self).getContent())
return ContentWrapper(super().getContent())
Loading