Skip to content

Commit

Permalink
Merge pull request #71 from plone/plone-base-overhaul
Browse files Browse the repository at this point in the history
Plone base overhaul
  • Loading branch information
pbauer authored May 3, 2022
2 parents b3e7b4d + 5a55db2 commit a324729
Show file tree
Hide file tree
Showing 72 changed files with 1,692 additions and 1,862 deletions.
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

0 comments on commit a324729

Please sign in to comment.