ISiocItem is an interface that is implemented by 'post' entities (in sioc specification) i.e blogentry, mail ...
IsiocContainer is an interface that is implemented by 'container' entities (see sioc specification) i.e blog, mailthread ...
"""distutils / __pkginfo__ helpers for cubicweb applications"""
import os
from os.path import isdir, join
def get_distutils_datafiles(cube, i18n=True, recursive=False):
"""
:param cube: application cube's name
"""
data_files = []
data_files += get_basepyfiles(cube)
data_files += get_webdatafiles(cube)
if i18n:
data_files += get_i18nfiles(cube)
data_files += get_viewsfiles(cube, recursive=recursive)
data_files += get_migrationfiles(cube)
data_files += get_schemafiles(cube)
return data_files
## listdir filter funcs ################################################
def nopyc_and_nodir(fname):
if isdir(fname) or fname.endswith('.pyc') or fname.endswith('~'):
return False
return True
def no_version_control(fname):
if fname in ('CVS', '.svn', '.hg'):
return False
if fname.endswith('~'):
return False
return True
def basepy_files(fname):
if fname.endswith('.py') and fname != 'setup.py':
return True
return False
def chain(*filters):
def newfilter(fname):
for filterfunc in filters:
if not filterfunc(fname):
return False
return True
return newfilter
def listdir_with_path(path='.', filterfunc=None):
if filterfunc:
return [join(path, fname) for fname in os.listdir(path) if filterfunc(join(path, fname))]
else:
return [join(path, fname) for fname in os.listdir(path)]
## data_files helpers ##################################################
CUBES_DIR = join('share', 'cubicweb', 'cubes')
def get_i18nfiles(cube):
"""returns i18n files in a suitable format for distutils's
data_files parameter
"""
i18ndir = join(CUBES_DIR, cube, 'i18n')
potfiles = [(i18ndir, listdir_with_path('i18n', chain(no_version_control, nopyc_and_nodir)))]
return potfiles
def get_viewsfiles(cube, recursive=False):
"""returns views files in a suitable format for distutils's
data_files parameter
:param recursive: include views' subdirs recursively if True
"""
if recursive:
datafiles = []
for dirpath, dirnames, filenames in os.walk('views'):
filenames = [join(dirpath, fname) for fname in filenames
if nopyc_and_nodir(join(dirpath, fname))]
dirpath = join(CUBES_DIR, cube, dirpath)
datafiles.append((dirpath, filenames))
return datafiles
else:
viewsdir = join(CUBES_DIR, cube, 'views')
return [(viewsdir,
listdir_with_path('views', filterfunc=nopyc_and_nodir))]
def get_basepyfiles(cube):
"""returns cube's base python scripts (tali18n.py, etc.)
in a suitable format for distutils's data_files parameter
"""
return [(join(CUBES_DIR, cube),
[fname for fname in os.listdir('.')
if fname.endswith('.py') and fname != 'setup.py'])]
def get_webdatafiles(cube):
"""returns web's data files (css, png, js, etc.) in a suitable
format for distutils's data_files parameter
"""
return [(join(CUBES_DIR, cube, 'data'),
listdir_with_path('data', filterfunc=no_version_control))]
def get_migrationfiles(cube):
"""returns cube's migration scripts
in a suitable format for distutils's data_files parameter
"""
return [(join(CUBES_DIR, cube, 'migration'),
listdir_with_path('migration', no_version_control))]
def get_schemafiles(cube):
"""returns cube's schema files
in a suitable format for distutils's data_files parameter
"""
return [(join(CUBES_DIR, cube, 'schema'),
listdir_with_path('schema', no_version_control))]