I've just hit an issue using comtypes to interact with Virtualbox.
Here's the simplest test case I can create:

import comtypes.client
import comtypes.gen.VirtualBox

vbox = comtypes.client.CreateObject('VirtualBox.VirtualBox')
machine = vbox.FindMachine('Ahri')
adapter = machine.getNetworkAdapter(0)
nat = adapter.NATEngine
print(repr(nat.redirects))

This gets the redirects property from the NatEngine object, which is
documented as follows:

readonly attribute wstring[] redirects
 Array of NAT port-forwarding rules in string representation, in the
following format: "name,protocol id,host ip,host port,guest ip,guest
port".

When I run this test, I get:

>python .\test.py
Traceback (most recent call last):
  File ".\test.py", line 8, in <module>
    print(repr(nat.redirects))
  File "C:\Work\Projects\vm\ve\lib\site-packages\comtypes\__init__.py",
line 279, in __getattr__
    return getattr(self, fixed_name)
  File "C:\Work\Projects\vm\ve\lib\site-packages\comtypes\safearray.py",
line 218, in __ctypes_from_outparam__
    return self[0]
  File "C:\Work\Projects\vm\ve\lib\site-packages\comtypes\safearray.py",
line 209, in __getitem__
    return self.unpack()
  File "C:\Work\Projects\vm\ve\lib\site-packages\comtypes\safearray.py",
line 234, in unpack
    result = self._get_elements_raw(num_elements)
  File "C:\Work\Projects\vm\ve\lib\site-packages\comtypes\safearray.py",
line 301, in _get_elements_raw
    import numpy.ctypeslib
ImportError: No module named 'numpy'

As far as I can tell, comtypes is interpreting the array of wstring
objects as a 2-dimensional array, and as a result thinks it needs
numpy.

Two suggestions here:

1. If numpy isn't available, fall back to something core Python can
handle like a tuple of tuples.
2. In this particular case, the code should be returning a tuple of
(Unicode) strings.

The equivalent code works with pywin32, for what it's worth.

Paul

PS The website address and issue tracker mentioned on PyPI point to a
dead link - https://github.com/jaraco/comtypes/

------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to