diff -r 000000000000 -r b97547f5f1fa devtools/pkginfo.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devtools/pkginfo.py Wed Nov 05 15:52:50 2008 +0100 @@ -0,0 +1,120 @@ +"""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))] + +