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
17e564618654
Commit
03c8b28d
authored
Jul 08, 2010
by
Sylvain Thénault
Browse files
pkginfo cleanup, setuptools support
parent
2d55b648515f
Changes
3
Hide whitespace changes
Inline
Side-by-side
__pkginfo__.py
View file @
17e56461
...
...
@@ -8,75 +8,10 @@ numversion = (1, 7, 0)
version
=
'.'
.
join
(
str
(
num
)
for
num
in
numversion
)
license
=
'LGPL'
copyright
=
'''Copyright (c) 2003-2010 LOGILAB S.A. (Paris, FRANCE).
http://www.logilab.fr/ -- mailto:contact@logilab.fr'''
description
=
"person component for the CubicWeb framework"
author
=
"Logilab"
author_email
=
"contact@logilab.fr"
web
=
'http://www.cubicweb.org/project/%s'
%
distname
short_desc
=
"person component for the CubicWeb framework"
long_desc
=
"""
\
Summary
-------
`person` provides person informations :
- firstname
- surname / lastname
- civility
- arbitrary text description
- a relation to an email address (NB, the `EmailAddress` entity is
automatically provided by cubicweb).
If the `addressbook` cube is used, persons will also have *phone* and
*postal_address* relations to store more contact information.
There is a special relation called 'primary_email'. A person can be linked to
multiple email addresses (using the 'use_email' relation). The primary email
must be unique. At the creation of the first email, this relation is
automatically added (though you can change it later, of course).
Recommends
----------
- `addressbook` cube
Usage
-----
In addition of basic entity views, this cube provides :
- *VCardPersonView*, displays a person in the VCard file format
(.. _VCard on wikipedia: http://en.wikipedia.org/wiki/VCard) .
This view creates a file called `vcard.vcf` which can be open in
your addressbook application (Kmail, Thunderbird and so on). In
order to generate this file, you have to access to a specific view
using an url address with `?vid=vcard` suffix.
How to personalize the person primary view in order to add a link
for the vcard ?
.. sourcecode:: python
class PersonalizedPersonPrimaryView(PersonPrimaryView):
def render_entity_attributes(self, entity):
super(PersonalizedPersonPrimaryView, self).render_entity_attributes(entity)
self.w(u'<div><a href="%s">export contact as vcard</a></div>' % entity.absolute_url(vid='vcard'))
This view will not be selected by default. You have to registered
this view or add a selector. For more information, please refer to
XXX in the doc.
- a *civility facet*, this facet (XXX: ref to facet doc) will be shown
if a view displays a result set of at least two Person entities with
different civilities.
"""
classifiers
=
[
'Environment :: Web Environment'
,
'Framework :: CubicWeb'
,
...
...
@@ -84,31 +19,31 @@ classifiers = [
'Programming Language :: JavaScript'
,
]
__depends_cubes__
=
{}
__depends__
=
{
'cubicweb'
:
'>= 3.6.0'
}
__use__
=
()
__recommend__
=
(
'addressbook'
,)
__depends__
=
{
'cubicweb'
:
'>= 3.8.0'
}
__recommends__
=
{
'cubicweb-addressbook'
:
None
}
# packaging ###
from
os
import
listdir
from
os.path
import
join
from
os
import
listdir
as
_listdir
from
os.path
import
join
,
isdir
from
glob
import
glob
THIS_CUBE_DIR
=
join
(
'share'
,
'cubicweb'
,
'cubes'
,
modname
)
THIS_CUBE_DIR
=
join
(
'share'
,
'cubicweb'
,
'cubes'
,
'person'
)
try
:
data_files
=
[
[
THIS_CUBE_DIR
,
[
fname
for
fname
in
listdir
(
'.'
)
if
fname
.
endswith
(
'.py'
)
and
fname
!=
'setup.py'
]],
[
join
(
THIS_CUBE_DIR
,
'data'
),
[
join
(
'data'
,
fname
)
for
fname
in
listdir
(
'data'
)]],
[
join
(
THIS_CUBE_DIR
,
'i18n'
),
[
join
(
'i18n'
,
fname
)
for
fname
in
listdir
(
'i18n'
)]],
[
join
(
THIS_CUBE_DIR
,
'migration'
),
[
join
(
'migration'
,
fname
)
for
fname
in
listdir
(
'migration'
)]],
]
except
OSError
:
# we are in an installed directory
pass
def
listdir
(
dirpath
):
return
[
join
(
dirpath
,
fname
)
for
fname
in
_listdir
(
dirpath
)
if
fname
[
0
]
!=
'.'
and
not
fname
.
endswith
(
'.pyc'
)
and
not
fname
.
endswith
(
'~'
)
and
not
isdir
(
join
(
dirpath
,
fname
))]
cube_eid
=
20342
data_files
=
[
# common files
[
THIS_CUBE_DIR
,
[
fname
for
fname
in
glob
(
'*.py'
)
if
fname
!=
'setup.py'
]],
]
# check for possible extended cube layout
for
dirname
in
(
'entities'
,
'views'
,
'sobjects'
,
'hooks'
,
'schema'
,
'data'
,
'i18n'
,
'migration'
,
'wdoc'
):
if
isdir
(
dirname
):
data_files
.
append
([
join
(
THIS_CUBE_DIR
,
dirname
),
listdir
(
dirname
)])
# Note: here, you'll need to add subdirectories if you want
# them to be included in the debian package
debian/rules
View file @
17e56461
...
...
@@ -7,7 +7,7 @@
build: build-stamp
build-stamp:
dh_testdir
python setup.py -q build
NO_SETUPTOOLS=1
python setup.py -q build
touch build-stamp
clean:
...
...
@@ -24,7 +24,7 @@ install: build
dh_testroot
dh_clean -k
dh_installdirs -i
python setup.py -q install --no-compile --prefix=debian/cubicweb-person/usr/
NO_SETUPTOOLS=1
python setup.py -q install --no-compile --prefix=debian/cubicweb-person/usr/
rm -rf debian/cubicweb-addressbook/usr/lib/python*
...
...
setup.py
View file @
17e56461
#!/usr/bin/env python
# pylint: disable-msg=W0404,W0622,W0704,W0613,W0152
# Copyright (c) 2003-2004 LOGILAB S.A. (Paris, FRANCE).
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
""" Generic Setup script, takes package info from __pkginfo__.py file """
from
distutils.core
import
setup
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
__docformat__
=
"restructuredtext en"
import
os
import
sys
import
shutil
from
os.path
import
isdir
,
exists
,
join
,
walk
try
:
if
os
.
environ
.
get
(
'NO_SETUPTOOLS'
):
raise
ImportError
()
from
setuptools
import
setup
from
setuptools.command
import
install_lib
USE_SETUPTOOLS
=
1
except
ImportError
:
from
distutils.core
import
setup
from
distutils.command
import
install_lib
USE_SETUPTOOLS
=
0
sys
.
modules
.
pop
(
'__pkginfo__'
,
None
)
# import required features
from
__pkginfo__
import
dist
name
,
version
,
license
,
short_desc
,
long_desc
,
\
from
__pkginfo__
import
mod
name
,
version
,
license
,
description
,
\
web
,
author
,
author_email
# import optional features
try
:
from
__pkginfo__
import
data_files
except
ImportError
:
data_files
=
None
try
:
from
__pkginfo__
import
include_dirs
except
ImportError
:
include_dirs
=
[]
import
__pkginfo__
distname
=
getattr
(
__pkginfo__
,
'distname'
,
modname
)
scripts
=
getattr
(
__pkginfo__
,
'scripts'
,
[])
data_files
=
getattr
(
__pkginfo__
,
'data_files'
,
None
)
include_dirs
=
getattr
(
__pkginfo__
,
'include_dirs'
,
[])
ext_modules
=
getattr
(
__pkginfo__
,
'ext_modules'
,
None
)
dependency_links
=
getattr
(
__pkginfo__
,
'dependency_links'
,
[])
STD_BLACKLIST
=
(
'CVS'
,
'.svn'
,
'.hg'
,
'debian'
,
'dist'
,
'build'
)
IGNORED_EXTENSIONS
=
(
'.pyc'
,
'.pyo'
,
'.elc'
,
'~'
)
if
exists
(
'README'
):
long_description
=
file
(
'README'
).
read
()
else
:
long_description
=
''
if
USE_SETUPTOOLS
:
requires
=
{}
for
entry
in
(
"__depends__"
,
"__recommends__"
):
requires
.
update
(
getattr
(
__pkginfo__
,
entry
,
{}))
install_requires
=
[(
"%s %s"
%
(
d
,
v
and
v
or
""
)).
strip
()
for
d
,
v
in
requires
.
iteritems
()]
else
:
install_requires
=
[]
def
ensure_scripts
(
linux_scripts
):
"""Creates the proper script names required for each platform
(taken from 4Suite)
"""
from
distutils
import
util
if
util
.
get_platform
()[:
3
]
==
'win'
:
scripts_
=
[
script
+
'.bat'
for
script
in
linux_scripts
]
else
:
scripts_
=
linux_scripts
return
scripts_
def
get_packages
(
directory
,
prefix
):
"""return a list of subpackages for the given directory"""
result
=
[]
for
package
in
os
.
listdir
(
directory
):
absfile
=
join
(
directory
,
package
)
if
isdir
(
absfile
):
if
exists
(
join
(
absfile
,
'__init__.py'
))
or
\
package
in
(
'test'
,
'tests'
):
if
prefix
:
result
.
append
(
'%s.%s'
%
(
prefix
,
package
))
else
:
result
.
append
(
package
)
result
+=
get_packages
(
absfile
,
result
[
-
1
])
return
result
def
export
(
from_dir
,
to_dir
,
blacklist
=
STD_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"""
for
norecurs
in
blacklist
:
try
:
fnames
.
remove
(
norecurs
)
except
ValueError
:
pass
for
filename
in
fnames
:
# don't include binary files
if
filename
[
-
4
:]
in
ignore_ext
:
continue
if
filename
[
-
1
]
==
'~'
:
continue
src
=
join
(
directory
,
filename
)
dest
=
to_dir
+
src
[
len
(
from_dir
):]
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
)
class
MyInstallLib
(
install_lib
.
install_lib
):
"""extend install_lib command to handle package __init__.py and
include_dirs variable if necessary
"""
def
run
(
self
):
"""overridden from install_lib class"""
install_lib
.
install_lib
.
run
(
self
)
# manually install included directories if any
if
include_dirs
:
base
=
modname
for
directory
in
include_dirs
:
dest
=
join
(
self
.
install_dir
,
base
,
directory
)
export
(
directory
,
dest
,
verbose
=
False
)
def
install
(
**
kwargs
):
"""setup entry point"""
#kwargs['distname'] = modname
return
setup
(
name
=
distname
,
version
=
version
,
license
=
license
,
description
=
short_desc
,
long_description
=
long_desc
,
author
=
author
,
author_email
=
author_email
,
url
=
web
,
data_files
=
data_files
,
**
kwargs
)
if
USE_SETUPTOOLS
:
if
'--force-manifest'
in
sys
.
argv
:
sys
.
argv
.
remove
(
'--force-manifest'
)
# install-layout option was introduced in 2.5.3-1~exp1
elif
sys
.
version_info
<
(
2
,
5
,
4
)
and
'--install-layout=deb'
in
sys
.
argv
:
sys
.
argv
.
remove
(
'--install-layout=deb'
)
if
USE_SETUPTOOLS
and
install_requires
:
kwargs
[
'install_requires'
]
=
install_requires
kwargs
[
'dependency_links'
]
=
dependency_links
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
=
{
'install_lib'
:
MyInstallLib
},
**
kwargs
)
if
__name__
==
'__main__'
:
install
()
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