Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
cubicweb
cubes
person
Commits
7aedf86c32a4
Commit
a6a28e65
authored
Feb 25, 2016
by
Julien Cristau
Browse files
[pkg] update setup.py from current cubicweb skeleton
parent
68db81f7bc16
Changes
1
Hide whitespace changes
Inline
Side-by-side
setup.py
View file @
7aedf86c
#!/usr/bin/env python
# pylint: disable=W0142,W0403,W0404,W0613,W0622,W0622,W0704,R0904,C0103,E0611
#
# copyright 2003-201
0
LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# copyright 2003-201
6
LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of CubicWeb
tag
cube.
# This file is part of
a
CubicWeb cube.
#
# CubicWeb is free software: you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
...
...
@@ -16,8 +16,8 @@
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
along
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.
# You should have received a copy of the GNU Lesser General Public License
#
along
with CubicWeb. If not, see <http://www.gnu.org/licenses/>.
"""Generic Setup script, takes package info from __pkginfo__.py file
"""
__docformat__
=
"restructuredtext en"
...
...
@@ -25,11 +25,11 @@ __docformat__ = "restructuredtext en"
import
os
import
sys
import
shutil
from
os.path
import
isdir
,
exists
,
join
,
walk
from
os.path
import
exists
,
join
,
dirname
try
:
if
os
.
environ
.
get
(
'NO_SETUPTOOLS'
):
raise
ImportError
()
# do as there is no setuptools
raise
ImportError
()
# do as there is no setuptools
from
setuptools
import
setup
from
setuptools.command
import
install_lib
USE_SETUPTOOLS
=
True
...
...
@@ -39,34 +39,44 @@ except ImportError:
USE_SETUPTOOLS
=
False
from
distutils.command
import
install_data
# import required features
from
__pkginfo__
import
modname
,
version
,
license
,
description
,
web
,
\
author
,
author_email
if
exists
(
'README'
):
long_description
=
file
(
'README'
).
read
()
else
:
long_description
=
''
# load metadata from the __pkginfo__.py file so there is no risk of conflict
# see https://packaging.python.org/en/latest/single_source_version.html
base_dir
=
dirname
(
__file__
)
pkginfo
=
{}
with
open
(
join
(
base_dir
,
"__pkginfo__.py"
))
as
f
:
exec
(
f
.
read
(),
pkginfo
)
# get required metadatas
modname
=
pkginfo
[
'modname'
]
version
=
pkginfo
[
'version'
]
license
=
pkginfo
[
'license'
]
description
=
pkginfo
[
'description'
]
web
=
pkginfo
[
'web'
]
author
=
pkginfo
[
'author'
]
author_email
=
pkginfo
[
'author_email'
]
with
open
(
join
(
base_dir
,
'README'
))
as
f
:
long_description
=
f
.
read
()
# get optional metadatas
distname
=
pkginfo
.
get
(
'distname'
,
modname
)
scripts
=
pkginfo
.
get
(
'scripts'
,
())
include_dirs
=
pkginfo
.
get
(
'include_dirs'
,
())
data_files
=
pkginfo
.
get
(
'data_files'
,
None
)
ext_modules
=
pkginfo
.
get
(
'ext_modules'
,
None
)
dependency_links
=
pkginfo
.
get
(
'dependency_links'
,
())
# import optional features
import
__pkginfo__
if
USE_SETUPTOOLS
:
requires
=
{}
for
entry
in
(
"__depends__"
,):
# "__recommends__"):
requires
.
update
(
getattr
(
__
pkginfo
__
,
entry
,
{}))
for
entry
in
(
"__depends__"
,):
# "__recommends__"):
requires
.
update
(
pkginfo
.
get
(
entry
,
{}))
install_requires
=
[(
"%s %s"
%
(
d
,
v
and
v
or
""
)).
strip
()
for
d
,
v
in
requires
.
iter
items
()]
for
d
,
v
in
requires
.
items
()]
else
:
install_requires
=
[]
distname
=
getattr
(
__pkginfo__
,
'distname'
,
modname
)
scripts
=
getattr
(
__pkginfo__
,
'scripts'
,
())
include_dirs
=
getattr
(
__pkginfo__
,
'include_dirs'
,
())
data_files
=
getattr
(
__pkginfo__
,
'data_files'
,
None
)
ext_modules
=
getattr
(
__pkginfo__
,
'ext_modules'
,
None
)
dependency_links
=
getattr
(
__pkginfo__
,
'dependency_links'
,
())
BASE_BLACKLIST
=
(
'CVS'
,
'.svn'
,
'.hg'
,
'debian'
,
'dist'
,
'build'
)
BASE_BLACKLIST
=
(
'CVS'
,
'.svn'
,
'.hg'
,
'.git'
,
'debian'
,
'dist'
,
'build'
)
IGNORED_EXTENSIONS
=
(
'.pyc'
,
'.pyo'
,
'.elc'
,
'~'
)
...
...
@@ -82,45 +92,41 @@ def ensure_scripts(linux_scripts):
scripts_
=
linux_scripts
return
scripts_
def
export
(
from_dir
,
to_dir
,
blacklist
=
BASE_BLACKLIST
,
ignore_ext
=
IGNORED_EXTENSIONS
,
verbose
=
True
):
"""make a mirror of from_dir in to_dir, omitting directories and files
listed in the black list
"""
def
make_mirror
(
arg
,
directory
,
fnames
):
"""walk handler"""
try
:
os
.
mkdir
(
to_dir
)
except
OSError
as
ex
:
# file exists ?
import
errno
if
ex
.
errno
!=
errno
.
EEXIST
:
raise
for
dirpath
,
dirnames
,
filenames
in
os
.
walk
(
from_dir
):
for
norecurs
in
blacklist
:
try
:
f
names
.
remove
(
norecurs
)
dir
names
.
remove
(
norecurs
)
except
ValueError
:
pass
for
filename
in
fnames
:
for
dir_name
in
dirnames
:
dest
=
join
(
to_dir
,
dir_name
)
if
not
exists
(
dest
):
os
.
mkdir
(
dest
)
for
filename
in
filenames
:
# don't include binary files
src
=
join
(
dirpath
,
filename
)
dest
=
to_dir
+
src
[
len
(
from_dir
):]
if
filename
[
-
4
:]
in
ignore_ext
:
continue
if
filename
[
-
1
]
==
'~'
:
continue
src
=
join
(
directory
,
filename
)
dest
=
to_dir
+
src
[
len
(
from_dir
):]
if
exists
(
dest
):
os
.
remove
(
dest
)
if
verbose
:
print
>>
sys
.
stderr
,
src
,
'->'
,
dest
if
os
.
path
.
isdir
(
src
):
if
not
exists
(
dest
):
os
.
mkdir
(
dest
)
else
:
if
exists
(
dest
):
os
.
remove
(
dest
)
shutil
.
copy2
(
src
,
dest
)
try
:
os
.
mkdir
(
to_dir
)
except
OSError
,
ex
:
# file exists ?
import
errno
if
ex
.
errno
!=
errno
.
EEXIST
:
raise
walk
(
from_dir
,
make_mirror
,
None
)
sys
.
stderr
.
write
(
'%s -> %s
\n
'
%
(
src
,
dest
))
shutil
.
copy2
(
src
,
dest
)
class
MyInstallLib
(
install_lib
.
install_lib
):
...
...
@@ -137,6 +143,7 @@ class MyInstallLib(install_lib.install_lib):
dest
=
join
(
self
.
install_dir
,
base
,
directory
)
export
(
directory
,
dest
,
verbose
=
False
)
# re-enable copying data files in sys.prefix
old_install_data
=
install_data
.
install_data
if
USE_SETUPTOOLS
:
...
...
@@ -150,13 +157,15 @@ if USE_SETUPTOOLS:
old_install_data
.
run
(
self
)
self
.
install_dir
=
_old_install_dir
try
:
import
setuptools.command.easy_install
# only if easy_install avaible
# only if easy_install available
import
setuptools.command.easy_install
# noqa
# monkey patch: Crack SandboxViolation verification
from
setuptools.sandbox
import
DirectorySandbox
as
DS
old_ok
=
DS
.
_ok
def
_ok
(
self
,
path
):
"""Return True if ``path`` can be written during installation."""
out
=
old_ok
(
self
,
path
)
# here for side effect from setuptools
out
=
old_ok
(
self
,
path
)
# here for side effect from setuptools
realpath
=
os
.
path
.
normcase
(
os
.
path
.
realpath
(
path
))
allowed_path
=
os
.
path
.
normcase
(
sys
.
prefix
)
if
realpath
.
startswith
(
allowed_path
):
...
...
@@ -166,6 +175,7 @@ if USE_SETUPTOOLS:
except
ImportError
:
pass
def
install
(
**
kwargs
):
"""setup entry point"""
if
USE_SETUPTOOLS
:
...
...
@@ -181,20 +191,21 @@ def install(**kwargs):
kwargs
[
'zip_safe'
]
=
False
cmdclass
[
'install_data'
]
=
MyInstallData
return
setup
(
name
=
distname
,
version
=
version
,
license
=
license
,
description
=
description
,
long_description
=
long_description
,
author
=
author
,
author_email
=
author_email
,
url
=
web
,
scripts
=
ensure_scripts
(
scripts
),
data_files
=
data_files
,
ext_modules
=
ext_modules
,
cmdclass
=
cmdclass
,
return
setup
(
name
=
distname
,
version
=
version
,
license
=
license
,
description
=
description
,
long_description
=
long_description
,
author
=
author
,
author_email
=
author_email
,
url
=
web
,
scripts
=
ensure_scripts
(
scripts
),
data_files
=
data_files
,
ext_modules
=
ext_modules
,
cmdclass
=
cmdclass
,
**
kwargs
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
install
()
Write
Preview
Supports
Markdown
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