1# Copyright 2004-2008 Roman Yakovenko. 2# Distributed under the Boost Software License, Version 1.0. (See 3# accompanying file LICENSE_1_0.txt or copy at 4# http://www.boost.org/LICENSE_1_0.txt) 5 6""" 7This package contains few classes, which write :class:`code_creators.module_t` to files. 8""" 9 10import types 11from .writer import writer_t 12from .single_file import single_file_t 13from .multiple_files import multiple_files_t 14from .balanced_files import balanced_files_t 15from .class_multiple_files import class_multiple_files_t 16from .md5sum_repository import repository_t 17from .md5sum_repository import cached_repository_t 18 19def has_pypp_extenstion( fname ): 20 """returns True if file has `Py++` specific extension, otherwise False""" 21 for ext in ( multiple_files_t.HEADER_EXT, multiple_files_t.SOURCE_EXT ): 22 if fname.endswith( ext ): 23 return True 24 return False 25 26def write_file( data, file_path, encoding='ascii' ): 27 """writes data to file""" 28 if isinstance( data, str ): 29 writer_t.write_file( data, file_path, encoding=encoding ) 30 else: 31 sf = single_file_t( data, file_path, encoding=encoding ) 32 sf.write() 33 34def write_multiple_files( extmodule, dir_path, files_sum_repository=None, encoding='ascii' ): 35 """writes extmodule to multiple files""" 36 mfs = multiple_files_t( extmodule, dir_path, files_sum_repository=files_sum_repository, encoding=encoding ) 37 mfs.write() 38 return mfs.written_files 39 40def write_balanced_files( extmodule, dir_path, number_of_buckets, files_sum_repository=None, encoding='ascii' ): 41 """writes extmodule to fixed number of multiple .cpp files""" 42 mfs = balanced_files_t( extmodule, dir_path, number_of_buckets, files_sum_repository=files_sum_repository, encoding=encoding ) 43 mfs.write() 44 return mfs.written_files 45 46def write_class_multiple_files( extmodule, dir_path, huge_classes, files_sum_repository, encoding='ascii' ): 47 """writes extmodule to multiple files and splits huge classes to few source files""" 48 mfs = class_multiple_files_t( extmodule, dir_path, huge_classes, files_sum_repository=files_sum_repository, encoding=encoding ) 49 mfs.write() 50 return mfs.written_files 51