Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.buildout
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
6
Merge Requests
6
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
slapos.buildout
Commits
c8f02362
Commit
c8f02362
authored
Jul 03, 2018
by
Reinout van Rees
Committed by
GitHub
Jul 03, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #459 from NextThought/fix-warnings
Fix most Deprecation and Resource warnings.
parents
c6e878af
f1589378
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
147 additions
and
117 deletions
+147
-117
Makefile
Makefile
+1
-1
doc/topics/bootstrapping.rst
doc/topics/bootstrapping.rst
+4
-1
setup.py
setup.py
+2
-1
src/zc/buildout/bootstrap.txt
src/zc/buildout/bootstrap.txt
+8
-6
src/zc/buildout/bootstrap_cl_settings.test
src/zc/buildout/bootstrap_cl_settings.test
+4
-2
src/zc/buildout/buildout.py
src/zc/buildout/buildout.py
+9
-9
src/zc/buildout/buildout.txt
src/zc/buildout/buildout.txt
+4
-0
src/zc/buildout/configparser.py
src/zc/buildout/configparser.py
+1
-1
src/zc/buildout/configparser.test
src/zc/buildout/configparser.test
+24
-24
src/zc/buildout/download.py
src/zc/buildout/download.py
+1
-8
src/zc/buildout/easy_install.py
src/zc/buildout/easy_install.py
+1
-1
src/zc/buildout/repeatable.txt
src/zc/buildout/repeatable.txt
+2
-2
src/zc/buildout/rmtree.py
src/zc/buildout/rmtree.py
+1
-2
src/zc/buildout/testing.py
src/zc/buildout/testing.py
+19
-2
src/zc/buildout/tests.py
src/zc/buildout/tests.py
+52
-44
src/zc/buildout/windows.txt
src/zc/buildout/windows.txt
+1
-1
tox.ini
tox.ini
+1
-1
zc.recipe.egg_/setup.py
zc.recipe.egg_/setup.py
+2
-1
zc.recipe.egg_/src/zc/recipe/egg/egg.py
zc.recipe.egg_/src/zc/recipe/egg/egg.py
+1
-1
zc.recipe.egg_/src/zc/recipe/egg/tests.py
zc.recipe.egg_/src/zc/recipe/egg/tests.py
+9
-9
No files found.
Makefile
View file @
c8f02362
...
@@ -51,4 +51,4 @@ clean:
...
@@ -51,4 +51,4 @@ clean:
rm
-rf
$(BUILD_DIRS)
$(PYTHON_BUILD_DIR)
rm
-rf
$(BUILD_DIRS)
$(PYTHON_BUILD_DIR)
test
:
test
:
$(HERE)
/bin/test
-1
-vvv
$(HERE)
/bin/test
-1
-vvv
-c
doc/topics/bootstrapping.rst
View file @
c8f02362
...
@@ -97,6 +97,8 @@ And then run it:
...
@@ -97,6 +97,8 @@ And then run it:
>>> eqs(os.listdir("."), 'bootstrap-buildout.py',
>>> eqs(os.listdir("."), 'bootstrap-buildout.py',
... 'buildout.cfg', 'eggs', 'bin', 'develop-eggs', 'parts')
... 'buildout.cfg', 'eggs', 'bin', 'develop-eggs', 'parts')
>>> os.chdir('..')
>>> os.chdir('..')
>>> p.stdout.close()
>>> p.stderr.close()
It will download the software needed to run Buildout and install it in
It will download the software needed to run Buildout and install it in
the current directory.
the current directory.
...
@@ -167,6 +169,8 @@ This can be used with the bootstrapping script as well:
...
@@ -167,6 +169,8 @@ This can be used with the bootstrapping script as well:
... print(p.stderr.read())
... print(p.stderr.read())
>>> eqs(os.listdir("."), 'bootstrap-buildout.py',
>>> eqs(os.listdir("."), 'bootstrap-buildout.py',
... 'buildout.cfg', 'eggs', 'bin', 'develop-eggs', 'parts')
... 'buildout.cfg', 'eggs', 'bin', 'develop-eggs', 'parts')
>>> p.stdout.close()
>>> p.stderr.close()
This creates an empty Buildout configuration:
This creates an empty Buildout configuration:
...
@@ -220,4 +224,3 @@ command above would generate a buildout configuration file:
...
@@ -220,4 +224,3 @@ command above would generate a buildout configuration file:
This can provide an easy way to experiment with a package without
This can provide an easy way to experiment with a package without
adding it to your Python environment or creating a virtualenv.
adding it to your Python environment or creating a virtualenv.
setup.py
View file @
c8f02362
...
@@ -18,7 +18,8 @@ import os
...
@@ -18,7 +18,8 @@ import os
from
setuptools
import
setup
from
setuptools
import
setup
def
read
(
*
rnames
):
def
read
(
*
rnames
):
return
open
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
*
rnames
)).
read
()
with
open
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
*
rnames
))
as
f
:
return
f
.
read
()
long_description
=
read
(
'README.rst'
)
+
'
\
n
'
+
read
(
'CHANGES.rst'
)
long_description
=
read
(
'README.rst'
)
+
'
\
n
'
+
read
(
'CHANGES.rst'
)
...
...
src/zc/buildout/bootstrap.txt
View file @
c8f02362
...
@@ -19,7 +19,9 @@ Make sure the bootstrap script actually works::
...
@@ -19,7 +19,9 @@ Make sure the bootstrap script actually works::
... [buildout]
... [buildout]
... parts =
... parts =
... ''')
... ''')
>>> write('bootstrap.py', open(bootstrap_py).read())
>>> with open(bootstrap_py) as f:
... bootstrap_py_contents = f.read()
>>> write('bootstrap.py', bootstrap_py_contents)
>>> print_('X'); print_(system(
>>> print_('X'); print_(system(
... zc.buildout.easy_install._safe_arg(sys.executable)+' '+
... zc.buildout.easy_install._safe_arg(sys.executable)+' '+
... 'bootstrap.py')); print_('X') # doctest: +ELLIPSIS
... 'bootstrap.py')); print_('X') # doctest: +ELLIPSIS
...
@@ -52,7 +54,7 @@ By default it gets the latest version::
...
@@ -52,7 +54,7 @@ By default it gets the latest version::
>>> buildout_script = join(sample_buildout, 'bin', 'buildout')
>>> buildout_script = join(sample_buildout, 'bin', 'buildout')
>>> if sys.platform.startswith('win'):
>>> if sys.platform.startswith('win'):
... buildout_script += '-script.py'
... buildout_script += '-script.py'
>>>
print_(open(buildout_script)
.read()) # doctest: +ELLIPSIS
>>>
with open(buildout_script) as f: print_(f
.read()) # doctest: +ELLIPSIS
#...
#...
sys.path[0:0] = [
sys.path[0:0] = [
'/sample/eggs/zc.buildout-22.0.0...egg',
'/sample/eggs/zc.buildout-22.0.0...egg',
...
@@ -83,7 +85,7 @@ Now let's try with ``2.0.0``, which happens to exist::
...
@@ -83,7 +85,7 @@ Now let's try with ``2.0.0``, which happens to exist::
Let's make sure the generated ``buildout`` script uses it::
Let's make sure the generated ``buildout`` script uses it::
>>>
print_(open(buildout_script)
.read()) # doctest: +ELLIPSIS
>>>
with open(buildout_script) as f: print_(f
.read()) # doctest: +ELLIPSIS
#...
#...
sys.path[0:0] = [
sys.path[0:0] = [
'/sample/eggs/zc.buildout-2.0.0...egg',
'/sample/eggs/zc.buildout-2.0.0...egg',
...
@@ -103,7 +105,7 @@ Now let's try with ``31.0.0``, which happens to exist::
...
@@ -103,7 +105,7 @@ Now let's try with ``31.0.0``, which happens to exist::
Let's make sure the generated ``buildout`` script uses it::
Let's make sure the generated ``buildout`` script uses it::
>>>
print_(open(buildout_script)
.read()) # doctest: +ELLIPSIS
>>>
with open(buildout_script) as f: print_(f
.read()) # doctest: +ELLIPSIS
#...
#...
sys.path[0:0] = [
sys.path[0:0] = [
'/sample/eggs/zc.buildout-...egg',
'/sample/eggs/zc.buildout-...egg',
...
@@ -121,7 +123,7 @@ which happens to exist::
...
@@ -121,7 +123,7 @@ which happens to exist::
Let's make sure the generated ``buildout`` script uses it::
Let's make sure the generated ``buildout`` script uses it::
>>>
print_(open(buildout_script)
.read()) # doctest: +ELLIPSIS
>>>
with open(buildout_script) as f: print_(f
.read()) # doctest: +ELLIPSIS
#...
#...
sys.path[0:0] = [
sys.path[0:0] = [
'/sample/eggs/zc.buildout-2.0.0...egg',
'/sample/eggs/zc.buildout-2.0.0...egg',
...
@@ -153,7 +155,7 @@ specify the setuptools version, and to reuse the setuptools zipfile::
...
@@ -153,7 +155,7 @@ specify the setuptools version, and to reuse the setuptools zipfile::
>>> os.path.exists('setuptools-32.1.0.zip')
>>> os.path.exists('setuptools-32.1.0.zip')
True
True
>>>
print_(open(buildout_script)
.read()) # doctest: +ELLIPSIS
>>>
with open(buildout_script) as f: print_(f
.read()) # doctest: +ELLIPSIS
#...
#...
sys.path[0:0] = [
sys.path[0:0] = [
'/sample/eggs/zc.buildout-2.0.0...egg',
'/sample/eggs/zc.buildout-2.0.0...egg',
...
...
src/zc/buildout/bootstrap_cl_settings.test
View file @
c8f02362
...
@@ -20,7 +20,8 @@ Some people pass buildout settings to bootstrap.
...
@@ -20,7 +20,8 @@ Some people pass buildout settings to bootstrap.
... [buildout]
... [buildout]
... parts =
... parts =
... '''
)
... '''
)
>>>
write
(
'bootstrap.py'
,
open
(
bootstrap_py
)
.
read
())
>>>
with
open
(
bootstrap_py
)
as
f
:
bootstrap_py_contents
=
f
.
read
()
>>>
write
(
'bootstrap.py'
,
bootstrap_py_contents
)
>>>
print_
(
'X'
);
print_
(
system
(
>>>
print_
(
'X'
);
print_
(
system
(
...
zc
.
buildout
.
easy_install
.
_safe_arg
(
sys
.
executable
)
+
...
zc
.
buildout
.
easy_install
.
_safe_arg
(
sys
.
executable
)
+
...
' bootstrap.py buildout:directory='
+
top
+
...
' bootstrap.py buildout:directory='
+
top
+
...
@@ -43,7 +44,8 @@ They might do it with init, but no worries:
...
@@ -43,7 +44,8 @@ They might do it with init, but no worries:
>>>
os
.
chdir
(
top
)
>>>
os
.
chdir
(
top
)
>>>
mkdir
(
top
,
'buildout'
)
>>>
mkdir
(
top
,
'buildout'
)
>>>
os
.
chdir
(
top
)
>>>
os
.
chdir
(
top
)
>>>
write
(
'bootstrap.py'
,
open
(
bootstrap_py
)
.
read
())
>>>
with
open
(
bootstrap_py
)
as
f
:
bootstrap_py_contents
=
f
.
read
()
>>>
write
(
'bootstrap.py'
,
bootstrap_py_contents
)
>>>
print_
(
'X'
);
print_
(
system
(
>>>
print_
(
'X'
);
print_
(
system
(
...
zc
.
buildout
.
easy_install
.
_safe_arg
(
sys
.
executable
)
+
...
zc
.
buildout
.
easy_install
.
_safe_arg
(
sys
.
executable
)
+
...
' bootstrap.py buildout:directory='
+
top
+
...
' bootstrap.py buildout:directory='
+
top
+
...
...
src/zc/buildout/buildout.py
View file @
c8f02362
...
@@ -893,8 +893,8 @@ class Buildout(DictMixin):
...
@@ -893,8 +893,8 @@ class Buildout(DictMixin):
setup
=
self
.
_buildout_path
(
setup
)
setup
=
self
.
_buildout_path
(
setup
)
files
=
glob
.
glob
(
setup
)
files
=
glob
.
glob
(
setup
)
if
not
files
:
if
not
files
:
self
.
_logger
.
warn
(
"Couldn't develop %r (not found)"
,
self
.
_logger
.
warn
ing
(
"Couldn't develop %r (not found)"
,
setup
)
setup
)
else
:
else
:
files
.
sort
()
files
.
sort
()
for
setup
in
files
:
for
setup
in
files
:
...
@@ -1108,8 +1108,8 @@ class Buildout(DictMixin):
...
@@ -1108,8 +1108,8 @@ class Buildout(DictMixin):
if
(
realpath
(
os
.
path
.
abspath
(
sys
.
argv
[
0
]))
!=
should_run
):
if
(
realpath
(
os
.
path
.
abspath
(
sys
.
argv
[
0
]))
!=
should_run
):
self
.
_logger
.
debug
(
"Running %r."
,
realpath
(
sys
.
argv
[
0
]))
self
.
_logger
.
debug
(
"Running %r."
,
realpath
(
sys
.
argv
[
0
]))
self
.
_logger
.
debug
(
"Local buildout is %r."
,
should_run
)
self
.
_logger
.
debug
(
"Local buildout is %r."
,
should_run
)
self
.
_logger
.
warn
(
"Not upgrading because not running a local "
self
.
_logger
.
warn
ing
(
"Not upgrading because not running a local "
"buildout command."
)
"buildout command."
)
return
return
self
.
_logger
.
info
(
"Upgraded:
\
n
%s;
\
n
restarting."
,
self
.
_logger
.
info
(
"Upgraded:
\
n
%s;
\
n
restarting."
,
...
@@ -1464,7 +1464,7 @@ class Options(DictMixin):
...
@@ -1464,7 +1464,7 @@ class Options(DictMixin):
_template_split
=
re
.
compile
(
'([$]{[^}]*})'
).
split
_template_split
=
re
.
compile
(
'([$]{[^}]*})'
).
split
_simple
=
re
.
compile
(
'[-a-zA-Z0-9 ._]+$'
).
match
_simple
=
re
.
compile
(
'[-a-zA-Z0-9 ._]+$'
).
match
_valid
=
re
.
compile
(
'
\
${[-
a
-zA-Z0-9 ._]*:[-a-zA-Z0-9 ._]+}$'
).
match
_valid
=
re
.
compile
(
r
'\
${[-
a-zA-Z0-9 ._]*:[-a-zA-Z0-9 ._]+}$'
).
match
def
_sub
(
self
,
template
,
seen
):
def
_sub
(
self
,
template
,
seen
):
value
=
self
.
_template_split
(
template
)
value
=
self
.
_template_split
(
template
)
subs
=
[]
subs
=
[]
...
@@ -1563,7 +1563,7 @@ class Options(DictMixin):
...
@@ -1563,7 +1563,7 @@ class Options(DictMixin):
elif
os
.
path
.
isfile
(
p
):
elif
os
.
path
.
isfile
(
p
):
os
.
remove
(
p
)
os
.
remove
(
p
)
else
:
else
:
self
.
buildout
.
_logger
.
warn
(
"Couldn't clean up %r."
,
p
)
self
.
buildout
.
_logger
.
warn
ing
(
"Couldn't clean up %r."
,
p
)
raise
raise
finally
:
finally
:
self
.
_created
=
None
self
.
_created
=
None
...
@@ -1921,9 +1921,9 @@ def _check_for_unused_options_in_section(buildout, section):
...
@@ -1921,9 +1921,9 @@ def _check_for_unused_options_in_section(buildout, section):
unused
=
[
option
for
option
in
sorted
(
options
.
_raw
)
unused
=
[
option
for
option
in
sorted
(
options
.
_raw
)
if
option
not
in
options
.
_data
]
if
option
not
in
options
.
_data
]
if
unused
:
if
unused
:
buildout
.
_logger
.
warn
(
"Unused options for %s: %s."
buildout
.
_logger
.
warn
ing
(
"Unused options for %s: %s."
%
(
section
,
' '
.
join
(
map
(
repr
,
unused
)))
%
(
section
,
' '
.
join
(
map
(
repr
,
unused
)))
)
)
_usage
=
"""
\
_usage
=
"""
\
Usage: buildout [options] [assignments] [command [command arguments]]
Usage: buildout [options] [assignments] [command [command arguments]]
...
...
src/zc/buildout/buildout.txt
View file @
c8f02362
...
@@ -3355,3 +3355,7 @@ We see that our extension is loaded and executed::
...
@@ -3355,3 +3355,7 @@ We see that our extension is loaded and executed::
ext ['buildout', 'versions']
ext ['buildout', 'versions']
Develop: '/sample-bootstrapped/demo'
Develop: '/sample-bootstrapped/demo'
unload ['buildout', 'versions']
unload ['buildout', 'versions']
..
>>> stop_server(server_url)
src/zc/buildout/configparser.py
View file @
c8f02362
...
@@ -178,7 +178,7 @@ def parse(fp, fpname, exp_globals=dict):
...
@@ -178,7 +178,7 @@ def parse(fp, fpname, exp_globals=dict):
tail = tail.replace(';', '#') if tail else ''
tail = tail.replace(';', '#') if tail else ''
# un-escape literal # and ; . Do not use a
# un-escape literal # and ; . Do not use a
# string-escape decode
# string-escape decode
expr = expression.replace(r'
\
x23
','#').replace(r'x3b', ';')
expr = expression.replace(r'
\
x23
','#').replace(r'
\
x3b
', ';')
# rebuild a valid Python expression wrapped in a list
# rebuild a valid Python expression wrapped in a list
expr = head + expr + tail
expr = head + expr + tail
# lazily populate context only expression
# lazily populate context only expression
...
...
src/zc/buildout/configparser.test
View file @
c8f02362
...
@@ -33,7 +33,7 @@ First, an example that illustrates a well-formed configuration::
...
@@ -33,7 +33,7 @@ First, an example that illustrates a well-formed configuration::
b
+=
1
b
+=
1
[
s3
];
comment
[
s3
];
comment
x
=
a
b
x
=
a
b
..
->
text
..
->
text
...
@@ -92,9 +92,9 @@ otherwise empty section) is blank. For example:"
...
@@ -92,9 +92,9 @@ otherwise empty section) is blank. For example:"
'
versions
': {}}
'
versions
': {}}
Sections headers can contain an optional arbitrary Python expression.
Sections headers can contain an optional arbitrary Python expression.
When the expression evaluates to false the whole section is skipped.
When the expression evaluates to false the whole section is skipped.
Several sections can have the same name with different expressions, enabling
Several sections can have the same name with different expressions, enabling
conditional exclusion of sections::
conditional exclusion of sections::
[s1: 2 + 2 == 4] # this expression is true [therefore "this section" _will_ be NOT skipped
[s1: 2 + 2 == 4] # this expression is true [therefore "this section" _will_ be NOT skipped
...
@@ -106,7 +106,7 @@ conditional exclusion of sections::
...
@@ -106,7 +106,7 @@ conditional exclusion of sections::
[ s2 : 41 + 1 == 42 ] # a comment: this expression is [true], so this section will be kept
[ s2 : 41 + 1 == 42 ] # a comment: this expression is [true], so this section will be kept
long = b
long = b
[s3:2 in map(lambda i:i*2, [i for i in range(10)])] ;# Complex expressions are [possible!];, though they should not be (abused:)
[s3:2 in map(lambda i:i*2, [i for i in range(10)])] ;# Complex expressions are [possible!];, though they should not be (abused:)
# this section will not be skipped
# this section will not be skipped
long = c
long = c
...
@@ -117,11 +117,11 @@ conditional exclusion of sections::
...
@@ -117,11 +117,11 @@ conditional exclusion of sections::
Title line optional trailing comments are separated by a hash '
#' or semicolon
Title line optional trailing comments are separated by a hash '
#' or semicolon
';'
character
.
The
expression
is
an
arbitrary
expression
with
one
restriction
:
';'
character
.
The
expression
is
an
arbitrary
expression
with
one
restriction
:
it
cannot
contain
a
literal
hash
'#'
or
semicolon
';'
character
:
these
need
to
be
it
cannot
contain
a
literal
hash
'#'
or
semicolon
';'
character
:
these
need
to
be
string
-
escaped
.
string
-
escaped
.
The
comment
can
contain
arbitrary
characters
,
including
brackets
that
are
also
The
comment
can
contain
arbitrary
characters
,
including
brackets
that
are
also
used
to
mark
the
end
of
a
section
header
and
may
be
ambiguous
to
recognize
in
used
to
mark
the
end
of
a
section
header
and
may
be
ambiguous
to
recognize
in
some
cases
.
For
example
,
valid
sections
lines
include
::
some
cases
.
For
example
,
valid
sections
lines
include
::
[
a
]
[
a
]
...
@@ -170,7 +170,7 @@ some cases. For example, valid sections lines include::
...
@@ -170,7 +170,7 @@ some cases. For example, valid sections lines include::
A
title
line
optional
trailing
comment
be
separated
by
a
hash
or
semicolon
A
title
line
optional
trailing
comment
be
separated
by
a
hash
or
semicolon
character
.
The
following
are
valid
semicolon
-
separated
comments
::
character
.
The
following
are
valid
semicolon
-
separated
comments
::
[
a
]
;
semicolon
comment
are
supported
for
lines
without
expressions
]
[
a
]
;
semicolon
comment
are
supported
for
lines
without
expressions
]
...
@@ -226,10 +226,10 @@ The following sections with hash comment separators are valid too::
...
@@ -226,10 +226,10 @@ The following sections with hash comment separators are valid too::
'e'
:
{
'e'
:
'1'
}}
'e'
:
{
'e'
:
'1'
}}
However
,
explicit
semicolon
and
hash
characters
are
invalid
in
expressions
and
However
,
explicit
semicolon
and
hash
characters
are
invalid
in
expressions
and
must
be
escaped
or
this
triggers
an
error
.
In
the
rare
case
where
a
hash
'#'
or
must
be
escaped
or
this
triggers
an
error
.
In
the
rare
case
where
a
hash
'#'
or
semicolon
';'
would
be
needed
in
an
expression
literal
,
you
can
use
the
semicolon
';'
would
be
needed
in
an
expression
literal
,
you
can
use
the
string-escaped representation of these characters: use '\x23' for hash '#' and
string-escaped representation of these characters: use '\x23' for hash '#' and
'\x3b' for semicolon '
;
' to avoid evaluation errors.
'\x3b' for semicolon '
;
' to avoid evaluation errors.
These expressions are valid and use escaped hash and semicolons in literals::
These expressions are valid and use escaped hash and semicolons in literals::
...
@@ -256,11 +256,11 @@ And using unescaped semicolon and hash characters in expressions triggers an err
...
@@ -256,11 +256,11 @@ And using unescaped semicolon and hash characters in expressions triggers an err
...
except
zc
.
buildout
.
configparser
.
MissingSectionHeaderError
:
pass
# success
...
except
zc
.
buildout
.
configparser
.
MissingSectionHeaderError
:
pass
# success
One
of
the
typical
usage
of
expression
is
to
have
buildout
parts
that
are
One
of
the
typical
usage
of
expression
is
to
have
buildout
parts
that
are
operating
system
or
platform
-
specific
.
The
configparser
.
parse
function
has
an
operating
system
or
platform
-
specific
.
The
configparser
.
parse
function
has
an
optional
exp_globals
argument
.
This
is
a
callable
returning
a
mapping
of
optional
exp_globals
argument
.
This
is
a
callable
returning
a
mapping
of
objects
made
available
to
the
evaluation
context
of
the
expression
.
Here
we
add
objects
made
available
to
the
evaluation
context
of
the
expression
.
Here
we
add
the
platform
and
sys
modules
to
the
evaluation
context
,
so
we
can
access
the
platform
and
sys
modules
to
the
evaluation
context
,
so
we
can
access
platform
and
sys
modules
functions
and
objects
in
our
expressions
::
platform
and
sys
modules
functions
and
objects
in
our
expressions
::
[
s1
:
str
(
platform
.
python_version_tuple
()[
0
])
in
(
'2'
,
'3'
,)]
# this expression is true, the major versions of python are either 2 or 3
[
s1
:
str
(
platform
.
python_version_tuple
()[
0
])
in
(
'2'
,
'3'
,)]
# this expression is true, the major versions of python are either 2 or 3
...
@@ -280,8 +280,8 @@ platform and sys modules functions and objects in our expressions ::
...
@@ -280,8 +280,8 @@ platform and sys modules functions and objects in our expressions ::
{
's1'
:
{
'a'
:
'1'
},
's2'
:
{
'long'
:
'b'
}}
{
's1'
:
{
'a'
:
'1'
},
's2'
:
{
'long'
:
'b'
}}
Some
limited
(
but
hopefully
sane
and
sufficient
)
default
modules
and
Some
limited
(
but
hopefully
sane
and
sufficient
)
default
modules
and
pre
-
computed
common
expressions
available
to
an
expression
when
the
parser
in
pre
-
computed
common
expressions
available
to
an
expression
when
the
parser
in
called
by
buildout
::
called
by
buildout
::
...
@@ -290,20 +290,20 @@ called by buildout::
...
@@ -290,20 +290,20 @@ called by buildout::
a
=
1
a
=
1
# major and minor python versions, yes even python 3.5 and 3.6 are there , prospectively
# major and minor python versions, yes even python 3.5 and 3.6 are there , prospectively
# comment: this expression "is true" and not that long expression cannot span several lines
# comment: this expression "is true" and not that long expression cannot span several lines
[
s2
:
any
([
python2
,
python3
,
python24
,
python25
,
python26
,
python27
,
python30
,
python31
,
python32
,
python33
,
python34
,
python35
,
python36
])
]
[
s2
:
any
([
python2
,
python3
,
python24
,
python25
,
python26
,
python27
,
python30
,
python31
,
python32
,
python33
,
python34
,
python35
,
python36
])
]
b
=
1
b
=
1
# common python interpreter types
# common python interpreter types
[
s3
:
cpython
or
pypy
or
jython
or
ironpython
]
# a comment: this expression is likely always true, so this section will be kept
[
s3
:
cpython
or
pypy
or
jython
or
ironpython
]
# a comment: this expression is likely always true, so this section will be kept
c
=
1
c
=
1
# common operating systems
# common operating systems
[
s4
:
linux
or
windows
or
cygwin
or
macosx
or
solaris
or
posix
or
True
]
[
s4
:
linux
or
windows
or
cygwin
or
macosx
or
solaris
or
posix
or
True
]
d
=
1
d
=
1
# common bitness and endianness
# common bitness and endianness
[
s5
:
bits32
or
bits64
or
little_endian
or
big_endian
]
[
s5
:
bits32
or
bits64
or
little_endian
or
big_endian
]
e
=
1
e
=
1
..
->
text
..
->
text
...
...
src/zc/buildout/download.py
View file @
c8f02362
...
@@ -20,15 +20,8 @@ except ImportError:
...
@@ -20,15 +20,8 @@ except ImportError:
try
:
try
:
# Python 3
# Python 3
from
urllib.request
import
FancyURLopener
,
URLopener
,
urlretrieve
from
urllib.request
import
urlretrieve
from
urllib.parse
import
urlparse
from
urllib.parse
import
urlparse
from
urllib
import
request
class
PatchedURLopener
(
FancyURLopener
):
http_error_default
=
URLopener
.
http_error_default
request
.
_urlopener
=
PatchedURLopener
()
# Ook! Monkey patch!
except
ImportError
:
except
ImportError
:
# Python 2
# Python 2
import
base64
import
base64
...
...
src/zc/buildout/easy_install.py
View file @
c8f02362
...
@@ -637,7 +637,7 @@ class Installer(object):
...
@@ -637,7 +637,7 @@ class Installer(object):
if
dist_needs_pkg_resources
(
dist
):
if
dist_needs_pkg_resources
(
dist
):
# We have a namespace package but no requirement for setuptools
# We have a namespace package but no requirement for setuptools
if
dist
.
precedence
==
pkg_resources
.
DEVELOP_DIST
:
if
dist
.
precedence
==
pkg_resources
.
DEVELOP_DIST
:
logger
.
warn
(
logger
.
warn
ing
(
"Develop distribution: %s
\
n
"
"Develop distribution: %s
\
n
"
"uses namespace packages but the distribution "
"uses namespace packages but the distribution "
"does not require setuptools."
,
"does not require setuptools."
,
...
...
src/zc/buildout/repeatable.txt
View file @
c8f02362
...
@@ -397,7 +397,7 @@ at the end.
...
@@ -397,7 +397,7 @@ at the end.
The versions file now contains the extra pin:
The versions file now contains the extra pin:
>>>
print_(open('my_versions.cfg')
.read()) # doctest: +ELLIPSIS
>>>
with open('my_versions.cfg') as f: print_(f
.read()) # doctest: +ELLIPSIS
<BLANKLINE>
<BLANKLINE>
...
...
# Added by buildout at YYYY-MM-DD hh:mm:ss.dddddd
# Added by buildout at YYYY-MM-DD hh:mm:ss.dddddd
...
@@ -437,7 +437,7 @@ printing them to the console):
...
@@ -437,7 +437,7 @@ printing them to the console):
The versions file contains the extra pin:
The versions file contains the extra pin:
>>>
print_(open('my_versions.cfg')
.read()) # doctest: +ELLIPSIS
>>>
with open('my_versions.cfg') as f: print_(f
.read()) # doctest: +ELLIPSIS
<BLANKLINE>
<BLANKLINE>
[versions]
[versions]
...
...
...
...
src/zc/buildout/rmtree.py
View file @
c8f02362
...
@@ -40,7 +40,7 @@ def rmtree (path):
...
@@ -40,7 +40,7 @@ def rmtree (path):
Now create a file ...
Now create a file ...
>>> foo = os.path.join (d, 'foo')
>>> foo = os.path.join (d, 'foo')
>>>
_ = open (foo, 'w')
.write ('huhu')
>>>
with open (foo, 'w') as f: _ = f
.write ('huhu')
and make it unwriteable
and make it unwriteable
...
@@ -75,4 +75,3 @@ def test_suite():
...
@@ -75,4 +75,3 @@ def test_suite():
if
"__main__"
==
__name__
:
if
"__main__"
==
__name__
:
doctest
.
testmod
()
doctest
.
testmod
()
src/zc/buildout/testing.py
View file @
c8f02362
...
@@ -131,6 +131,19 @@ def system(command, input='', with_exit_code=False):
...
@@ -131,6 +131,19 @@ def system(command, input='', with_exit_code=False):
# https://github.com/buildout/buildout/pull/311
# https://github.com/buildout/buildout/pull/311
# http://bugs.python.org/issue19884
# http://bugs.python.org/issue19884
env
=
dict
(
os
.
environ
,
TERM
=
'dumb'
)
env
=
dict
(
os
.
environ
,
TERM
=
'dumb'
)
# Beginning in Python 3.4, 'U' mode to open() is deprecated.
# Python 3.7 changes the way deprecations are shown for main
# modules, and introduces $PYTHONDEVMODE which turns on warnigs in
# more places. If that's done, this leads many of our doctests to
# break; some code path through executing setup.py does this, but
# it's not in our code. Unfortunately, normalizing this printed
# line away doesn't work, it just produces a blank line. We resort
# to turning that warning off.
warnings
=
env
.
get
(
'PYTHONWARNINGS'
,
''
)
env
[
'PYTHONWARNINGS'
]
=
"ignore:'U' mode is deprecated:DeprecationWarning::,"
+
warnings
p
=
subprocess
.
Popen
(
command
,
p
=
subprocess
.
Popen
(
command
,
shell
=
True
,
shell
=
True
,
stdin
=
subprocess
.
PIPE
,
stdin
=
subprocess
.
PIPE
,
...
@@ -150,6 +163,7 @@ def system(command, input='', with_exit_code=False):
...
@@ -150,6 +163,7 @@ def system(command, input='', with_exit_code=False):
# Use the with_exit_code=True parameter when you want to test the exit
# Use the with_exit_code=True parameter when you want to test the exit
# code of the command you're running.
# code of the command you're running.
output
+=
'EXIT CODE: %s'
%
p
.
wait
()
output
+=
'EXIT CODE: %s'
%
p
.
wait
()
p
.
wait
()
return
output
return
output
def
get
(
url
):
def
get
(
url
):
...
@@ -358,6 +372,7 @@ def buildoutSetUp(test):
...
@@ -358,6 +372,7 @@ def buildoutSetUp(test):
sdist
=
sdist
,
sdist
=
sdist
,
bdist_egg
=
bdist_egg
,
bdist_egg
=
bdist_egg
,
start_server
=
start_server
,
start_server
=
start_server
,
stop_server
=
stop_server
,
buildout
=
os
.
path
.
join
(
sample
,
'bin'
,
'buildout'
),
buildout
=
os
.
path
.
join
(
sample
,
'bin'
,
'buildout'
),
wait_until
=
wait_until
,
wait_until
=
wait_until
,
print_
=
print_
,
print_
=
print_
,
...
@@ -395,6 +410,7 @@ class Handler(BaseHTTPRequestHandler):
...
@@ -395,6 +410,7 @@ class Handler(BaseHTTPRequestHandler):
def
do_GET
(
self
):
def
do_GET
(
self
):
if
'__stop__'
in
self
.
path
:
if
'__stop__'
in
self
.
path
:
self
.
__server
.
server_close
()
raise
SystemExit
raise
SystemExit
def
k
():
def
k
():
...
@@ -466,6 +482,7 @@ def _run(tree, port):
...
@@ -466,6 +482,7 @@ def _run(tree, port):
server_address
=
(
'localhost'
,
port
)
server_address
=
(
'localhost'
,
port
)
httpd
=
Server
(
tree
,
server_address
,
Handler
)
httpd
=
Server
(
tree
,
server_address
,
Handler
)
httpd
.
serve_forever
()
httpd
.
serve_forever
()
httpd
.
server_close
()
def
get_port
():
def
get_port
():
for
i
in
range
(
10
):
for
i
in
range
(
10
):
...
@@ -578,10 +595,10 @@ if sys.version_info > (2, ):
...
@@ -578,10 +595,10 @@ if sys.version_info > (2, ):
re
.
compile
(
'(
\
n
?)d __pycache__
\
n
'
),
'
\
\
1'
)
re
.
compile
(
'(
\
n
?)d __pycache__
\
n
'
),
'
\
\
1'
)
else
:
else
:
normalize___pycache__
=
(
normalize___pycache__
=
(
re
.
compile
(
'(
\
n
?)-
\
S+
\
.pyc
\
n
'
),
'
\
\
1'
)
re
.
compile
(
r
'(\n?)- \
S+
\.pyc\n'
),
'
\
\
1'
)
normalize_egg_py
=
(
normalize_egg_py
=
(
re
.
compile
(
'-py
\
d[.]
\
d(-
\
S+)?.egg
'
),
re
.
compile
(
r
'-py\
d[.]
\d(-\
S+)?.egg
'),
'
-
pyN
.
N
.
egg
',
'
-
pyN
.
N
.
egg
',
)
)
...
...
src/zc/buildout/tests.py
View file @
c8f02362
This diff is collapsed.
Click to expand it.
src/zc/buildout/windows.txt
View file @
c8f02362
...
@@ -28,7 +28,7 @@ can't delete.
...
@@ -28,7 +28,7 @@ can't delete.
... os.makedirs (self.location)
... os.makedirs (self.location)
...
...
... name = os.path.join (self.location, 'readonly.txt')
... name = os.path.join (self.location, 'readonly.txt')
...
open (name, 'w')
.write ('this is a read only file')
...
with open (name, 'w') as f: f
.write ('this is a read only file')
... os.chmod(name, 256)
... os.chmod(name, 256)
... return ()
... return ()
...
...
...
...
tox.ini
View file @
c8f02362
...
@@ -8,7 +8,7 @@ commands =
...
@@ -8,7 +8,7 @@ commands =
# buildout's dev.py wants python to not have setuptools
# buildout's dev.py wants python to not have setuptools
pip
uninstall
-y
zc.buildout
setuptools
pip
pip
uninstall
-y
zc.buildout
setuptools
pip
python
dev.py
python
dev.py
{toxinidir}/bin/test
-1
-v
-c
{toxinidir}/bin/test
-1
-v
vv
-c
coverage
combine
coverage
combine
coverage
report
coverage
report
# since we're removing setuptools we can't possibly reuse the virtualenv
# since we're removing setuptools we can't possibly reuse the virtualenv
...
...
zc.recipe.egg_/setup.py
View file @
c8f02362
...
@@ -20,7 +20,8 @@ import os
...
@@ -20,7 +20,8 @@ import os
from
setuptools
import
setup
,
find_packages
from
setuptools
import
setup
,
find_packages
def
read
(
*
rnames
):
def
read
(
*
rnames
):
return
open
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
*
rnames
)).
read
()
with
open
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
*
rnames
))
as
f
:
return
f
.
read
()
name
=
"zc.recipe.egg"
name
=
"zc.recipe.egg"
setup
(
setup
(
...
...
zc.recipe.egg_/src/zc/recipe/egg/egg.py
View file @
c8f02362
...
@@ -220,7 +220,7 @@ class Scripts(Eggs):
...
@@ -220,7 +220,7 @@ class Scripts(Eggs):
assert
relative_paths
==
'false'
assert
relative_paths
==
'false'
parse_entry_point
=
re
.
compile
(
parse_entry_point
=
re
.
compile
(
'([^=]+)=(
\
w+(?:[.]
\
w+)*):(
\
w+(?:[.]
\
w+)*)$'
r
'([^=]+)=(\
w+(?:[.]
\w+)*):(\
w+(?:[.]
\w+)*)$'
).
match
).
match
def
install
(
self
):
def
install
(
self
):
...
...
zc.recipe.egg_/src/zc/recipe/egg/tests.py
View file @
c8f02362
...
@@ -50,9 +50,9 @@ def test_suite():
...
@@ -50,9 +50,9 @@ def test_suite():
zc
.
buildout
.
tests
.
normalize_bang
,
zc
.
buildout
.
tests
.
normalize_bang
,
zc
.
buildout
.
tests
.
normalize_S
,
zc
.
buildout
.
tests
.
normalize_S
,
zc
.
buildout
.
testing
.
not_found
,
zc
.
buildout
.
testing
.
not_found
,
(
re
.
compile
(
'[d-] zc.buildout(-
\
S+)?[.]egg(-li
n
k)?'
),
(
re
.
compile
(
r
'[d-] zc.buildout(-\
S+)?[.]egg(-li
nk)?'
),
'zc.buildout.egg'
),
'zc.buildout.egg'
),
(
re
.
compile
(
'[d-] setuptools-[^-]+-'
),
'setuptools-X-'
),
(
re
.
compile
(
r
'[d-] setuptools-[^-]+-'
),
'setuptools-X-'
),
(
re
.
compile
(
r'eggs\\\\demo'
),
'eggs/demo'
),
(
re
.
compile
(
r'eggs\\\\demo'
),
'eggs/demo'
),
(
re
.
compile
(
r'[a-zA-Z]:\\\\foo\\\\bar'
),
'/foo/bar'
),
(
re
.
compile
(
r'[a-zA-Z]:\\\\foo\\\\bar'
),
'/foo/bar'
),
])
])
...
@@ -66,15 +66,15 @@ def test_suite():
...
@@ -66,15 +66,15 @@ def test_suite():
zc
.
buildout
.
testing
.
normalize_endings
,
zc
.
buildout
.
testing
.
normalize_endings
,
zc
.
buildout
.
testing
.
not_found
,
zc
.
buildout
.
testing
.
not_found
,
(
re
.
compile
(
'__buildout_signature__ = '
(
re
.
compile
(
'__buildout_signature__ = '
'sample-
\
S+
\
s+'
r
'sample-\
S+
\s+'
'zc.recipe.egg-
\
S+
\
s+'
r
'zc.recipe.egg-\
S+
\s+'
'setuptools-
\
S+
\
s+'
r
'setuptools-\
S+
\s+'
'zc.buildout-
\
S+
\
s*'
r
'zc.buildout-\
S+
\s*'
),
),
'__buildout_signature__ = sample- zc.recipe.egg-'
),
'__buildout_signature__ = sample- zc.recipe.egg-'
),
(
re
.
compile
(
'find-links = http://localhost:
\
d+/
'
),
(
re
.
compile
(
r
'find-links = http://localhost:\
d+/
'),
'
find
-
links
=
http
:
//
localhost
:
8080
/
'),
'
find
-
links
=
http
:
//
localhost
:
8080
/
'),
(re.compile('
index
=
http
:
//
localhost
:
\
d
+/
index
'),
(re.compile(
r
'
index
=
http
:
//
localhost
:
\
d
+/
index
'),
'
index
=
http
:
//
localhost
:
8080
/
index
'),
'
index
=
http
:
//
localhost
:
8080
/
index
'),
])
])
),
),
...
@@ -87,7 +87,7 @@ def test_suite():
...
@@ -87,7 +87,7 @@ def test_suite():
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.not_found,
zc.buildout.testing.not_found,
(re.compile("(d ((ext)?demo(needed)?|other)"
(re.compile("(d ((ext)?demo(needed)?|other)"
"-
\
d[.]
\
d-py)
\
d[.]
\
d(-
\
S+)?[.]egg
"
),
r
"-
\
d[.]
\
d-py)
\
d[.]
\
d(-
\
S+)?[.]egg
"
),
'
\\
1
V
.
V
.
egg
'),
'
\\
1
V
.
V
.
egg
'),
(re.compile('
extdemo
.
c
\
n
.
+
\\\\
extdemo
.
exp
\
n
'), ''),
(re.compile('
extdemo
.
c
\
n
.
+
\\\\
extdemo
.
exp
\
n
'), ''),
(re.compile(
(re.compile(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment