[Mobies-commit] [commit] r4270 - in UDM/trunk: Projects/Win32/VC10/src Projects/Win32/VC10/src/UdmPython bin src/UdmPython tests/test_UdmPython
ksmyth at redhat3.isis.vanderbilt.edu
ksmyth at redhat3.isis.vanderbilt.edu
Fri Mar 7 10:30:35 CST 2014
Author: ksmyth
Date: Fri Mar 7 10:30:35 2014
New Revision: 4270
Log:
UdmPython: Python 3.3 support
Added:
UDM/trunk/Projects/Win32/VC10/src/Python33.props
Modified:
UDM/trunk/Projects/Win32/VC10/src/UdmPython/UdmPython.vcxproj
UDM/trunk/bin/udm.py
UDM/trunk/src/UdmPython/UdmPython.cpp
UDM/trunk/src/UdmPython/setup.py
UDM/trunk/tests/test_UdmPython/udm_python_test.py
Added: UDM/trunk/Projects/Win32/VC10/src/Python33.props
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ UDM/trunk/Projects/Win32/VC10/src/Python33.props Fri Mar 7 10:30:35 2014 (r4270)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ImportGroup Label="PropertySheets" />
+ <PropertyGroup Label="UserMacros">
+ <PYTHON_VERSION>33</PYTHON_VERSION>
+ </PropertyGroup>
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>C:\Python33\PC;C:\Python33\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>C:\Python33\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <BuildMacro Include="PYTHON_VERSION">
+ <Value>$(PYTHON_VERSION)</Value>
+ </BuildMacro>
+ </ItemGroup>
+</Project>
\ No newline at end of file
Modified: UDM/trunk/Projects/Win32/VC10/src/UdmPython/UdmPython.vcxproj
==============================================================================
--- UDM/trunk/Projects/Win32/VC10/src/UdmPython/UdmPython.vcxproj Thu Mar 6 10:51:51 2014 (r4269)
+++ UDM/trunk/Projects/Win32/VC10/src/UdmPython/UdmPython.vcxproj Fri Mar 7 10:30:35 2014 (r4270)
@@ -17,6 +17,14 @@
<Configuration>Release27</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release33|Win32">
+ <Configuration>Release33</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release33|x64">
+ <Configuration>Release33</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -61,6 +69,16 @@
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release33|x64'">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release33|Win32'">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
@@ -94,6 +112,14 @@
<Import Project="..\Udm.props" />
<Import Project="..\Python26.props" />
</ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release33|Win32'">
+ <Import Project="..\Python33.props" />
+ <Import Project="..\Udm.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release33|x64'">
+ <Import Project="..\Python33.props" />
+ <Import Project="..\Udm.props" />
+ </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -115,6 +141,11 @@
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$([System.IO.Path]::GetFullPath($(UDM_PATH)\bin\Python$(PYTHON_VERSION)))\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$([System.IO.Path]::GetFullPath($(UDM_PATH)\bin\Python$(PYTHON_VERSION)))\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$([System.IO.Path]::GetFullPath($(UDM_PATH)\bin\Python$(PYTHON_VERSION)))\</OutDir>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release33|Win32'">udm</TargetName>
+ <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release33|Win32'">.pyd</TargetExt>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release33|x64'">udm</TargetName>
+ <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release33|x64'">.pyd</TargetExt>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release33|Win32'">$([System.IO.Path]::GetFullPath($(UDM_PATH)\bin\Python$(PYTHON_VERSION)))\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<CustomBuildStep />
@@ -249,6 +280,34 @@
</Link>
<PostBuildEvent />
</ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release33|x64'">
+ <ClCompile>
+ <PreprocessorDefinitions>UDM_DYNAMIC_LINKING;UDM_PY_MODULE_NAME=$(TargetName);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <WarningLevel>Level3</WarningLevel>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>$([System.IO.Path]::GetFullPath($(UDM_PATH)\Build\$(Platform)\$(PlatformToolset)\Release\));%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(TargetDir)$(TargetName)_pyd$(PYTHON_VERSION).pdb</ProgramDatabaseFile>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release33|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>UDM_DYNAMIC_LINKING;UDM_PY_MODULE_NAME=$(TargetName);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <WarningLevel>Level3</WarningLevel>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>$([System.IO.Path]::GetFullPath($(UDM_PATH)\Build\$(Platform)\$(PlatformToolset)\Release\));%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(TargetDir)$(TargetName)_pyd$(PYTHON_VERSION).pdb</ProgramDatabaseFile>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\..\src\UdmPython\UdmPython.cpp" />
</ItemGroup>
Modified: UDM/trunk/bin/udm.py
==============================================================================
--- UDM/trunk/bin/udm.py Thu Mar 6 10:51:51 2014 (r4269)
+++ UDM/trunk/bin/udm.py Fri Mar 7 10:30:35 2014 (r4270)
@@ -3,5 +3,7 @@
from Python26.udm import *
elif sys.version_info[0:2] == (2,7):
from Python27.udm import *
+elif sys.version_info[0:2] == (3,3):
+ from Python33.udm import *
else:
raise ImportError("Unsupported Python version " + str(sys.version_info))
Modified: UDM/trunk/src/UdmPython/UdmPython.cpp
==============================================================================
--- UDM/trunk/src/UdmPython/UdmPython.cpp Thu Mar 6 10:51:51 2014 (r4269)
+++ UDM/trunk/src/UdmPython/UdmPython.cpp Fri Mar 7 10:30:35 2014 (r4270)
@@ -11,6 +11,10 @@
#include "boost/python/slice.hpp"
#include "boost/python/operators.hpp"
+#if PY_MAJOR_VERSION >= 3
+#define PY3K
+#endif
+
#undef min
#undef max
@@ -31,15 +35,24 @@
{
if (PyUnicode_Check(string.ptr()))
{
- object encoded(handle<>(PyUnicode_AsEncodedString(string.ptr(), "UTF-8", "replace")));
#ifdef PY3K
+#if PY_MINOR_VERSION >= 3
+ return PyUnicode_AsUTF8(string.ptr());
+#else
+ object encoded(handle<>(PyUnicode_AsEncodedString(string.ptr(), "UTF-8", "replace")));
return PyBytes_AS_STRING(encoded.ptr());
+#endif
#else
+ object encoded(handle<>(PyUnicode_AsEncodedString(string.ptr(), "UTF-8", "replace")));
return PyString_AS_STRING(encoded.ptr());
#endif
}
else
+#ifdef PY3K
+ throw udm_exception("Not a unicode object");
+#else
return PyString_AsString(string.ptr());
+#endif
}
#ifdef _WIN32
@@ -97,7 +110,11 @@
#endif
void SDN_OpenExisting(Udm::SmartDataNetwork& self, object systemname, const string& metalocator) {
+#ifdef PY3K
+ if (PyUnicode_Check(systemname.ptr()))
+#else
if (PyString_Check(systemname.ptr()) || PyUnicode_Check(systemname.ptr()))
+#endif
{
std::string string_systemname = stringtoutf8(systemname);
self.OpenExisting(string_systemname, metalocator, Udm::CHANGES_LOST_DEFAULT);
@@ -819,13 +836,16 @@
"def map_uml_names(diagram):\n"
" import sys\n"
" udm = sys.modules['udm']\n"
-" class_meta = filter(lambda class_: class_.name == 'Class', udm.uml_diagram().children())[0]\n"
-" namespace_meta = filter(lambda class_: class_.name == 'Namespace', udm.uml_diagram().children())[0]\n"
+" class_meta = next(filter(lambda class_: class_.name == 'Class', udm.uml_diagram().children()).__iter__())\n"
+" namespace_meta = next(filter(lambda class_: class_.name == 'Namespace', udm.uml_diagram().children()).__iter__())\n"
" class ClassMap(object):\n"
" def __init__(self, d):\n"
" self.__dict__.update(d)\n"
" def map_classes(container):\n"
" ret = map(lambda class_: (class_.name, class_), container.children(child_type=class_meta))\n"
+#ifdef PY3K
+" ret = list(ret)\n"
+#endif
" ret.extend(map(lambda namespace: (namespace.name, map_classes(namespace)), container.children(child_type=namespace_meta)))\n"
" return ClassMap(ret)\n"
" return map_classes(diagram)\n",
Modified: UDM/trunk/src/UdmPython/setup.py
==============================================================================
--- UDM/trunk/src/UdmPython/setup.py Thu Mar 6 10:51:51 2014 (r4269)
+++ UDM/trunk/src/UdmPython/setup.py Fri Mar 7 10:30:35 2014 (r4270)
@@ -39,7 +39,7 @@
import os.path
try:
os.makedirs(os.path.dirname(self.get_ext_fullpath(ext.name)))
- except WindowsError, e:
+ except WindowsError as e:
if e.winerror != 183: # already exists
raise
Modified: UDM/trunk/tests/test_UdmPython/udm_python_test.py
==============================================================================
--- UDM/trunk/tests/test_UdmPython/udm_python_test.py Thu Mar 6 10:51:51 2014 (r4269)
+++ UDM/trunk/tests/test_UdmPython/udm_python_test.py Fri Mar 7 10:30:35 2014 (r4270)
@@ -21,7 +21,7 @@
elif _platform == "win32":
# Windows...
sys.path.append(r"C:\Program Files\ISIS\Udm\bin")
- if os.environ.has_key("UDM_PATH"):
+ if "UDM_PATH" in os.environ:
sys.path.append(os.path.join(os.environ["UDM_PATH"], "bin"))
try:
@@ -34,7 +34,7 @@
def get_names(col):
names = map(lambda x: x.name, col)
- names.sort()
+ names = sorted(names)
return names
@@ -64,14 +64,15 @@
self.assertEquals(container.children(child_role="cmproleA"), container.cmproleA_role_children)
self.assertEquals(get_names(container.cmproleB_role_children), [ "cmproleB1"] )
self.assertEquals(container.type, test_meta.Container)
- cmproleA1 = filter(lambda x: x.name =="cmproleA1", container.children())[0]
- cmproleA2 = filter(lambda x: x.name =="cmproleA2", container.children())[0]
+ def first(container): return next(container.__iter__())
+ cmproleA1 = first(filter(lambda x: x.name =="cmproleA1", container.children()))
+ cmproleA2 = first(filter(lambda x: x.name =="cmproleA2", container.children()))
self.assertEquals(cmproleA1.dstConnection, [cmproleA2])
self.assertEquals(cmproleA1.adjacent(dst_role="dstConnection"), [cmproleA2])
self.assertEquals(cmproleA1.adjacent(src_role="srcConnection"), [cmproleA2])
self.assertEquals(cmproleA2.adjacent(dst_role="dstConnection"), [])
self.assertEquals(cmproleA2.adjacent(src_role="srcConnection"), [])
- AtomA1 = filter(lambda x: x.name =="AtomA1", container.children())[0]
+ AtomA1 = first(filter(lambda x: x.name =="AtomA1", container.children()))
self.assertEquals(AtomA1.boolattr, True)
self.assertEquals(AtomA1.stringattr, "teststring")
self.assertEquals(AtomA1.intattr, 42)
@@ -79,12 +80,15 @@
self.assertEquals(AtomA1.intattr, 60)
AtomA1.stringattr = "test123"
self.assertEquals(AtomA1.stringattr, "test123")
+ unicode_teststring = u'\xc1rv\xedzt\u0171r\u0151 t\xfck\xf6rf\xfar\xf3g\xe9p\U0001d11e\u0393\u03b1\u03b6\u03ad\u03b5\u03c2 \u03ba\u03b1\u1f76 \u03bc\u03c5\u03c1\u03c4\u03b9\u1f72\u03c2 \u03b4\u1f72\u03bd \u03b8\u1f70 \u03b2\u03c1\u1ff6 \u03c0\u03b9\u1f70 \u03c3\u03c4\u1f78 \u03c7\u03c1\u03c5\u03c3\u03b1\u03c6\u1f76 \u03be\u03ad\u03c6\u03c9\u03c4\u03bf\u0ca0_\u0ca0\u30a6\u30f0\u30ce\u30aa\u30af\u30e4\u30de \u30b1\u30d5\u30b3\u30a8\u30c6 \u30a2\u30b5\u30ad\u30e6\u30e1\u30df\u30b7 \u30f1\u30d2\u30e2\u30bb\u30b9\u30f3\u0421\u044a\u0435\u0448\u044c \u0436\u0435 \u0435\u0449\u0451 \u044d\u0442\u0438\u0445 \u043c\u044f\u0433\u043a\u0438\u0445 \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0445 \u0431\u0443\u043b\u043e\u043a \u0434\u0430 \u0432\u044b\u043f\u0435\u0439 \u0447\u0430\u044e'
+ AtomA1.stringattr = unicode_teststring
+ self.assertEquals(AtomA1.stringattr, unicode_teststring)
# trying to access nonexistant attribute raises an exception
try:
self.assertFalse(container.nonexistantattribute)
- except RuntimeError, e:
+ except RuntimeError as e:
# the error message should include the type's name and attribute name
self.assertTrue(str(e).find("Container") != -1)
self.assertTrue(str(e).find("nonexistantattribute") != -1)
@@ -141,11 +145,11 @@
os.path.join(this_dir, r'..\..\build\Win32\v100\Release\UdmDll_VS10.lib')], stdout=out_file, env=env)
new_exports = {}
- with open(os.path.join(this_dir, 'UdmDll_VS10.lib.exports'), 'rb') as out_file:
+ with open(os.path.join(this_dir, 'UdmDll_VS10.lib.exports'), 'r') as out_file:
for line in out_file:
new_exports[line.rstrip('\r\n')] = 1
- with open(os.path.join(this_dir, 'UdmDll_VS10.lib.3.2.12.exports'), 'rb') as existing_file:
+ with open(os.path.join(this_dir, 'UdmDll_VS10.lib.3.2.12.exports'), 'r') as existing_file:
for lineno, existing_line in enumerate(existing_file):
existing_line = existing_line.rstrip('\r\n')
self.assertTrue(existing_line in new_exports, existing_line + " doesnt exist anymore. Line " + str(lineno))
More information about the Mobies-commit
mailing list