The PySide team is happy to announce the fourth beta release of PySide: Python for Qt. New versions of some of the PySide toolchain components apiextractor, generatorrunner, shiboken, libpyside, pyside-tools have been released as well. Like the others, this is a source code release only; we hope our community packagers will be providing provide binary packages shortly. To acquire the source code packages, refer to our download wiki page [1] or pull the relevant tagged versions from our git repositories [2]. Major changes since 1.0.0~beta3 =============================== This is a bug fix release. Since beta3, a total of 47 high-priority bugs have been fixed. See the list of fixed bugs at the end of this message. Path towards 1.0 release ======================== There are still some outstanding bugs in our Bugzilla [3]. To have these fixed, we plan to do other beta in two weeks. The beta cycle will continue until we have all P2 bugs fixed. About PySide ============ PySide is the Nokia-sponsored Python Qt bindings project, providing access to not only the complete Qt 4.7 framework but also Qt Mobility, as well as to generator tools for rapidly generating bindings for any Qt-based libraries. The PySide project is developed in the open, with all facilities you'd expect from any modern OSS project such as all code in a git repository [2], an open Bugzilla [5] for reporting bugs, and an open design process [4]. We welcome any contribution without requiring a transfer of copyright. List of bugs fixed ================== 624 button click emit doesn't work 484 Error compiling QtContacts 1.1 (problems with const QList) 498 powerStateChanged-SIGNAL not emitted! 509 Can't use Shiboken when both Debug and Released are installed. 528 Connecting to SIGNAL positionUpdated fails 552 Segmentation fault when using QUiLoader and QTabWidget 553 A warning against using QUILoader is needed in the documentation 560 Lack of QtCore.Signal documentation 582 Python slots don't get called when they have a custom decorator 589 Crash related to QGraphicsProxyWidget and QVariant 592 shiboken.dll produces a segmentation fault when reloading a PySide module 608 Photoviewer example missing license boilerplates and shebang lines 609 Python site-packages path cannot be customized 610 QWidgetItemV2 not exposed to Python 626 Problem building PySide on OS X (qabstractfileengine_wrapper.cpp: No such file or directory) 406 Unable to send instant messages using QMessageService 458 Doesn't build with QtMobility 1.1.0~beta2 487 Support QContactDetailFieldDefinition.setAllowableTypes 497 Miising __lt__ operators in QtMobility::QGeoMapObject 499 QFeedbackHapticsInterface and QFeedbackFileInterface are broken 511 QPainter doesn't respect Qt.NoPen 522 example/threads/mandelbrot.py crashes on exit 523 QWidget.winId() returns PyCObject (expected unsigned long) 530 Importing division from future breaks QPoint division 531 sessionProperty "ConnectInBackground" does not work 539 MCC and MNC interchanged 541 QTableWidget.itemAt(row, col) always returns item at 0, 0. 550 Can't call PySide slot from QtScript when the args are a list of anything. 556 QGraphicsScene.addItem performs very poorly when the scene has >10000 items 562 pyside-uic does not generate some layers properties 568 List insertion time grows with list size 574 In docs of QUuid there's documentation for a function called "operator QString" 575 Strange behaviour of QTextEdit.ExtraSelection().cursor 584 python pickle module can't treat QByteArray object of PySide 591 QtCore.QRect has no attribute "getRect()" in Windows binary 611 enum values lack a tp_print implementation 614 FAil to register 2 objects in the same address 619 never automatically delete a QWidget that has no parent widget and is visible 620 QAbstractItemModel.createIndex(int,int,PyObject*) does not increment refcount 621 QGLWidget.bindTexture(QString) does not bind the texture correctly 622 PPA pyside is broken on Ubuntu 10.10 623 QGLWidget.bindTexture(QPixmap, GLenum, GLenum) is missing 625 QFileDialog return a tuple instead of a unicode 628 pyside-uic can't effect "headerVisible" attribute for QTreeView and QTreeWidget 232 [FTBFS] Fails to build on hurd-i386 (Test "lock" hangs for more than 191 minutes) 255 Test qtscripttools_debugger segfaults on ia64 298 Contact subtype not correctly set References ========== [1] http://developer.qt.nokia.com/wiki/PySideDownloads [2] http://qt.gitorious.org/pyside [3] http://bugs.openbossa.org/ [4] http://www.pyside.org/docs/pseps/psep-0001.html Thanks PySide team.
Friday, January 21, 2011
[PySide] Python for Qt version 1.0.0~beta4 "I have altered the deal" released
I can't see this post on planet.python.org and can't resist to share the good news about new PySide release.
Tuesday, January 18, 2011
Saturday, January 08, 2011
Injecting SVN bindings into Mercurial on Windows
If you need to add Subversion bindings for your Mercurial, which was installed using ordinary installer (and not TortoiseHg), then the following script can help to put all files in place.
https://bitbucket.org/techtonik/py2exe-relibzip/src/f15f8d032b5b/reinject.py
Unpack svn bindings, add all *.py files from svn/ and libsvn/ directories into the root of library.zip archive *with* these directories. Then call script with path to unpacked libsvn/. The script will generate some *.dll and *.py files in current directory. Put *.py into library.zip:/libsvn/ and *.dll into Mercurial installation directory. You may need to also copy libsvn_swig_py-1.dll into Mercurial dir.
The script can be tuned to insert C extensions to any py2exe distribution compiled with bundle_files=3
https://bitbucket.org/techtonik/py2exe-relibzip/src/f15f8d032b5b/reinject.py
Unpack svn bindings, add all *.py files from svn/ and libsvn/ directories into the root of library.zip archive *with* these directories. Then call script with path to unpacked libsvn/. The script will generate some *.dll and *.py files in current directory. Put *.py into library.zip:/libsvn/ and *.dll into Mercurial installation directory. You may need to also copy libsvn_swig_py-1.dll into Mercurial dir.
The script can be tuned to insert C extensions to any py2exe distribution compiled with bundle_files=3
Friday, December 10, 2010
Wednesday, November 10, 2010
Validating SSL server certificate with Python 2.x
SSL stands for Secure Sockets Layer and is designed to create secure connection between client and server. Secure means that connection is encrypted and therefore protected from eavesdropping. It also allows to validate site identity when connecting with HTTPS protocol.
However, there is a bug in ssl module from standard library of Python 2.x, that allows successful MITM attack using valid certificate from other site. Basically, module checks when connecting that server certificate is valid and correctly signed by root certificate, but it does not check that certificate actually belongs to the site, i.e. that site name matches the name specified in certificate.
It is still possible to validate server identity in Python 2.6 manually. Let's start with illustration of the vulnerability. The following snippet should fail - it replaces HOST "www.google.com" to connect to with its IP address. If you try to use this IP in Chrome like https://74.125.232.50 - it will show an error, but ssl library will not throw exception.
That's it. I put my findings to http://wiki.python.org/moin/SSL - you may want check it for updates.
However, there is a bug in ssl module from standard library of Python 2.x, that allows successful MITM attack using valid certificate from other site. Basically, module checks when connecting that server certificate is valid and correctly signed by root certificate, but it does not check that certificate actually belongs to the site, i.e. that site name matches the name specified in certificate.
It is still possible to validate server identity in Python 2.6 manually. Let's start with illustration of the vulnerability. The following snippet should fail - it replaces HOST "www.google.com" to connect to with its IP address. If you try to use this IP in Chrome like https://74.125.232.50 - it will show an error, but ssl library will not throw exception.
import socket
import ssl
HOST = "www.google.com"
PORT = 443
# replace HOST name with IP, this should fail connection attempt,
# but it doesn't in Python 2.x
HOST = socket.getaddrinfo(HOST, PORT)[0][4][0]
print(HOST)
# create socket and connect to server
# server address is specified later in connect() method
sock = socket.socket()
sock.connect((HOST, PORT))
# wrap socket to add SSL support
sock = ssl.wrap_socket(sock,
# flag that certificate from the other side of connection is
# required and should be validated when wrapping
cert_reqs=ssl.CERT_REQUIRED,
# file with root certificates
ca_certs="cacert.pem"
)
You will need cacert.pem file with root certificates. Just grab the latest version from http://curl.haxx.se/ca/cacert.pem This code above won't give you any error. Replace HOST value with https://www.debian-administration.org/ to check that certificate validation actually works. This site's certificate is not signed by any root certificates from "cacerts.txt", so you get an error.
To validate that a certificate matches requested site, you need to check commonName field in the subject of the certificate. This information can be accessed with getpeercert() method of wrapped socket.
import socket
import ssl
HOST = "www.google.com"
PORT = 443
# replace HOST name with IP, this should fail connection attempt
HOST = socket.getaddrinfo(HOST, PORT)[0][4][0]
print(HOST)
# create socket and connect to server
# server address is specified later in connect() method
sock = socket.socket()
sock.connect((HOST, PORT))
# wrap socket to add SSL support
sock = ssl.wrap_socket(sock,
# flag that certificate from the other side of connection is
# required and should be validated when wrapping
cert_reqs=ssl.CERT_REQUIRED,
# file with root certificates
ca_certs="cacerts.txt"
)
# manual check of hostname
cert = sock.getpeercert()
for field in cert['subject']:
if field[0][0] == 'commonName':
certhost = field[0][1]
if certhost != HOST:
raise ssl.SSLError(
"Host name '%s' doesn't match certificate host '%s'"
% (HOST, certhost))
That's it. I put my findings to http://wiki.python.org/moin/SSL - you may want check it for updates.
Wednesday, September 22, 2010
hgsubversion: Installing on Windows
- I use Windows primarily, and it's not easy to install Mercurial extensions there if they are not bundled with Mercurial installer itself. I am using plain .msi installer, which doesn't include hgsubversion, so I'll show you how to get this extension in place manually.
Suppose you have Mercurial installed into C:\Mercurial Go there and notice library.zip archive. This is where you should add hgsubversion. library.zip has the following structure:
/
+-- email
+-- encodings
+-- hgext
+-- logging
...
__future__.pyc
_abcoll.pyc
_elementtree.pyd
...
zipextimporter.pyc
zipfile.pyc
Contents of this archive is the whole Mercurial code. Code is written in Python, and is compiled into .pyc and .pyd files for speed and packed into library.zip for convenience. For interpreted languages like Python it is not necessary to compile source files for execution, but they did it.
Get latest hgsubversion sources from http://bitbucket.org/durin42/hgsubversion/src by pressing link "get source" in upper right corner. Or download released version from http://pypi.python.org/pypi/hgsubversion/1.1.2
Unpack archive. You should have directory structure like:
/
+-- hgsubversion
+-- notes
+-- tests
+-- tools
.hgignore
...
setup.py
Now put hgsubversion/ dir from this structure into library.zip archive, inside hgext/ directory, where Mercurial expects to find its extensions.
Enable extension by uncommenting line ";hgsubversion =" in Mercurial.ini that is usually located in your profile directory, i.e. C:\Users\yourname If it is not there - copy one from your C:\Mercurial\hgrc.d directory. Try to checkout some subversion repository. You will get an error like this:
C:\p>hg clone http://google-twitter.googlecode.com/svn/trunk
(falling back to static-http)
(falling back to Subversion support)
destination directory: trunk
abort: subvertpy 0.7.3 or later required, but not found!
You need Subversion bindings for Python. They advertise subvertpy, but it is also possible to use official bindings. Those bindings is just a set of libraries that allows Python scripts to use Subversion binary code directly. Unfortunately, after migration to apache.org, Subversion bindings are not compiled anymore, so there is no official place where you can download them. But thanks to http://alagazam.net/ it is possible to get unofficial .
Download svn-win32-1.6.12_py.zip or more up-to-date distribution and extract it. You will get a directory structure like:
/
+-- python
+-- libsvn
+-- svn
README.txt
In libsvn/ rename _client.dll to _client.pyd. Do the same with _core.dll, _delta.dll, _ra.dll
Maybe you'll have to rename other .dll files, but these were enough for me. Now put svn/ and libsvn/ into the library.zip directly in the root. I also had to copy intl3_svn.dll from an old 1.6.6 installation of SVN into library.zip root (you may find this file in Windows binaries archive from http://alagazam.net/) and place libsvn_swig_py-1.dll from libsvn/ dir also in library.zip root.
It should work now.
Sunday, June 06, 2010
Users read only first sentence
During the work on Python documentation somebody joked that users look only at first sentence. I would say that in the Age of Twitter it is a rule. So I should swap the first two sentences (and switch to microblogging).
Subscribe to:
Posts (Atom)
