[migration] fix crash when adding symmetric relation type
#!/usr/bin/env python# pylint: disable-msg=W0404,W0622,W0704,W0613,W0152# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr__docformat__="restructuredtext en"importosimportsysimportshutilfromos.pathimportisdir,exists,join,walktry:ifos.environ.get('NO_SETUPTOOLS'):raiseImportError()fromsetuptoolsimportsetupfromsetuptools.commandimportinstall_libUSE_SETUPTOOLS=1exceptImportError:fromdistutils.coreimportsetupfromdistutils.commandimportinstall_libUSE_SETUPTOOLS=0sys.modules.pop('__pkginfo__',None)# import required featuresfrom__pkginfo__importmodname,version,license,description, \web,author,author_email# import optional featuresimport__pkginfo__distname=getattr(__pkginfo__,'distname',modname)scripts=getattr(__pkginfo__,'scripts',[])data_files=getattr(__pkginfo__,'data_files',None)include_dirs=getattr(__pkginfo__,'include_dirs',[])ext_modules=getattr(__pkginfo__,'ext_modules',None)dependency_links=getattr(__pkginfo__,'dependency_links',[])STD_BLACKLIST=('CVS','.svn','.hg','debian','dist','build')IGNORED_EXTENSIONS=('.pyc','.pyo','.elc','~')ifexists('README'):long_description=file('README').read()else:long_description=''ifUSE_SETUPTOOLS:requires={}forentryin("__depends__","__recommends__"):requires.update(getattr(__pkginfo__,entry,{}))install_requires=[("%s%s"%(d,vandvor"")).strip()ford,vinrequires.iteritems()]else:install_requires=[]defensure_scripts(linux_scripts):"""Creates the proper script names required for each platform (taken from 4Suite) """fromdistutilsimportutilifutil.get_platform()[:3]=='win':scripts_=[script+'.bat'forscriptinlinux_scripts]else:scripts_=linux_scriptsreturnscripts_defget_packages(directory,prefix):"""return a list of subpackages for the given directory"""result=[]forpackageinos.listdir(directory):absfile=join(directory,package)ifisdir(absfile):ifexists(join(absfile,'__init__.py'))or \packagein('test','tests'):ifprefix:result.append('%s.%s'%(prefix,package))else:result.append(package)result+=get_packages(absfile,result[-1])returnresultdefexport(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 """defmake_mirror(arg,directory,fnames):"""walk handler"""fornorecursinblacklist:try:fnames.remove(norecurs)exceptValueError:passforfilenameinfnames:# don't include binary filesiffilename[-4:]inignore_ext:continueiffilename[-1]=='~':continuesrc=join(directory,filename)dest=to_dir+src[len(from_dir):]ifverbose:print>>sys.stderr,src,'->',destifos.path.isdir(src):ifnotexists(dest):os.mkdir(dest)else:ifexists(dest):os.remove(dest)shutil.copy2(src,dest)try:os.mkdir(to_dir)exceptOSError,ex:# file exists ?importerrnoifex.errno!=errno.EEXIST:raisewalk(from_dir,make_mirror,None)classMyInstallLib(install_lib.install_lib):"""extend install_lib command to handle package __init__.py and include_dirs variable if necessary """defrun(self):"""overridden from install_lib class"""install_lib.install_lib.run(self)# manually install included directories if anyifinclude_dirs:base=modnamefordirectoryininclude_dirs:dest=join(self.install_dir,base,directory)export(directory,dest,verbose=False)definstall(**kwargs):"""setup entry point"""ifUSE_SETUPTOOLS:if'--force-manifest'insys.argv:sys.argv.remove('--force-manifest')# install-layout option was introduced in 2.5.3-1~exp1elifsys.version_info<(2,5,4)and'--install-layout=deb'insys.argv:sys.argv.remove('--install-layout=deb')ifUSE_SETUPTOOLSandinstall_requires:kwargs['install_requires']=install_requireskwargs['dependency_links']=dependency_linksreturnsetup(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__':install()