[pygccxml-commit] SF.net SVN: pygccxml: [760] pyplusplus_dev_ft/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-11-28 08:27:49
|
Revision: 760 http://svn.sourceforge.net/pygccxml/?rev=760&view=rev Author: roman_yakovenko Date: 2006-11-28 00:27:48 -0800 (Tue, 28 Nov 2006) Log Message: ----------- adding named_tuple class. It will be used for FT feature Modified Paths: -------------- pyplusplus_dev_ft/pyplusplus/code_repository/__init__.py pyplusplus_dev_ft/pyplusplus/decl_wrappers/__init__.py pyplusplus_dev_ft/pyplusplus/decl_wrappers/properties.py pyplusplus_dev_ft/pyplusplus/file_writers/writer.py pyplusplus_dev_ft/pyplusplus/module_creator/creator.py Added Paths: ----------- pyplusplus_dev_ft/pyplusplus/code_repository/named_tuple.py Modified: pyplusplus_dev_ft/pyplusplus/code_repository/__init__.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/code_repository/__init__.py 2006-11-27 21:12:53 UTC (rev 759) +++ pyplusplus_dev_ft/pyplusplus/code_repository/__init__.py 2006-11-28 08:27:48 UTC (rev 760) @@ -15,10 +15,11 @@ import array_1 import gil_guard +import named_tuple import convenience import call_policies -all = [ array_1, gil_guard, convenience, call_policies ] +all = [ array_1, gil_guard, convenience, call_policies, named_tuple ] headers = map( lambda f: f.file_name, all ) Added: pyplusplus_dev_ft/pyplusplus/code_repository/named_tuple.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/code_repository/named_tuple.py (rev 0) +++ pyplusplus_dev_ft/pyplusplus/code_repository/named_tuple.py 2006-11-28 08:27:48 UTC (rev 760) @@ -0,0 +1,65 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +file_name = "named_tuple.py" + +code = \ +"""# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +class named_tuple(tuple): + \"\"\"Creates tuple, which allows access to stored values by name and by index. + + named_tuple could be constructed exactly in the same way as Python dict. + \"\"\" + + def __new__(cls, seq=None, **keywd): + if seq: + if isinstance( seq, dict ): + return tuple.__new__( cls, seq.values() ) + else: + return tuple.__new__( cls, [ val for name, val in seq] ) + else: + return tuple.__new__( cls, keywd.values() ) + + def __init__(self, seq=None, **keywd): + "named_tuple could be constructed exactly in the same way as Python dict." + tuple.__init__( self ) + if seq: + if isinstance( seq, dict ): + name2value = dict( seq.iteritems() ) + else: + name2value = dict( seq ) + else: + name2value = dict( keywd ) + self.__dict__[ '__name2value' ] = name2value + + def __getattr__(self, name): + try: + return self.__dict__['__name2value'][ name ] + except KeyError: + raise AttributeError( "named_tuple has no attribute '%s'" % name ) + + def __setattr__(self, name, value): + raise AttributeError( "named_tuple has no attribute '%s'" % name ) + + def __getitem__( self, key ): + #TODO: it could be nice to support slicing. So the __getitem__ in case of + #slicing will return new named_tuple. + if isinstance( key, basestring ): + return self.__dict__['__name2value'][ key ] + else: + return super( named_tuple, self ).__getitem__( key ) + +if __name__ == '__main__': + nt = named_tuple( a=0, b=1) + assert nt.a == 0 and nt.b == 1 + a,b = nt + assert a == 0 and b == 1 + assert nt[ "a" ] == 0 and nt[ "b" ] == 1 + +""" Modified: pyplusplus_dev_ft/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/decl_wrappers/__init__.py 2006-11-27 21:12:53 UTC (rev 759) +++ pyplusplus_dev_ft/pyplusplus/decl_wrappers/__init__.py 2006-11-28 08:27:48 UTC (rev 760) @@ -149,3 +149,17 @@ def create_variable( self, *arguments, **keywords ): return variable_t(*arguments, **keywords) + +skip_messages = [ + "Py++ does not exports compiler generated constructors" + , 'Py++, by default, does not expose internal compilers declarations. Names of those declarations usually start with "__".' + , 'Py++, by default, does not expose internal declarations (those that gccxml say belong to "<internal>" header).' + , 'Py++, by default, does not expose compiler generated declarations.' + , 'Py++ can not expose private class.' + , 'Py++ will generate class wrapper - class contains definition of virtual or pure virtual member function' + , "Py++ doesn't expose private or protected member variables." + , "Py++ doesn't export private not virtual functions." + , "Py++ doesn't export private constructor." + , "Py++ doesn't export private operators." +] +#Messages kept by skip_messages list will not be reported Modified: pyplusplus_dev_ft/pyplusplus/decl_wrappers/properties.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/decl_wrappers/properties.py 2006-11-27 21:12:53 UTC (rev 759) +++ pyplusplus_dev_ft/pyplusplus/decl_wrappers/properties.py 2006-11-28 08:27:48 UTC (rev 760) @@ -106,7 +106,7 @@ , self.make_l_camel_convention ] for convention_maker in convention_makers: - for g, s in self.__prefixes: + for g, s in self.prefixes(): gc, sc = convention_maker( g, s ) if self.check_name_compatibility( gname, sname, gc, sc ): return ( gc, sc ) Modified: pyplusplus_dev_ft/pyplusplus/file_writers/writer.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/file_writers/writer.py 2006-11-27 21:12:53 UTC (rev 759) +++ pyplusplus_dev_ft/pyplusplus/file_writers/writer.py 2006-11-28 08:27:48 UTC (rev 760) @@ -50,7 +50,12 @@ for cr in code_repository.all: if self.__extmodule.is_system_header( cr.file_name ): self.write_file( os.path.join( dir, cr.file_name ), cr.code ) - + #temporal patch: always write named_tuple.py file + + f = file( os.path.join( dir, code_repository.named_tuple.file_name ), 'w+b' ) + f.write( code_repository.named_tuple.code ) + f.close() + @staticmethod def write_file( fpath, content ): """Write a source file. @@ -91,4 +96,4 @@ f.write( fcontent_new ) f.close() writer_t.logger.info( 'file "%s" - updated( %f seconds )' % ( fname, time.clock() - start_time ) ) - \ No newline at end of file + Modified: pyplusplus_dev_ft/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/module_creator/creator.py 2006-11-27 21:12:53 UTC (rev 759) +++ pyplusplus_dev_ft/pyplusplus/module_creator/creator.py 2006-11-28 08:27:48 UTC (rev 760) @@ -47,19 +47,6 @@ INDEXING_SUITE_2_MAIN_HEADER = "boost/python/suite/indexing/container_suite.hpp" -DO_NOT_REPORT_MSGS = [ - "Py++ does not exports compiler generated constructors" - , 'Py++, by default, does not expose internal compilers declarations. Names of those declarations usually start with "__".' - , 'Py++, by default, does not expose internal declarations (those that gccxml say belong to "<internal>" header).' - , 'Py++, by default, does not expose compiler generated declarations.' - , 'Py++ can not expose private class.' - , 'Py++ will generate class wrapper - class contains definition of virtual or pure virtual member function' - , "Py++ doesn't expose private or protected member variables." - , "Py++ doesn't export private not virtual functions." - , "Py++ doesn't export private constructor." - , "Py++ doesn't export private operators." -] - class creator_t( declarations.decl_visitor_t ): """Creating code creators. @@ -142,8 +129,6 @@ self.__return_pointee_value_exists = False def _prepare_decls( self, decls, doc_extractor ): - global DO_NOT_REPORT_MSGS - decls = declarations.make_flatten( decls ) for decl in decls: @@ -164,7 +149,7 @@ if doc_extractor and decl.exportable: decl.documentation = doc_extractor( decl ) - readme = filter( lambda msg: msg not in DO_NOT_REPORT_MSGS, decl.readme() ) + readme = filter( lambda msg: msg not in decl_wrappers.skip_messages, decl.readme() ) if not readme: continue This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |