Skip to content
Snippets Groups Projects
Commit a149c357550b authored by Sylvain Thénault's avatar Sylvain Thénault
Browse files

pkginfo cleanup, setuptools enabled setup.py

parent 18b619f80a89
No related branches found
No related tags found
No related merge requests found
README 0 → 100644
Summary
-------
The `blog` cube provides blogging functionnalities. It creates two entity types,
`Blog` and `BlogEntry`. There are related to each other by the relation
`BlogEntry entry_of Blog`.
Usage
-----
When a user submits a blog entry, it goes in a `draft` state until the blog
entry is published by an application managers. The blog entry will not be
visible until it reaches the `published` state.
When a blog entry is submitted, an email notification is automatically sent
to all the users belonging to the `managers` group of the application.
Specific boxes provided by this cube:
- `BlogEntryArchiveBox`, displays a box with the total number of blog entries
submitted by month for the last twelve months.
- `BlogEntryListBox`, displays a box with the latest five blog entries
published in your application as well as link to subscribe to a RSS feed.
- `BlogEntrySummary`, displays a box with the list of users who submitted
blog entries and the total number of blog entries they submitted.
This cube also provides some web services such as:
- http://xx:xxxx/blogentries/YYYY to retrieve the blog entries submitted
during the year YYYY through a RSS feed
- http://xx:xxxx/blogentries/YYYY/MM to retrieve the blog entries submitted
during the month MM of the year YYYY through a RSS feed
- http://xx:xxxx/blog/[eid]/blogentries/YYYY to retrieve the blog entries
submitted in the blog of identifier [eid], during the year YYYY through
a RSS feed
- http://xx:xxxx/blog/[eid]/blogentries/YYYY/MM to retrieve the blog entries
submitted in the blog of identifier [eid], during the month MM of the
year YYYY through a RSS feed
...@@ -13,51 +13,8 @@ ...@@ -13,51 +13,8 @@
author_email = "contact@logilab.fr" author_email = "contact@logilab.fr"
web = 'http://www.cubicweb.org/project/%s' % distname web = 'http://www.cubicweb.org/project/%s' % distname
short_desc = "blogging component for the CubicWeb framework" description = "blogging component for the CubicWeb framework"
long_desc = """\ short_desc = description # XXX cw < 3.8 bw compat
Summary
-------
The `blog` cube provides blogging functionnalities. It creates two entity types,
`Blog` and `BlogEntry`. There are related to each other by the relation
`BlogEntry entry_of Blog`.
Usage
-----
When a user submits a blog entry, it goes in a `draft` state until the blog
entry is published by an application managers. The blog entry will not be
visible until it reaches the `published` state.
When a blog entry is submitted, an email notification is automatically sent
to all the users belonging to the `managers` group of the application.
Specific boxes provided by this cube:
- `BlogEntryArchiveBox`, displays a box with the total number of blog entries
submitted by month for the last twelve months.
- `BlogEntryListBox`, displays a box with the latest five blog entries
published in your application as well as link to subscribe to a RSS feed.
- `BlogEntrySummary`, displays a box with the list of users who submitted
blog entries and the total number of blog entries they submitted.
This cube also provides some web services such as:
- http://xx:xxxx/blogentries/YYYY to retrieve the blog entries submitted
during the year YYYY through a RSS feed
- http://xx:xxxx/blogentries/YYYY/MM to retrieve the blog entries submitted
during the month MM of the year YYYY through a RSS feed
- http://xx:xxxx/blog/[eid]/blogentries/YYYY to retrieve the blog entries
submitted in the blog of identifier [eid], during the year YYYY through
a RSS feed
- http://xx:xxxx/blog/[eid]/blogentries/YYYY/MM to retrieve the blog entries
submitted in the blog of identifier [eid], during the month MM of the
year YYYY through a RSS feed
"""
classifiers = [ classifiers = [
'Environment :: Web Environment' 'Environment :: Web Environment'
...@@ -73,6 +30,7 @@ ...@@ -73,6 +30,7 @@
for cube in __recommends_cubes__: for cube in __recommends_cubes__:
__recommends__['cubicweb-'+cube] = __recommends_cubes__[cube] __recommends__['cubicweb-'+cube] = __recommends_cubes__[cube]
# package ### # package ###
from os import listdir as _listdir from os import listdir as _listdir
......
#!/usr/bin/env python #!/usr/bin/env python
# pylint: disable-msg=W0404,W0622,W0704,W0613,W0152 # pylint: disable-msg=W0404,W0622,W0704,W0613,W0152
# Copyright (c) 2003-2004 LOGILAB S.A. (Paris, FRANCE). """Generic Setup script, takes package info from __pkginfo__.py file.
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
# :copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# This program is free software; you can redistribute it and/or modify it under :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
# the terms of the GNU General Public License as published by the Free Software :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
# Foundation; either version 2 of the License, or (at your option) any later """
# version. __docformat__ = "restructuredtext en"
#
# This program is distributed in the hope that it will be useful, but WITHOUT import os
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS import sys
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. import shutil
# from os.path import isdir, exists, join, walk
# 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 """
...@@ -19,3 +15,12 @@ ...@@ -19,3 +15,12 @@
from distutils.core import setup 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
...@@ -21,2 +26,4 @@ ...@@ -21,2 +26,4 @@
sys.modules.pop('__pkginfo__', None)
# import required features # import required features
...@@ -22,4 +29,4 @@ ...@@ -22,4 +29,4 @@
# import required features # import required features
from __pkginfo__ import distname, version, license, short_desc, long_desc, \ from __pkginfo__ import modname, version, license, description, \
web, author, author_email web, author, author_email
# import optional features # import optional features
...@@ -24,13 +31,111 @@ ...@@ -24,13 +31,111 @@
web, author, author_email web, author, author_email
# import optional features # import optional features
try: import __pkginfo__
from __pkginfo__ import data_files distname = getattr(__pkginfo__, 'distname', modname)
except ImportError: scripts = getattr(__pkginfo__, 'scripts', [])
data_files = None data_files = getattr(__pkginfo__, 'data_files', None)
try: include_dirs = getattr(__pkginfo__, 'include_dirs', [])
from __pkginfo__ import include_dirs ext_modules = getattr(__pkginfo__, 'ext_modules', None)
except ImportError: dependency_links = getattr(__pkginfo__, 'dependency_links', [])
include_dirs = []
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): def install(**kwargs):
"""setup entry point""" """setup entry point"""
...@@ -34,17 +139,32 @@ ...@@ -34,17 +139,32 @@
def install(**kwargs): def install(**kwargs):
"""setup entry point""" """setup entry point"""
#kwargs['distname'] = modname if USE_SETUPTOOLS:
return setup(name=distname, if '--force-manifest' in sys.argv:
version=version, sys.argv.remove('--force-manifest')
license=license, # install-layout option was introduced in 2.5.3-1~exp1
description=short_desc, elif sys.version_info < (2, 5, 4) and '--install-layout=deb' in sys.argv:
long_description=long_desc, sys.argv.remove('--install-layout=deb')
author=author, kwargs['package_dir'] = {modname : '.'}
author_email=author_email, packages = [modname] + get_packages(os.getcwd(), modname)
url=web, if USE_SETUPTOOLS and install_requires:
data_files=data_files, kwargs['install_requires'] = install_requires
**kwargs) kwargs['dependency_links'] = dependency_links
kwargs['packages'] = packages
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__' : if __name__ == '__main__' :
install() install()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment