From commits-noreply at bitbucket.org Wed Jul 1 15:42:37 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 01 Jul 2009 13:42:37 -0000 Subject: [py-svn] commit/py-trunk: 4 new changesets Message-ID: <20090701134237.14531.62935@domU-12-31-39-00-D4-C1.compute-1.internal> 4 new changesets in py-trunk: http://www.bitbucket.org/hpk42/py-trunk/changeset/5797d95d336f/ changeset: r1192:5797d95d336f user: hpk date: 2009-07-01 15:39:20 summary: merge 1.0.x changes affected #: 4 files (12 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/07e873ca2ff4/ changeset: r1189:07e873ca2ff4 user: hpk date: 2009-06-30 12:42:57 summary: trying to get together a working 1.0.0b7 without ez_setup.py affected #: 5 files (315 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/4ab2850ca3aa/ changeset: r1190:4ab2850ca3aa user: hpk date: 2009-07-01 15:24:19 summary: (radomir, holger) tweak doctest reporting for docstrings from python modules affected #: 1 file (607 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/b14421549530/ changeset: r1191:b14421549530 user: hpk date: 2009-07-01 15:37:00 summary: also aadd a changelog entry affected #: 1 file (130 bytes) Repository URL: http://bitbucket.org/hpk42/py-trunk/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Wed Jul 1 17:34:47 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 01 Jul 2009 15:34:47 -0000 Subject: [py-svn] commit/py-trunk: hpk: fixing setup.py in trunk Message-ID: <20090701153447.14531.12706@domU-12-31-39-00-D4-C1.compute-1.internal> 1 new changeset in py-trunk: http://www.bitbucket.org/hpk42/py-trunk/changeset/6e2eb2b6900f/ changeset: r1193:6e2eb2b6900f user: hpk date: 2009-07-01 17:34:21 summary: fixing setup.py in trunk affected #: 1 file (98 bytes) Repository URL: http://bitbucket.org/hpk42/py-trunk/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Jul 2 05:40:49 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 02 Jul 2009 03:40:49 -0000 Subject: [py-svn] commit/py-3k: yangyan5: tests of misc/ pass under python3.1 Message-ID: <20090702034049.14531.71849@domU-12-31-39-00-D4-C1.compute-1.internal> 1 new changeset in py-3k: http://www.bitbucket.org/yangyan5/py-3k/changeset/d05623daf7ef/ changeset: r1162:d05623daf7ef user: yangyan5 date: 2009-07-02 05:40:20 summary: tests of misc/ pass under python3.1 affected #: 21 files (4.1 KB) Repository URL: http://bitbucket.org/yangyan5/py-3k/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From py-svn at codespeak.net Thu Jul 2 19:24:32 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Thu, 2 Jul 2009 19:24:32 +0200 (CEST) Subject: [py-svn] Q&A Doctor Madelyn Message-ID: <20090702172432.1072316853F@codespeak.net> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Thu Jul 2 16:19:40 2009 From: py-svn at codespeak.net (Arnita Ufeikyx) Date: Thu, 2 Jul 2009 16:19:40 +0200 Subject: [py-svn] Let's bowl! Message-ID: <5772DPB.29347D28E8.31912397227617LUIPEMSXPRAUTZO660@dsl-emcali-190.99.197.205.emcali.net.co> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Sat Jul 4 18:53:39 2009 From: py-svn at codespeak.net (Jackelyn Miki) Date: Sat, 4 Jul 2009 18:53:39 +05-30 Subject: [py-svn] Good place for relaxation Message-ID: <6816GHI.668679E.21591117160526EXJXUQZEVHAZWLB7055@ABTS-North-Dynamic-176.78.173.122.airtelbroadband.in> An HTML attachment was scrubbed... URL: From hpk at codespeak.net Sat Jul 4 15:44:07 2009 From: hpk at codespeak.net (hpk at codespeak.net) Date: Sat, 4 Jul 2009 15:44:07 +0200 (CEST) Subject: [py-svn] r66117 - in py/extradoc/talk/ep2009: execnet pytest rapid-testing rapid-testing/ui Message-ID: <20090704134407.9BCC516845E@codespeak.net> Author: hpk Date: Sat Jul 4 15:44:04 2009 New Revision: 66117 Added: py/extradoc/talk/ep2009/pytest/ Removed: py/extradoc/talk/ep2009/rapid-testing/ui/ Modified: py/extradoc/talk/ep2009/execnet/execnet.txt py/extradoc/talk/ep2009/execnet/model1.graffle py/extradoc/talk/ep2009/execnet/model1.png py/extradoc/talk/ep2009/rapid-testing/rapid-testing.txt py/extradoc/talk/ep2009/rapid-testing/test_cached_setup.py py/extradoc/talk/ep2009/rapid-testing/test_generate_tests.py Log: snapshot talk and tutorial material Modified: py/extradoc/talk/ep2009/execnet/execnet.txt ============================================================================== --- py/extradoc/talk/ep2009/execnet/execnet.txt (original) +++ py/extradoc/talk/ep2009/execnet/execnet.txt Sat Jul 4 15:44:04 2009 @@ -1,29 +1,19 @@ -.. .. include:: beamerdefs.txt -.. .. include:: +.. include:: beamerdefs.txt +.. include:: ================================================================= Distributed Programming with py.execnet ================================================================= -my technical background -=========================== - -- programming since 20 years -- Python since around 2000 -- released projects: pypy, py.test/py lib, rlcompleter2 -- other: mailwitness, shpy, vadm, codespeak, ... -- merlinux GmbH since 2004 -- PyPy EU-project 2004-2007 - my distributed systems background ============================================= +- programming since 20 years, Python since around 2000 - Adaptive Communication Environment (ACE) -- Corba ORB TAO -- Corba Transaction Service (XOTS) -- automated system maintenance (service hosting) +- Corba ORB TAO, C++ Corba Transaction Service (XOTS) +- automated remote system maintenance - py.test distribution of tests -- consultancies on distributed systems +- consultancies on RMI / distributed (C++/Java) systems This talk @@ -31,63 +21,110 @@ * intro to py.execnet, examples, demos -* comparison with multiprocessing and RMI +* some comparison notes (multiprocessing / RMI systems) -* discussion about challenges / promises of - execnet-style deployment models +* summary / future bits -Intro to py.execnet -============================ - -execnet does: - -1. instantiating remote Python processes -2. sending code for remote execution -3. send/receive of data between remote and local code -4. (closing down remote process) - The basic model / terminology =============================== .. image:: model1.png - :scale: 100 + :scale: 80 :align: center -Interactive Example + +What **execnet** does ============================ +1. instantiate remote Python process +2. send code for remote execution +3. send/receive of data between remote and local code + + +elastic code: gateway's remote_exec +====================================== + :: >>> gw = py.execnet.PopenGateway() >>> src = "import os ; channel.send(os.getpid())" >>> channel = gw.remote_exec(src) >>> remote_pid = channel.getpid() + +What about remote failures? +============================ +``channel.RemoteError`` textually +represents remote traceback -gateway's remote_exec -================================== + +Channel send/receive +======================================== -:: +* channels have symmetric send/receive +* data items are Python primitive types (dict, int, string, ...) - def remote_exec(source): - """return channel object for communicating with the - asynchronously executing 'source' code which will - have a corresponding 'channel' object in its - executing namespace.""" -Channel objects, send() and receive() +Gateways ======================================== -symmetric send/receive, example:: +* gateways are represented on both sides +* each gateway object spawns a receiver thread +* but execution is single-threaded by default + + + + +Gateway / process instantiation +======================================= + +currently three gateway types: - >>> src = "channel.send(channel.receive() + 1 )" - >>> ch = gw.remote_exec(src) - >>> ch.send(41) - >>> result = ch.receive() +* PopenGateway opens a local Subprocess + +* SshGateway opens a ssh-mediated remote subprocess + +* SocketGateway opens a socket-mediated remote subprocess + +Gateways work **across Python versions**, for example: +a Python-2.4 process can connect with a Python-2.6 subprocess + + +SshGateway zero-install deployment +======================================= + +- uses underlying "ssh" command line tool +- only requires plain Python Interpreter +- no prior installation of remote code +- sends code *elastically* + +example: getting remote machine info +======================================== + +- single-file script to gather info from remote host + +example: svn-hotsyncing repositories +======================================== + +- single-file script to hot-sync svn repository + +"elastic code" +=============================== + +.. image:: model2.png + :scale: 60 + :align: center + +Some helpful "on-top" API +============================================= + +.. image:: img/end_of_a_age_by_marikaz.jpg + :scale: 100 + :align: left + +http://marikaz.deviantart.com/ CC 3.0 AN-ND -**channels work with builtin basic python data structures**: -dictionaries, lists, tuples, numbers, floats, ... Channel objects, waitclose() ===================================== @@ -100,10 +137,11 @@ f.write(content) f.close() """) # channel.close() is called automatically - >>> ch.send(("hello.txt", "world") + >>> ch.send("hello.txt", "world") >>> ch.waitclose() -sync-receive data from sub processes + +receive data from multiple sub processes ============================================= Use MultiChannels for receiving multiple results from remote code:: @@ -132,6 +170,7 @@ >>> res1 + res2 3 + remote_exec is single threaded by default ======================================================== @@ -140,7 +179,7 @@ ch1 = gw.remote_exec("channel.send(channel.receive()+1)") ch2 = gw.remote_exec("channel.send(channel.receive()+1)") ch2.send(1) - ch2.receive() # XXX BLOCKS of single remote thread ! + ch2.receive() # XXX BLOCKS XXX concurrent remote execution @@ -159,57 +198,10 @@ [quick look into remote_init_threads implementation] -Gateway / process instantiation -======================================= - -currently three gateway types: - -* PopenGateway opens a local Subprocess - -* SshGateway opens a ssh-mediated remote subprocess - -* SocketGateway opens a socket-mediated remote subprocess - -Gateways can cross Python versions, for example: -a Python-2.4 process can connect with a Python-2.6 subprocess - - -SshGateway -======================================= - -- uses underlying "ssh" command line tool - -- configurable: identity, ssh_config file, - remote python interpreter - -- **zero-install ad-hoc deployment**: - - 1. instantiate (remote) python interpreter process - 2. send dispatcher bootstrap code - 3. dispatcher waits for remote_exec commands, - manages channel communication - -SocketGateway -======================================= - -- uses standard socket connections -- needs a simple socket listen/accept/read loop on the remote side - -- **zero-install deployment**: - -1. **establish connection to existing remote-python interpreter process** -2. send it bootstrap code that installs a gateway dispatcher -3. dispatcher executes remote_exec commands, manages channel communication - - XSpecs and py.execnet.makegateway() =============================================== -1.0 introduces a string-scheme for specifying gateways:: - - key1[=value1]//key2[=value2]//... - -Examples:: +1.0 introduces a "XSpec" string-scheme for specifying gateways:: popen//python=2.5//nice=20 socket=192.168.1.4:8888 @@ -219,106 +211,80 @@ >>> gateway = py.execnet.makegateway(xspec) -e.g. used by ``py.test --tx ssh=remote_host``. - -zero-install / rsyncing dependencies +rsyncing dependencies ======================================= -**zero-install** means: no prior remote installation of code - -use ``py.execnet.RSync`` to transfer dependencies:: +use ``py.execnet.RSync`` to transfer packages:: >>> rsyncer = py.execnet.RSync("sourcedir") >>> gw = py.execnet.SshGateway("codespeak.net") >>> rsyncer.addtarget(gw) + >>> # add multiple targets >>> rsyncer.send() -detecting if we are run through remote_exec -============================================= +example: py.test distributed testing +========================================== :: - if __name__ == '__channelexec__': - # we will also have a 'channel' object - - -real life: system admin examples -=================================== - -- getting resource information from multiple remote linux machines - -- hot-syncing an SVN repository - -- py.test test-distribution - -- (other scripting) - -(demo + source code looking) - - -Execnet Summary -=============================== + py.test --dist=each \ + --tx ssh=wyvern \ + --tx ssh=code \ + --rsync mypkg -* ad-hoc instantiate remote Python processes, represent as ``Gateway`` - -* send and execute code remotely via ``gateway.remote_exec()`` - -* communication through symmetric ``channel.receive()/channel.send()`` - --> easy deployment and communication model - -multiprocessing +multiprocessing (Python 2.6) ============================================ -- part of standard lib since CPython 2.6 -- tries to make thread/process distintinction transparent -- needs **pickling** to work for resources to send/receive -- recommends to use Pipes (one-to-one) and Queues (many-to-many) for communication -- (also recommends to keep shared state minimal) - -XXX -multiprocessing and ssh -============================== - +- aims for transparent thread/process distintinction +- requires **pickling** to work for your app +- Pipes for one-to-one and Queues for many-to-many commnunication - requires compatible "multiprocessing" package on the "remote" side -- requires to-be-executed code to pre-exist/be importable on other side -- multiprocessing.distributing helps with dispatching/managing cluster tasks +- requires to-be-executed code to **pre-exist** - Python version agnostic? there are backported multiprocessing packages -XXX +Remote Method Invocation +============================== +- use object identity models +- static code distribution and static server code +- usually works with pickling +- pre-existing code on both sides -Pyro / RMI -=========== - +the "pre-existing" code requirement ... +========================================= +- version-dependencies +- manual installation +- difficult to extend to "arbitrary" hosts +- difficult to automate tests +- **not developer friendly** -Data protocol -===================== -chat/text based protocols +Execnet Summary +=============================== -examples: SMTP, HTTP, DNS, ... +* ad-hoc instantiate remote Python processes -**allows many implementation (languages)** +* send and execute code **elastically** -Data format -=================== +* zero-install - code is determined client-side -open or reverse engeneered specifications +* communicate through symmetric channels -pdf, xml, html, ODS, doc, ... +* works across host and Python interpreter barriers -**allows many implementation (languages)** -**agnostic to transport mechanism** +Open issues +============= -Remote method invocation -============================== +* improved debugging / tested teardown mechanisms +* channels/gateways to cross multiple hosts +* best practise model for sharing data +* **user contributed VMs for elastic execution** +holger @ merlinux.eu - Modified: py/extradoc/talk/ep2009/execnet/model1.graffle ============================================================================== --- py/extradoc/talk/ep2009/execnet/model1.graffle (original) +++ py/extradoc/talk/ep2009/execnet/model1.graffle Sat Jul 4 15:44:04 2009 @@ -35,21 +35,75 @@ GraphicsList + Bounds + {{337.674, 92.716}, {119, 17}} + Class + ShapedGraphic + FitText + YES + FontInfo + + Font + Helvetica + Size + 12 + + ID + 57 + Line + + ID + 55 + Position + 0.72225594520568848 + RotationType + 0 + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf480 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs28 \cf0 Python Execution} + + + Class LineGraphic Head ID - 46 - Info - 2 + 42 ID 55 Points - {302.863, 112.386} - {394.37, 162.425} + {399.331, 70.8661} + {396.345, 112.887} Style @@ -66,7 +120,7 @@ Tail ID - 51 + 41 @@ -83,8 +137,8 @@ 54 Points - {255.688, 112.386} - {158.386, 162.425} + {153.425, 113.886} + {153.425, 170.079} Style @@ -101,7 +155,7 @@ Tail ID - 51 + 44 @@ -118,9 +172,9 @@ 49 Points - {189.213, 180.425} + {184.252, 188.079} {283.465, 170.079} - {363.543, 180.425} + {354.331, 202.252} Style @@ -144,7 +198,7 @@ Bounds - {{363.543, 162.425}, {61.6536, 36}} + {{354.331, 184.252}, {61.6536, 36}} Class ShapedGraphic ID @@ -171,7 +225,7 @@ Bounds - {{127.559, 162.425}, {61.6535, 36}} + {{122.598, 170.079}, {61.6535, 36}} Class ShapedGraphic ID @@ -211,7 +265,7 @@ Points {198.425, 95.3858} - {363.543, 95.3858} + {354.331, 52.8661} Style @@ -237,7 +291,7 @@ Bounds - {{363.543, 77.3858}, {90, 36}} + {{354.331, 34.8661}, {90, 36}} Class ShapedGraphic ID @@ -264,7 +318,7 @@ Bounds - {{354.331, 56.6929}, {99.2126, 184.252}} + {{340.158, 113.386}, {99.2126, 184.252}} Class ShapedGraphic ID @@ -319,7 +373,7 @@ Bounds - {{256.237, 136.108}, {61, 68}} + {{251.754, 135.988}, {61, 68}} Class ShapedGraphic FitText @@ -378,7 +432,7 @@ Bounds - {{226, 78.3858}, {108, 34}} + {{217.781, 56.6069}, {121, 34}} Class ShapedGraphic FitText @@ -402,7 +456,7 @@ ID 39 Position - 0.49403908848762512 + 0.51220786571502686 RotationType 0 @@ -429,7 +483,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural -\f0\fs28 \cf0 remote-execute\ +\f0\fs28 \cf0 send and execute\ code} @@ -551,7 +605,7 @@ ModificationDate - 2009-06-26 12:50:42 +0200 + 2009-07-02 07:15:11 +0200 Modifier holger krekel NotesVisible @@ -626,9 +680,9 @@ DrawerWidth 209 Frame - {{1499, 82}, {574, 742}} + {{412, 168}, {574, 578}} VisibleRegion - {{0, 0}, {559, 628}} + {{0, 0}, {559, 464}} Zoom 1 Modified: py/extradoc/talk/ep2009/execnet/model1.png ============================================================================== Binary files. No diff available. Modified: py/extradoc/talk/ep2009/rapid-testing/rapid-testing.txt ============================================================================== --- py/extradoc/talk/ep2009/rapid-testing/rapid-testing.txt (original) +++ py/extradoc/talk/ep2009/rapid-testing/rapid-testing.txt Sat Jul 4 15:44:04 2009 @@ -5,6 +5,16 @@ Rapid testing with py.test ================================================================= +these slides +=========================== + +http://codespeak.net/~hpk/rapid-testing.pdf + +http://tinyurl.com/rapid-testing + +install: ``easy_install -U py`` + +latest version: 1.0.0b6 today :-) my testing background =========================== Modified: py/extradoc/talk/ep2009/rapid-testing/test_cached_setup.py ============================================================================== --- py/extradoc/talk/ep2009/rapid-testing/test_cached_setup.py (original) +++ py/extradoc/talk/ep2009/rapid-testing/test_cached_setup.py Sat Jul 4 15:44:04 2009 @@ -10,7 +10,7 @@ return request.cached_setup( setup=Myarg, teardown=lambda arg: arg.finalize(), - scope="function", + scope="module", ) def test_hello(myarg): Modified: py/extradoc/talk/ep2009/rapid-testing/test_generate_tests.py ============================================================================== --- py/extradoc/talk/ep2009/rapid-testing/test_generate_tests.py (original) +++ py/extradoc/talk/ep2009/rapid-testing/test_generate_tests.py Sat Jul 4 15:44:04 2009 @@ -1,12 +1,11 @@ -def pytest_generate_tests(metafunc): - if "url" in metafunc.funcargnames: - for val in ('testrun.org', 'codespeak.net'): - metafunc.addcall(id=val, funcargs={'url': 'http://' + val}) +def test_function(param): + assert param < 3 +def pytest_generate_tests(metafunc): + if "param" not in metafunc.funcargnames: + return + for i in range(4): + funcargs = {'param': i} + metafunc.addcall(funcargs=funcargs) -import urllib -def test_open(url): - f = urllib.urlopen(url) - assert f - f.close() From py-svn at codespeak.net Sun Jul 5 04:03:59 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Sun, 5 Jul 2009 04:03:59 +0200 (CEST) Subject: [py-svn] Pre-register info #044371 Message-ID: <20090705020359.BFCDB168473@codespeak.net> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Tue Jul 7 03:42:40 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Tue, 7 Jul 2009 03:42:40 +0200 (CEST) Subject: [py-svn] Last time... Message-ID: <20090707014240.4A9B2169E24@codespeak.net> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Wed Jul 8 00:16:49 2009 From: py-svn at codespeak.net (Juliann Yusjmqmy) Date: Wed, 8 Jul 2009 01:16:49 +0300 Subject: [py-svn] I will need it back Message-ID: <6014IQ.20047EC.0047487143KESRXYEAXLTDMTE3976@dsl78.160-21408.ttnet.net.tr> An HTML attachment was scrubbed... URL: From commits-noreply at bitbucket.org Wed Jul 8 14:03:25 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 08 Jul 2009 12:03:25 -0000 Subject: [py-svn] commit/py-trunk: 4 new changesets Message-ID: <20090708120325.14531.19214@domU-12-31-39-00-D4-C1.compute-1.internal> 4 new changesets in py-trunk: http://www.bitbucket.org/hpk42/py-trunk/changeset/7c56eb1f1a71/ changeset: r1194:7c56eb1f1a71 user: hpk date: 2009-07-04 16:14:14 summary: extending and fixing docs about - test config, funcargs - talks and tutorials affected #: 6 files (1.7 KB) http://www.bitbucket.org/hpk42/py-trunk/changeset/6ce923731c6b/ changeset: r1195:6ce923731c6b user: hpk date: 2009-07-05 14:22:01 summary: * refined funcarg docs and CHANGELOG * fixed funcarg setup and error-raising issue affected #: 5 files (1.3 KB) http://www.bitbucket.org/hpk42/py-trunk/changeset/43f6ef693151/ changeset: r1196:43f6ef693151 user: hpk date: 2009-07-08 14:02:21 summary: adding example scripts from tutorial affected #: 2 files (7.3 KB) http://www.bitbucket.org/hpk42/py-trunk/changeset/ed685ec5096d/ changeset: r1197:ed685ec5096d user: hpk date: 2009-07-08 14:03:00 summary: merging 1.0.x branch affected #: 0 files (0 bytes) Repository URL: http://bitbucket.org/hpk42/py-trunk/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Wed Jul 8 20:09:35 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 08 Jul 2009 18:09:35 -0000 Subject: [py-svn] commit/py-trunk: 7 new changesets Message-ID: <20090708180935.14531.60122@domU-12-31-39-00-D4-C1.compute-1.internal> 7 new changesets in py-trunk: http://www.bitbucket.org/hpk42/py-trunk/changeset/99b91049d087/ changeset: r1198:99b91049d087 user: hpk date: 2009-06-26 17:48:46 summary: doc refinements introduce '__channelexec__' + docs affected #: 6 files (1018 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/99c73dfbe27c/ changeset: r1199:99c73dfbe27c user: hpk date: 2009-06-26 18:12:06 summary: improve docs some further, cleaner release announcement affected #: 2 files (462 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/97ebca99df00/ changeset: r1200:97ebca99df00 user: hpk date: 2009-07-08 16:41:30 summary: * refix handling of partial setup failures * shuffle / consolidate related tests * re-gen setup.py affected #: 11 files (5.5 KB) http://www.bitbucket.org/hpk42/py-trunk/changeset/d5b0261eeea7/ changeset: r1201:d5b0261eeea7 user: hpk date: 2009-07-08 16:44:40 summary: merging some old changes (still struggling with mercurial a bit) affected #: 4 files (809 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/5470cd99f4b4/ changeset: r1202:5470cd99f4b4 user: hpk date: 2009-07-08 19:18:26 summary: * streamlining plugin docstrings * better organisation of example directory, also does not break whole-test run anymore affected #: 26 files (6.5 KB) http://www.bitbucket.org/hpk42/py-trunk/changeset/f093e1009f6d/ changeset: r1203:f093e1009f6d user: hpk date: 2009-07-08 19:57:45 summary: fix figleaf plugin import affected #: 1 file (2 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/b4392397f183/ changeset: r1204:b4392397f183 user: hpk date: 2009-07-08 20:08:07 summary: merging 1.0.x changes affected #: 7 files (106 bytes) Repository URL: http://bitbucket.org/hpk42/py-trunk/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Jul 9 06:39:56 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 09 Jul 2009 04:39:56 -0000 Subject: [py-svn] commit/py-3k: yangyan5: tests of code/ pass under python3.1 Message-ID: <20090709043956.14531.5447@domU-12-31-39-00-D4-C1.compute-1.internal> 1 new changeset in py-3k: http://www.bitbucket.org/yangyan5/py-3k/changeset/ec9d984e4f9e/ changeset: r1163:ec9d984e4f9e user: yangyan5 date: 2009-07-09 06:39:37 summary: tests of code/ pass under python3.1 affected #: 10 files (592 bytes) Repository URL: http://bitbucket.org/yangyan5/py-3k/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Jul 9 13:18:01 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 09 Jul 2009 11:18:01 -0000 Subject: [py-svn] commit/py-trunk: 3 new changesets Message-ID: <20090709111801.14531.6299@domU-12-31-39-00-D4-C1.compute-1.internal> 3 new changesets in py-trunk: http://www.bitbucket.org/hpk42/py-trunk/changeset/f04b11d51e64/ changeset: r1205:f04b11d51e64 user: hpk date: 2009-07-09 13:12:00 summary: fix logging interaction issue affected #: 3 files (807 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/f68ab7146f21/ changeset: r1206:f68ab7146f21 user: hpk date: 2009-07-09 13:13:31 summary: fix test affected #: 1 file (83 bytes) http://www.bitbucket.org/hpk42/py-trunk/changeset/85ccddd0633f/ changeset: r1207:85ccddd0633f user: hpk date: 2009-07-09 13:16:37 summary: merge trunk changes affected #: 2 files (0 bytes) Repository URL: http://bitbucket.org/hpk42/py-trunk/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From py-svn at codespeak.net Fri Jul 10 13:36:08 2009 From: py-svn at codespeak.net (Pfizer Inc.) Date: Fri, 10 Jul 2009 13:36:08 +0200 (CEST) Subject: [py-svn] BestBuy.com Deal of the Day Message-ID: <20090710113608.025021684B8@codespeak.net> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Sat Jul 11 20:11:33 2009 From: py-svn at codespeak.net (Mackenzie Usovqi) Date: Sat, 11 Jul 2009 19:11:33 +0100 Subject: [py-svn] Print and sign, please Message-ID: <6654UCK.137072FB48.08403214556694UVEPFEBQOXSWMIP74@host86-166-208-205.range86-166.btcentralplus.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Sun Jul 12 01:14:10 2009 From: py-svn at codespeak.net (Lavonda Mjka) Date: Sat, 11 Jul 2009 11:14:10 -1200 Subject: [py-svn] Teenage sex models arrested Message-ID: <6914ST.65439DEB.73320512120ARRCJWNRTCOCTUK93@189-46-221-43.dsl.telesp.net.br> An HTML attachment was scrubbed... URL: From commits-noreply at bitbucket.org Tue Jul 14 21:37:59 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Jul 2009 19:37:59 +0000 (UTC) Subject: [py-svn] py-trunk commit 26abe92b6acf: adding a new execnet example Message-ID: <20090714193759.C0F4C12069@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview/ # User holger krekel # Date 1247226273 -7200 # Node ID 26abe92b6acf50222c8fcf0a2ed32c7c0655297d # Parent 85ccddd0633f9583758e15a7daeaad34473313cd adding a new execnet example --- /dev/null +++ b/example/execnet/redirect_remote_output.py @@ -0,0 +1,31 @@ +""" +redirect output from remote to a local function +showcasing features of the channel object: + +- sending a channel over a channel +- adapting a channel to a file object +- setting a callback for receiving channel data + +""" + +import py + +gw = py.execnet.PopenGateway() + +outchan = gw.remote_exec(""" + import sys + outchan = channel.gateway.newchannel() + sys.stdout = outchan.makefile("w") + channel.send(outchan) +""").receive() + +# note: callbacks execute in receiver thread! +def write(data): + print "received:", repr(data) +outchan.setcallback(write) + +gw.remote_exec(""" + print 'hello world' + print 'remote execution ends' +""").waitclose() + --- a/MANIFEST +++ b/MANIFEST @@ -37,6 +37,7 @@ example/assertion/failure_demo.py example/assertion/test_failures.py example/assertion/test_setup_flow_example.py example/execnet/popen_read_multiple.py +example/execnet/redirect_remote_output.py example/execnet/svn-sync-repo.py example/execnet/sysinfo.py example/funcarg/conftest.py From commits-noreply at bitbucket.org Tue Jul 14 21:37:59 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Jul 2009 19:37:59 +0000 (UTC) Subject: [py-svn] py-trunk commit 161e708e735b: trying to tweak setup and py version attributes to not cause merging conflicts Message-ID: <20090714193759.E6FA412094@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview/ # User holger krekel # Date 1247600211 -7200 # Node ID 161e708e735bce89ced6a3c23fbd3cdbaa679682 # Parent d4ab76fdae51077b081e2d30e05df3e18904c94b trying to tweak setup and py version attributes to not cause merging conflicts --- a/setup.py +++ b/setup.py @@ -25,12 +25,13 @@ For questions please check out http://py """ +trunk = None def main(): setup( name='py', description='py.test and pylib: advanced testing tool and networking lib', long_description = long_description, - version='1.0.0b8', + version= trunk or '1.0.0b8', url='http://pylib.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], --- a/py/__init__.py +++ b/py/__init__.py @@ -18,8 +18,9 @@ For questions please check out http://py """ from initpkg import initpkg +trunk = None -version = "1.0.0b8" +version = trunk or "1.0.0b8" initpkg(__name__, description = "py.test and pylib: advanced testing tool and networking lib", From commits-noreply at bitbucket.org Tue Jul 14 21:37:59 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Jul 2009 19:37:59 +0000 (UTC) Subject: [py-svn] py-trunk commit 9a06161624a2: merge 1.0.x changes Message-ID: <20090714193759.EE43512095@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview/ # User holger krekel # Date 1247600274 -7200 # Node ID 9a06161624a299e7d6787bc671c53f0f2969d1af # Parent f68ab7146f210c138d5e0b318b03afe754d25239 # Parent 161e708e735bce89ced6a3c23fbd3cdbaa679682 merge 1.0.x changes From commits-noreply at bitbucket.org Tue Jul 14 21:37:59 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Jul 2009 19:37:59 +0000 (UTC) Subject: [py-svn] py-trunk commit 65f510ded494: * add a script for generating plugin docs Message-ID: <20090714193759.D451312091@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview/ # User holger krekel # Date 1247599033 -7200 # Node ID 65f510ded494e2ef46ea9c062f4295a3c4e92e87 # Parent 26abe92b6acf50222c8fcf0a2ed32c7c0655297d * add a script for generating plugin docs * improve generation of docs * refine plugins docs --- a/py/test/plugin/pytest_resultlog.py +++ b/py/test/plugin/pytest_resultlog.py @@ -6,7 +6,7 @@ import py def pytest_addoption(parser): group = parser.addgroup("resultlog", "resultlog plugin options") - group.addoption('--resultlog', action="store", dest="resultlog", metavar="path", + group.addoption('--resultlog', action="store", dest="resultlog", metavar="path", default=None, help="path for machine-readable result log.") def pytest_configure(config): --- a/py/test/plugin/hookspec.py +++ b/py/test/plugin/hookspec.py @@ -1,10 +1,11 @@ """ -py.test hooks / extension points +py.test plugin hooks """ -# ------------------------------------------------------------------------------ -# Command line and configuration hooks -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- +# Command line and configuration +# ------------------------------------------------------------------------- + def pytest_addoption(parser): """ called before commandline parsing. """ @@ -17,26 +18,12 @@ def pytest_configure(config): def pytest_namespace(config): """ return dict of name->object to become available at py.test.*""" - def pytest_unconfigure(config): """ called before test process is exited. """ -# ------------------------------------------------------------------------------ -# test Session related hooks -# ------------------------------------------------------------------------------ - -def pytest_sessionstart(session): - """ before session.main() is called. """ - -def pytest_sessionfinish(session, exitstatus, excrepr=None): - """ whole test run finishes. """ - -def pytest_deselected(items): - """ repeatedly called for test items deselected by keyword. """ - -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- # collection hooks -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- def pytest_collect_directory(path, parent): """ return Collection node or None for the given path. """ @@ -50,6 +37,9 @@ def pytest_collectstart(collector): def pytest_collectreport(rep): """ collector finished collecting. """ +def pytest_deselected(items): + """ called for test items deselected by keyword. """ + def pytest_make_collect_report(collector): """ perform a collection and return a collection. """ pytest_make_collect_report.firstresult = True @@ -58,9 +48,9 @@ pytest_make_collect_report.firstresult = def pytest_itemstart(item, node=None): """ test item gets collected. """ -# ------------------------------------------------------------------------------ -# Python test function related hooks -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- +# Python test function related hooks +# ------------------------------------------------------------------------- def pytest_pycollect_makeitem(collector, name, obj): """ return custom item/collector for a python object in a module, or None. """ @@ -73,9 +63,14 @@ pytest_pyfunc_call.firstresult = True def pytest_generate_tests(metafunc): """ generate (multiple) parametrized calls to a test function.""" -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- # generic runtest related hooks -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- + +def pytest_runtest_protocol(item): + """ implement fixture, run and report protocol. """ +pytest_runtest_protocol.firstresult = True + def pytest_runtest_setup(item): """ called before pytest_runtest_call(). """ @@ -85,10 +80,6 @@ def pytest_runtest_call(item): def pytest_runtest_teardown(item): """ called after pytest_runtest_call(). """ -def pytest_runtest_protocol(item): - """ run given test item and return test report. """ -pytest_runtest_protocol.firstresult = True - def pytest_runtest_makereport(item, call): """ make ItemTestReport for the given item and call outcome. """ pytest_runtest_makereport.firstresult = True @@ -96,9 +87,20 @@ pytest_runtest_makereport.firstresult = def pytest_runtest_logreport(rep): """ process item test report. """ -# ------------------------------------------------------------------------------ -# generic reporting hooks (invoked from pytest_terminal.py) -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- +# test session related hooks +# ------------------------------------------------------------------------- + +def pytest_sessionstart(session): + """ before session.main() is called. """ + +def pytest_sessionfinish(session, exitstatus, excrepr=None): + """ whole test run finishes. """ + +# ------------------------------------------------------------------------- +# generic reporting hooks (invoked from pytest_terminal) +# ------------------------------------------------------------------------- + def pytest_report_teststatus(rep): """ return shortletter and verbose word. """ pytest_report_teststatus.firstresult = True @@ -112,33 +114,17 @@ def pytest_report_iteminfo(item): """ pytest_report_iteminfo.firstresult = True -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- # doctest hooks -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- + def pytest_doctest_prepare_content(content): """ return processed content for a given doctest""" pytest_doctest_prepare_content.firstresult = True - -# ------------------------------------------------------------------------------ -# misc hooks -# ------------------------------------------------------------------------------ - -def pytest_plugin_registered(plugin): - """ a new py lib plugin got registered. """ - -def pytest_plugin_unregistered(plugin): - """ a py lib plugin got unregistered. """ - -def pytest_internalerror(excrepr): - """ called for internal errors. """ - -def pytest_trace(category, msg): - """ called for debug info. """ - -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- # distributed testing -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------- def pytest_testnodeready(node): """ Test Node is ready to operate. """ @@ -152,3 +138,19 @@ def pytest_rescheduleitems(items): def pytest_looponfailinfo(failreports, rootdirs): """ info for repeating failing tests. """ + +# ------------------------------------------------------------------------- +# internal debugging hooks +# ------------------------------------------------------------------------- + +def pytest_plugin_registered(plugin): + """ a new py lib plugin got registered. """ + +def pytest_plugin_unregistered(plugin): + """ a py lib plugin got unregistered. """ + +def pytest_internalerror(excrepr): + """ called for internal errors. """ + +def pytest_trace(category, msg): + """ called for debug info. """ --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,7 @@ Changes between 1.0.0b7 and 1.0.0b8 ===================================== -* workaround a logging module interaction ("closing already closed +* workaround a buggy logging module interaction ("closing already closed files"). Thanks to Sridhar Ratnakumar for triggering. * if plugins use "py.test.importorskip" for importing @@ -12,7 +12,9 @@ Changes between 1.0.0b7 and 1.0.0b8 - refined funcargs doc , use the term "factory" instead of "provider" - added a new talk/tutorial doc page + - better download page - better plugin docstrings + - added new plugins page and automatic doc generation script * fixed teardown problem related to partially failing funcarg setups (thanks MrTopf for reporting), "pytest_runtest_teardown" is now --- a/doc/index.txt +++ b/doc/index.txt @@ -39,27 +39,3 @@ Minor support functionality .. _`py.xml`: xml.html .. _`miscellaneous features`: misc.html -Full Contents -=================================== - -.. toctree:: - :maxdepth: 2 - - test - execnet - path - code - bin - xml - io - log - misc - coding-style - contact - download - releases - - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` --- /dev/null +++ b/doc/test/plugins.txt @@ -0,0 +1,72 @@ + +===================================================== +Plugins related to Python test functions and programs +===================================================== +* `pytest_xfail`_ mark tests as expected-to-fail and report them separately. + +* `pytest_figleaf`_ write and report coverage data with 'figleaf'. + +* `pytest_monkeypatch`_ safely patch object attributes, dicts and environment variables. + +* `pytest_iocapture`_ 'capsys' and 'capfd' funcargs for capturing stdout/stderror. + +* `pytest_recwarn`_ helpers for asserting deprecation and other warnings. + + +============================================== +Plugins for other testing styles and languages +============================================== +* `pytest_unittest`_ automatically discover and run traditional "unittest.py" style tests. + +* `pytest_doctest`_ collect and execute doctests from modules and test files. + +* `pytest_restdoc`_ perform ReST syntax, local and remote reference tests on .rst/.txt files. + +* `pytest_oejskit`_ Testing Javascript in real browsers + + +================================================= +Plugins for generic reporting and failure logging +================================================= +* `pytest_pocoo`_ submit failure information to paste.pocoo.org + +* `pytest_resultlog`_ resultlog plugin for machine-readable logging of test results. + +* `pytest_terminal`_ terminal reporting of the full testing process. + + +===================================== +internal plugins / core functionality +===================================== +* `pytest_pdb`_ interactive debugging with the Python Debugger. + +* `pytest_keyword`_ py.test.mark / keyword plugin + +* `pytest_hooklog`_ log invocations of extension hooks to a file. + +* `pytest_runner`_ collect and run test items and create reports. + +* `pytest_execnetcleanup`_ cleanup execnet gateways during test function runs. + +* `pytest_pytester`_ funcargs and support code for testing py.test's own functionality. + + + +.. _`pytest_xfail`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_xfail.py +.. _`pytest_figleaf`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_figleaf.py +.. _`pytest_monkeypatch`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_monkeypatch.py +.. _`pytest_iocapture`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_iocapture.py +.. _`pytest_recwarn`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_recwarn.py +.. _`pytest_unittest`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_unittest.py +.. _`pytest_doctest`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_doctest.py +.. _`pytest_restdoc`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_restdoc.py +.. _`pytest_oejskit`: http://bitbucket.org/pedronis/js-infrastructure/src/tip/pytest_jstests.py +.. _`pytest_pocoo`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_pocoo.py +.. _`pytest_resultlog`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_resultlog.py +.. _`pytest_terminal`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_terminal.py +.. _`pytest_pdb`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_pdb.py +.. _`pytest_keyword`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_keyword.py +.. _`pytest_hooklog`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_hooklog.py +.. _`pytest_runner`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_runner.py +.. _`pytest_execnetcleanup`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_execnetcleanup.py +.. _`pytest_pytester`: http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/pytest_pytester.py --- /dev/null +++ b/makepluginlist.py @@ -0,0 +1,106 @@ + +import py +import sys +WIDTH = 75 + +plugins = [ + ('Plugins related to Python test functions and programs', + 'xfail figleaf monkeypatch iocapture recwarn',), + ('Plugins for other testing styles and languages', + 'unittest doctest restdoc osjskit'), + ('Plugins for generic reporting and failure logging', + 'pocoo resultlog terminal',), + ('internal plugins / core functionality', + 'pdb keyword hooklog runner execnetcleanup pytester', + ) +] + +externals = { + 'osjskit': ('`pytest_oejskit`_ Testing Javascript in real browsers', + ''' +jskit contains infrastructure and in particular a py.test plugin to enable running tests for JavaScript code inside browsers directly using py.test as the test driver. Running inside the browsers comes with some speed cost, on the other hand it means for example the code is tested against the real-word DOM implementations. + +The approach also enables to write integration tests such that the JavaScript code is tested against server-side Python code mocked as necessary. Any server-side framework that can already be exposed through WSGI (or for which a subset of WSGI can be written to accommodate the jskit own needs) can play along. + +jskit also contains code to help modularizing JavaScript code which can be used to describe and track dependencies dynamically during development and that can help resolving them statically when deploying/packaging. + +jskit depends on simplejson. It also uses MochiKit - of which it ships a version within itself for convenience - for its own working though in does not imposes its usage on tested code. + +jskit was initially developed by Open End AB and is released under the MIT license. +''', 'http://pypi.python.org/pypi/oejskit', +('pytest_oejskit', +'http://bitbucket.org/pedronis/js-infrastructure/src/tip/pytest_jstests.py', +))} + +class ExternalDoc: + def __init__(self, name): + self.title, self.longdesc, self.url, sourcelink = externals[name] + self.sourcelink = sourcelink + + + +class PluginDoc: + def __init__(self, plugin): + self.plugin = plugin + doc = plugin.__doc__.strip() + i = doc.find("\n") + if i == -1: + title = doc + longdesc = "XXX no long description available" + else: + title = doc[:i].strip() + longdesc = doc[i+1:].strip() + purename = plugin.__name__.split(".")[-1].strip() + self.title = "`%s`_ %s" %(purename, title) + self.longdesc = longdesc + self.sourcelink = (purename, + "http://bitbucket.org/hpk42/py-trunk/src/tip/py/test/plugin/" + + purename + ".py") + +def warn(msg): + print >>sys.stderr, "WARNING:", msg + + +def makedoc(name): + if name in externals: + return ExternalDoc(name) + config.pluginmanager.import_plugin(name) + plugin = config.pluginmanager.getplugin(name) + if plugin is None: + return None + return PluginDoc(plugin) + +def header(): + #print "=" * WIDTH + #print "list of available py.test plugins" + #print "=" * WIDTH + print + +if __name__ == "__main__": + config = py.test.config + config.parse([]) + config.pluginmanager.do_configure(config) + + header() + + links = [] + for cat, specs in plugins: + pluginlist = specs.split() + print len(cat) * "=" + print cat + print len(cat) * "=" + for name in pluginlist: + doc = makedoc(name) + if doc is None: + warn("skipping", name) + continue + print "* " + str(doc.title) + #print len(doc.title) * "*" + #print doc.longdesc + links.append(doc.sourcelink) + print + print + print + for link in links: + warn(repr(link)) + print ".. _`%s`: %s" % (link[0], link[1]) --- a/py/test/plugin/pytest_xfail.py +++ b/py/test/plugin/pytest_xfail.py @@ -1,7 +1,7 @@ """ mark tests as expected-to-fail and report them separately. -example: +example:: @py.test.mark.xfail def test_hello(): --- a/doc/test/test.txt +++ b/doc/test/test.txt @@ -11,6 +11,8 @@ quickstart_: for getting started immedia features_: a walk through basic features and usage. +`available plugins`_: list of py.test plugins + funcargs_: powerful parametrized test function setup `distributed testing`_: distribute test runs to other machines and platforms. @@ -21,6 +23,7 @@ config_: ``conftest.py`` files and the c talks_: talk and tutorial slides +.. _`available plugins`: plugins.html .. _talks: talks.html .. _quickstart: quickstart.html .. _features: features.html --- a/doc/test/features.txt +++ b/doc/test/features.txt @@ -292,7 +292,8 @@ To make it easier to distinguish the gen easy to extend ========================================= -Since 1.0 py.test has advanced `extension mechanisms`_. +Since 1.0 py.test has advanced `extension mechanisms`_ +and a growing `list of plugins`_. One can can easily modify or add aspects for for purposes such as: @@ -301,6 +302,7 @@ purposes such as: * running non-python tests * managing custom test state setup +.. _`list of plugins`: plugins.html .. _`extension mechanisms`: extend.html .. _`reStructured Text`: http://docutils.sourceforge.net --- a/doc/test/extend.txt +++ b/doc/test/extend.txt @@ -4,15 +4,18 @@ Extending and customizing py.test .. _`local plugin`: -py.test implements much of its functionality by calling `well specified -hooks`_. Python modules which contain such hook functions are called -plugins. Hook functions are discovered in ``conftest.py`` files or -in **named** plugins. ``conftest.py`` files are sometimes called "anonymous" -or conftest plugins. They are useful for keeping test extensions close -to the application package. Named plugins are normal python modules or packages -that can be distributed separately. Named plugins need to follow a naming pattern; -they have an all lowercase ``pytest_`` prefixed name. While conftest plugins are -discovered automatically, named plugins must be explicitely specified. +py.test implements much of its functionality by calling `well specified +hooks`_. Python modules which contain such hook functions are called +plugins. Hook functions are discovered in ``conftest.py`` files or in +`named plugins`_. ``conftest.py`` files are sometimes called +"anonymous" or conftest plugins. They are useful for keeping test +extensions close to your application. Named plugins are normal python +modules or packages that can be distributed separately. Named plugins +need to follow a naming pattern; they have an all lowercase ``pytest_`` +prefixed name. While conftest plugins are discovered automatically, +named plugins must be explicitely specified. + +.. _`named plugins`: plugins.html .. _`tool startup`: .. _`test tool starts up`: --- a/py/test/plugin/pytest_figleaf.py +++ b/py/test/plugin/pytest_figleaf.py @@ -1,5 +1,9 @@ """ -write and report coverage data using the 'figleaf' module. +write and report coverage data with 'figleaf'. + +This plugin generates test coverage data or HTML files +from running tests against a code base. + """ import py --- a/doc/download.txt +++ b/doc/download.txt @@ -6,12 +6,11 @@ Downloading Latest Release, see `PyPI project page`_ -"easy_install py" +using setuptools / easy_install =================================================== With a working `setuptools installation`_ you can type:: - easy_install -U py to get the latest release of the py lib. The ``-U`` switch @@ -26,21 +25,77 @@ install the full py lib. If you don't h you can still install the py lib but without greenlets - look below for the ``install_lib`` target. -**IMPORTANT NOTE**: if you are using Windows and have previous -installations of the py lib on your system, please download +**IMPORTANT NOTE**: if you are using Windows and have +0.8 versions of the py lib on your system, please download and execute http://codespeak.net/svn/py/build/winpathclean.py This will check that no previous files are getting in the way. -(Unfortunately we don't know about a way to execute this -code automatically during the above install). +You can find out the py lib version with:: -Installing on Debian or Fedora + import py + print py.version + + +.. _`checkout`: + +Installing from version control / develop mode +================================================= + +To follow development or help with fixing things +for the next release, checkout the complete code +and documentation source with mercurial_:: + + hg clone https://bitbucket.org/hpk42/py-trunk/ + +With a working `setuptools installation`_ you can then issue:: + + python setup.py develop + +in order to work with your checkout version. + +.. _mercurial: http://mercurial.selenic.com/wiki/ + +Working without setuptools / from source +========================================== + +If you have a checkout_ or a tarball_ it is actually not neccessary to issue +``setup.py`` commands in order to use py lib and its tools. You can +simply add the root directory to ``PYTHONPATH`` and ``py/bin`` or +``py\bin\win32`` to your ``PATH`` settings. + +There are also helper scripts to set the environment +on windows:: + + c:\\path\to\checkout\py\env.cmd + +and on linux/osx you can add something like this to +your shell initialization:: + + eval `python ~/path/to/checkout/py/env.py` + +both of which which will get you good settings +for ``PYTHONPATH`` and ``PATH``. + +Note also that the command line scripts will look +for "nearby" py libs, so if you have a layout like this:: + + mypkg/ + subpkg1/ + tests/ + tests/ + py/ + +then issuing ``py.test subpkg1`` will use the py lib +from that projects root directory. + +Debian and RPM packages =================================== As of July 2009 pytest/pylib 1.0 RPMs and Debian packages -are not yet available. +are not yet available. So you will only find older +versions. On Debian systems look for ``python-codespeak-lib``. -*This package is probably outdated - if somebody +*But this package is probably outdated - if somebody can help with bringing this up to date, that would be very much appreciated.* @@ -50,12 +105,14 @@ Dwayne Bailey has thankfully put togethe .. _`setuptools installation`: http://pypi.python.org/pypi/setuptools -Downloading a tar/zip archive and installing that +.. _tarball: + +Installing from a TAR archive =================================================== You need a working `setuptools installation`_. -Go to the python package index (pypi) and download a tar or zip file: +Go to the python package index (pypi) and download a tar file: http://pypi.python.org/pypi/py/ @@ -63,52 +120,3 @@ and unpack it to a directory, where you python setup.py install -Installing from subversion / develop mode -============================================ - -To follow development or help with fixing things -for the next release, checkout the complete code -and documentation source with mercurial:: - - hg clone https://bitbucket.org/hpk42/py-trunk/ - -or with subversion: - - svn co http://codespeak.net/svn/py/trunk - -With a working `setuptools installation`_ you can then issue:: - - python setup.py develop - -in order to work with your checkout version. - - -Working with multiple py lib versions / svn externals -======================================================= - -If you happen to have multiple versions of the py lib -around or you ship the py lib as an svn-external to -then you might want to use py lib scripts more directly. -For example if you have a project layout like this:: - - mypkg/ - subpkg1/ - tests/ - tests/ - py/ # as svn-external, could be specific tag/version - -then you want to make sure that the actual local py lib is used -and not another system-wide version. For this you need to add -``py/bin`` or ``py\bin\win32`` respectively to your system's PATH settings. - -You can do this by executing (on windows) a script to set the environment:: - - c:\\path\to\checkout\py\env.cmd - -or on linux/osx you can add something like this to your shell -initialization:: - - eval `python ~/path/to/checkout/py/env.py` - -to get good settings for PYTHONPATH and PATH. - --- a/py/test/plugin/pytest_recwarn.py +++ b/py/test/plugin/pytest_recwarn.py @@ -1,11 +1,10 @@ """ helpers for asserting deprecation and other warnings. - recwarn: function argument where one can call recwarn.pop() to get - the last warning that would have been shown. +**recwarn**: function argument where one can call recwarn.pop() to get +the last warning that would have been shown. - py.test.deprecated_call(func, *args, **kwargs): - assert that a function call triggers a deprecation warning. +**py.test.deprecated_call(func, *args, **kwargs)**: assert that the given function call triggers a deprecation warning. """ import py --- a/doc/confrest.py +++ b/doc/confrest.py @@ -173,20 +173,20 @@ class Project: stylesheet=stylesheet, encoding=encoding) content = strip_html_header(content, encoding=encoding) - page = self.Page(self, "[%s] " % txtpath.purebasename, + title = "[%s] %s" % (txtpath.purebasename, py.version) + page = self.Page(self, title, outputpath, stylesheeturl=stylesheet) try: - svninfo = txtpath.info() - modified = " modified %s by %s" % (worded_time(svninfo.mtime), - getrealname(svninfo.last_author)) - except (KeyboardInterrupt, SystemExit): - raise - except: + modified = py.process.cmdexec( + "hg tip --template 'last modified {date|shortdate}'" + ) + except py.process.cmdexec.Error: modified = " " page.contentspace.append( - html.div(html.div(modified, style="float: right; font-style: italic;"), + html.div(html.div(modified, + style="float: right; font-style: italic;"), id = 'docinfoline')) page.contentspace.append(py.xml.raw(content)) From commits-noreply at bitbucket.org Tue Jul 14 21:37:59 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Jul 2009 19:37:59 +0000 (UTC) Subject: [py-svn] py-trunk commit d4ab76fdae51: regen setup/manifest Message-ID: <20090714193759.DD4BD12092@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview/ # User holger krekel # Date 1247599730 -7200 # Node ID d4ab76fdae51077b081e2d30e05df3e18904c94b # Parent 65f510ded494e2ef46ea9c062f4295a3c4e92e87 regen setup/manifest --- a/MANIFEST +++ b/MANIFEST @@ -28,6 +28,7 @@ doc/test/examples.txt doc/test/extend.txt doc/test/features.txt doc/test/funcargs.txt +doc/test/plugins.txt doc/test/quickstart.txt doc/test/talks.txt doc/test/test.txt @@ -60,6 +61,7 @@ example/funcarg/test_simpleprovider.py example/genhtml.py example/genhtmlcss.py example/genxml.py +makepluginlist.py py/LICENSE py/__init__.py py/_com.py From commits-noreply at bitbucket.org Thu Jul 16 06:16:45 2009 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 16 Jul 2009 04:16:45 -0000 Subject: [py-svn] commit/py-3k: yangyan5: all tests pass under python2.4-2.6, some tests of execnet/ and test/ failed under python3.1 Message-ID: <20090716041645.13765.80595@domU-12-31-39-00-D4-C1.compute-1.internal> 1 new changeset in py-3k: http://www.bitbucket.org/yangyan5/py-3k/changeset/dec703c4bafa/ changeset: r1164:dec703c4bafa user: yangyan5 date: 2009-07-16 06:16:16 summary: all tests pass under python2.4-2.6, some tests of execnet/ and test/ failed under python3.1 affected #: 11 files (2.7 KB) Repository URL: http://bitbucket.org/yangyan5/py-3k/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From hpk at codespeak.net Fri Jul 17 14:41:40 2009 From: hpk at codespeak.net (hpk at codespeak.net) Date: Fri, 17 Jul 2009 14:41:40 +0200 (CEST) Subject: [py-svn] r66304 - py/extradoc/talk/gtac2009 Message-ID: <20090717124140.C91A1169F2C@codespeak.net> Author: hpk Date: Fri Jul 17 14:41:39 2009 New Revision: 66304 Added: py/extradoc/talk/gtac2009/ py/extradoc/talk/gtac2009/full_stack_testing.pdf (contents, props changed) py/extradoc/talk/gtac2009/proposal.txt Log: (pedronis, hpk) adding gtac draft proposal Added: py/extradoc/talk/gtac2009/full_stack_testing.pdf ============================================================================== Binary file. No diff available. Added: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- (empty file) +++ py/extradoc/talk/gtac2009/proposal.txt Fri Jul 17 14:41:39 2009 @@ -0,0 +1,14 @@ + +outline, example slides: + + http://docs.google.com/present/edit?id=d6fvqvh_15c98fx8fw# + +authors and affiliation: +Holger Krekel, merlinux GmbH, Germany +Samuele Pedroni, Open End AB, Sweden + +title: full-stack web app testing at a fingertip + +extended abstract: + + From py-svn at codespeak.net Mon Jul 20 00:08:08 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Sun, 19 Jul 2009 23:08:08 +0100 Subject: [py-svn] You've received a greeting ecard Message-ID: <000d01ca08b5$03d6ec00$6400a8c0@overdrawse97> Good day. You have received an eCard To pick up your eCard, choose from any of the following options: Click on the following link (or copy & paste it into your web browser): http://sensecost.com/ Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! From py-svn at codespeak.net Mon Jul 20 14:13:11 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Mon, 20 Jul 2009 13:13:11 +0100 Subject: [py-svn] You've received a greeting ecard Message-ID: <000d01ca092b$117897c0$6400a8c0@romancedb5> Good day. You have received an eCard To pick up your eCard, choose from any of the following options: Click on the following link (or copy & paste it into your web browser): http://groups.google.com/group/haymixer Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! From py-svn at codespeak.net Mon Jul 20 16:29:05 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Mon, 20 Jul 2009 11:29:05 -0300 Subject: [py-svn] You've received a greeting ecard Message-ID: <000d01ca0946$6f408320$6400a8c0@privacytbr8> Good day. You have received an eCard To pick up your eCard, choose from any of the following options: Click on the following link (or copy & paste it into your web browser): http://softokors.com/ Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! From py-svn at codespeak.net Mon Jul 20 21:06:55 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Mon, 20 Jul 2009 20:06:55 +0100 Subject: [py-svn] You've received a greeting ecard Message-ID: <000d01ca0964$ddcfe790$6400a8c0@rotsoe1> Good day. You have received an eCard To pick up your eCard, choose from any of the following options: Click on the following link (or copy & paste it into your web browser): http://softokors.com/ Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! From py-svn at codespeak.net Tue Jul 21 01:26:33 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Mon, 20 Jul 2009 20:26:33 -0300 Subject: [py-svn] You've received a greeting ecard Message-ID: <000d01ca0991$85014000$6400a8c0@muscularb57> Good day. You have received an eCard To pick up your eCard, choose from any of the following options: Click on the following link (or copy & paste it into your web browser): http://softokors.com/ Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! From hpk at codespeak.net Tue Jul 21 09:16:31 2009 From: hpk at codespeak.net (hpk at codespeak.net) Date: Tue, 21 Jul 2009 09:16:31 +0200 (CEST) Subject: [py-svn] r66472 - py/extradoc/talk/gtac2009 Message-ID: <20090721071631.CA7E816857E@codespeak.net> Author: hpk Date: Tue Jul 21 09:16:30 2009 New Revision: 66472 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: draft of abstract Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 09:16:30 2009 @@ -11,4 +11,36 @@ extended abstract: +We present experiences and new tools for testing Javascript code in +real-life browsers, considerably easing the writing of cross-browser +feature-rich AJAX complications. By means of the oejskit plugin +to the popular py.test testing tool one can execute server side (Python) +code fragments that serve Javascript tests running in multiple spawned +remote browsers. Testing aspects include DOM manipulations, testing +asynchronous behaviour and integration/protocols. It is also possible to +test server-side code in multiple server environments. All such tests +can be grouped logically side-by-side and are run through a single +command line interface that interactively and directly reports back to +the developer. Using Firefox yields better tracebacks but running +Internet Explorer, and XXX is supported as well. + +We found that this full-stack approach to web testing substantially increases +a developers ability to gain confidence in writing reliable cross-browser +applications. It allows developers to more easily test server-side and +client-side changes in combination with each other, thus contributing to +an integrative understanding of the code base. + +Speaking in testing terminology, our approach presents a cross-over of +integration, functional and unit-testing. Javascript (unit) tests can +focus on a single application or browser aspect and can be real-life +deployed in several server/browser combinations +at a fingertip. Running in target server or browser +environments is an important aspect of system or functional testing +whereas partially mocking out server aspects relates to integration testing. +However, our 8 years of developer testing experience suggests to not +overly focus on terminology. In this vein, we intend to discuss some +insights and strategies with respect to testing and testing tools +in general. We also give some practical tips for integration into +Continous Integration systems and do some quick demonstrations of +the working software as time permits. From pedronis at codespeak.net Tue Jul 21 11:49:06 2009 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Tue, 21 Jul 2009 11:49:06 +0200 (CEST) Subject: [py-svn] r66473 - py/extradoc/talk/gtac2009 Message-ID: <20090721094906.904AF16855E@codespeak.net> Author: pedronis Date: Tue Jul 21 11:49:05 2009 New Revision: 66473 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: tweaks, fix XXX Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 11:49:05 2009 @@ -13,16 +13,17 @@ We present experiences and new tools for testing Javascript code in real-life browsers, considerably easing the writing of cross-browser -feature-rich AJAX complications. By means of the oejskit plugin -to the popular py.test testing tool one can execute server side (Python) +feature-rich AJAX complications. By means of the oejskit plugin to +the popular py.test testing tool one can execute server side (Python) code fragments that serve Javascript tests running in multiple spawned -remote browsers. Testing aspects include DOM manipulations, testing -asynchronous behaviour and integration/protocols. It is also possible to -test server-side code in multiple server environments. All such tests -can be grouped logically side-by-side and are run through a single -command line interface that interactively and directly reports back to -the developer. Using Firefox yields better tracebacks but running -Internet Explorer, and XXX is supported as well. +remote browsers. Testing aspects include DOM manipulations, testing +asynchronous behaviour and the integration/protocols between the +server code and the page code. It is also possible to test +server-side code in multiple server environments. All such tests can +be grouped logically side-by-side and are run through a single command +line interface that interactively and directly reports back to the +developer. Using Firefox yields better tracebacks but running +agaist Internet Explorer, and Safari is of course supported as well. We found that this full-stack approach to web testing substantially increases a developers ability to gain confidence in writing reliable cross-browser @@ -43,4 +44,3 @@ in general. We also give some practical tips for integration into Continous Integration systems and do some quick demonstrations of the working software as time permits. - From pedronis at codespeak.net Tue Jul 21 12:29:44 2009 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Tue, 21 Jul 2009 12:29:44 +0200 (CEST) Subject: [py-svn] r66474 - py/extradoc/talk/gtac2009 Message-ID: <20090721102944.D5293169E92@codespeak.net> Author: pedronis Date: Tue Jul 21 12:29:43 2009 New Revision: 66474 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: clarification I think Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 12:29:43 2009 @@ -33,14 +33,14 @@ Speaking in testing terminology, our approach presents a cross-over of integration, functional and unit-testing. Javascript (unit) tests can -focus on a single application or browser aspect and can be real-life -deployed in several server/browser combinations -at a fingertip. Running in target server or browser -environments is an important aspect of system or functional testing -whereas partially mocking out server aspects relates to integration testing. -However, our 8 years of developer testing experience suggests to not -overly focus on terminology. In this vein, we intend to discuss some -insights and strategies with respect to testing and testing tools -in general. We also give some practical tips for integration into -Continous Integration systems and do some quick demonstrations of -the working software as time permits. +focus on a single implementation unit, feature or browser aspect and +can be real-life deployed in several server/browser combinations at a +fingertip. Running in target server or browser environments is an +important aspect of system or functional testing whereas partially +mocking out server aspects relates to integration testing. However, +our 8 years of developer testing experience suggests to not overly +focus on terminology. In this vein, we intend to discuss some +insights and strategies with respect to testing and testing tools in +general. We also give some practical tips for integration into +Continous Integration systems and do some quick demonstrations of the +working software as time permits. From hpk at codespeak.net Tue Jul 21 12:30:33 2009 From: hpk at codespeak.net (hpk at codespeak.net) Date: Tue, 21 Jul 2009 12:30:33 +0200 (CEST) Subject: [py-svn] r66475 - py/extradoc/talk/gtac2009 Message-ID: <20090721103033.5C384169E92@codespeak.net> Author: hpk Date: Tue Jul 21 12:30:32 2009 New Revision: 66475 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: some XXX to be filled Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 12:30:32 2009 @@ -4,12 +4,13 @@ http://docs.google.com/present/edit?id=d6fvqvh_15c98fx8fw# authors and affiliation: + Holger Krekel, merlinux GmbH, Germany Samuele Pedroni, Open End AB, Sweden -title: full-stack web app testing at a fingertip +Title: full-stack web app testing at a fingertip -extended abstract: +Extended abstract: We present experiences and new tools for testing Javascript code in real-life browsers, considerably easing the writing of cross-browser @@ -25,12 +26,17 @@ developer. Using Firefox yields better tracebacks but running agaist Internet Explorer, and Safari is of course supported as well. +XXX something more about py.test + We found that this full-stack approach to web testing substantially increases a developers ability to gain confidence in writing reliable cross-browser applications. It allows developers to more easily test server-side and client-side changes in combination with each other, thus contributing to an integrative understanding of the code base. +XXX something more about how Open End used the approach for +its own product (also naming it). + Speaking in testing terminology, our approach presents a cross-over of integration, functional and unit-testing. Javascript (unit) tests can focus on a single implementation unit, feature or browser aspect and From pedronis at codespeak.net Tue Jul 21 12:43:46 2009 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Tue, 21 Jul 2009 12:43:46 +0200 (CEST) Subject: [py-svn] r66476 - py/extradoc/talk/gtac2009 Message-ID: <20090721104346.3B3C5169E98@codespeak.net> Author: pedronis Date: Tue Jul 21 12:43:45 2009 New Revision: 66476 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: OE para Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 12:43:45 2009 @@ -34,8 +34,15 @@ client-side changes in combination with each other, thus contributing to an integrative understanding of the code base. -XXX something more about how Open End used the approach for -its own product (also naming it). +Open End interests in JavaScript testing comes from our work on +Eutaxia a collaborative web application featuring real-time updates +and an innovative UI based on direct interaction with semi structured +content which we co-designed with Aza Raskin and team at Humanized at +the time. We pretty much saw immediately the need to detailed testing +of all the aspects we listed. A purely high-level functional testing +approach would have been too cumbersome ant not given the required +confidence. We wanted to proceed TDD and get each block right first on +its own iteratively. Speaking in testing terminology, our approach presents a cross-over of integration, functional and unit-testing. Javascript (unit) tests can From hpk at codespeak.net Tue Jul 21 12:50:45 2009 From: hpk at codespeak.net (hpk at codespeak.net) Date: Tue, 21 Jul 2009 12:50:45 +0200 (CEST) Subject: [py-svn] r66477 - py/extradoc/talk/gtac2009 Message-ID: <20090721105045.74A5E169E8D@codespeak.net> Author: hpk Date: Tue Jul 21 12:50:45 2009 New Revision: 66477 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: adding py.test bit, splitting a too-long pedronis sentence Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 12:50:45 2009 @@ -17,32 +17,38 @@ feature-rich AJAX complications. By means of the oejskit plugin to the popular py.test testing tool one can execute server side (Python) code fragments that serve Javascript tests running in multiple spawned -remote browsers. Testing aspects include DOM manipulations, testing -asynchronous behaviour and the integration/protocols between the -server code and the page code. It is also possible to test -server-side code in multiple server environments. All such tests can -be grouped logically side-by-side and are run through a single command -line interface that interactively and directly reports back to the -developer. Using Firefox yields better tracebacks but running +remote browsers. Using Firefox yields better tracebacks but running agaist Internet Explorer, and Safari is of course supported as well. -XXX something more about py.test +Testing aspects include DOM manipulations, testing asynchronous +behaviour and the integration/protocols between the server code and the +page code. It is also possible to test server-side code in multiple +server environments. All such tests can be grouped logically +side-by-side and are run through a single command line interface that +interactively and directly reports back to the developer. -We found that this full-stack approach to web testing substantially increases +The py.test tool follows a "minimal boilerplate" approach to testing +and has spearheaded testing innovations in the Python world for a number +of years now. We'll highlight main features and particularly discuss its +ability to distribute tests to multiple machines for load-balancing and +for verifying platform compatibility, complemented by the new +oejskit plugin's ability to send code to multiple remote browsers. + +We found that our full-stack approach to web testing substantially increases a developers ability to gain confidence in writing reliable cross-browser applications. It allows developers to more easily test server-side and client-side changes in combination with each other, thus contributing to -an integrative understanding of the code base. +an integrative and common understanding of the code base. Open End interests in JavaScript testing comes from our work on -Eutaxia a collaborative web application featuring real-time updates +Eutaxia, a collaborative web application featuring real-time updates and an innovative UI based on direct interaction with semi structured -content which we co-designed with Aza Raskin and team at Humanized at -the time. We pretty much saw immediately the need to detailed testing -of all the aspects we listed. A purely high-level functional testing -approach would have been too cumbersome ant not given the required -confidence. We wanted to proceed TDD and get each block right first on -its own iteratively. +content. The application was co-designed with Aza Raskin and team at +Humanized at the time. We pretty much saw immediately the need to +detailed testing of all the aspects we listed. A purely high-level +functional testing approach would have been too cumbersome and not given +the required confidence. We wanted to proceed TDD and get each block +right first on its own iteratively. Speaking in testing terminology, our approach presents a cross-over of integration, functional and unit-testing. Javascript (unit) tests can From hpk at codespeak.net Tue Jul 21 12:58:01 2009 From: hpk at codespeak.net (hpk at codespeak.net) Date: Tue, 21 Jul 2009 12:58:01 +0200 (CEST) Subject: [py-svn] r66478 - py/extradoc/talk/gtac2009 Message-ID: <20090721105801.AAA7D169EA6@codespeak.net> Author: hpk Date: Tue Jul 21 12:58:01 2009 New Revision: 66478 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: turning this into a mail Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 12:58:01 2009 @@ -1,7 +1,16 @@ +Hello GTAC 2009, -outline, example slides: +please find below our proposal and attached a PDF with two +example slides and a rough outline. If neccessary we can +provide a more detailed outline. - http://docs.google.com/present/edit?id=d6fvqvh_15c98fx8fw# +Given acceptance we'd both highly appreciate accomodation +and some travel funding from Goteborg/Sweden and +Freiburg/Germany respectively. + +thanks & with kind regards, + +Holger Krekel and Samuele Pedroni authors and affiliation: From pedronis at codespeak.net Tue Jul 21 13:00:24 2009 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Tue, 21 Jul 2009 13:00:24 +0200 (CEST) Subject: [py-svn] r66479 - py/extradoc/talk/gtac2009 Message-ID: <20090721110024.7252D168576@codespeak.net> Author: pedronis Date: Tue Jul 21 13:00:21 2009 New Revision: 66479 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: typo fix Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 13:00:21 2009 @@ -27,7 +27,7 @@ the popular py.test testing tool one can execute server side (Python) code fragments that serve Javascript tests running in multiple spawned remote browsers. Using Firefox yields better tracebacks but running -agaist Internet Explorer, and Safari is of course supported as well. +against Internet Explorer, and Safari is of course supported as well. Testing aspects include DOM manipulations, testing asynchronous behaviour and the integration/protocols between the server code and the From pedronis at codespeak.net Tue Jul 21 13:01:27 2009 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Tue, 21 Jul 2009 13:01:27 +0200 (CEST) Subject: [py-svn] r66480 - py/extradoc/talk/gtac2009 Message-ID: <20090721110127.B3947168576@codespeak.net> Author: pedronis Date: Tue Jul 21 13:01:27 2009 New Revision: 66480 Modified: py/extradoc/talk/gtac2009/proposal.txt Log: typos in intro Modified: py/extradoc/talk/gtac2009/proposal.txt ============================================================================== --- py/extradoc/talk/gtac2009/proposal.txt (original) +++ py/extradoc/talk/gtac2009/proposal.txt Tue Jul 21 13:01:27 2009 @@ -1,10 +1,10 @@ Hello GTAC 2009, please find below our proposal and attached a PDF with two -example slides and a rough outline. If neccessary we can +example slides and a rough outline. If necessary we can provide a more detailed outline. -Given acceptance we'd both highly appreciate accomodation +Given acceptance we'd both highly appreciate accommodation and some travel funding from Goteborg/Sweden and Freiburg/Germany respectively. From py-svn at codespeak.net Wed Jul 22 09:40:09 2009 From: py-svn at codespeak.net (greetingcard.org) Date: Wed, 22 Jul 2009 04:40:09 -0300 Subject: [py-svn] You've received a greeting ecard Message-ID: <000d01ca0a9f$a398d320$6400a8c0@varies65> Good day. You have received an eCard To pick up your eCard, choose from any of the following options: Click on the following link (or copy & paste it into your web browser): http://milksearch.com Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! From py-svn at codespeak.net Wed Jul 22 19:39:11 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Wed, 22 Jul 2009 18:39:11 +0100 Subject: [py-svn] You have new message! Message-ID: <094106346.94518117090671@simonealbini.it> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Thu Jul 23 01:40:39 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Wed, 22 Jul 2009 18:40:39 -0500 Subject: [py-svn] You have new message! Message-ID: <765088595.50312922444201@schachclub-ismaning.de> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Fri Jul 24 13:10:58 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Fri, 24 Jul 2009 14:10:58 +0300 Subject: [py-svn] You have received an eCard Message-ID: <000d01ca0c47$09cfdff0$6400a8c0@paperhangerk> Good day. You have received an eCard To pick up your eCard, open attached file Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! -------------- next part -------------- A non-text attachment was scrubbed... Name: ecard.zip Type: application/zip Size: 76040 bytes Desc: not available URL: From py-svn at codespeak.net Fri Jul 24 13:12:49 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Fri, 24 Jul 2009 03:12:49 -0800 Subject: [py-svn] You have received an eCard Message-ID: <000d01ca0c47$4c515390$6400a8c0@breedv> Good day. You have received an eCard To pick up your eCard, open attached file Your card will be aviailable for pick-up beginning for the next 30 days. Please be sure to view your eCard before the days are up! We hope you enjoy you eCard. Thank You! -------------- next part -------------- A non-text attachment was scrubbed... Name: ecard.zip Type: application/zip Size: 76040 bytes Desc: not available URL: From py-svn at codespeak.net Sat Jul 25 21:46:52 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Sat, 25 Jul 2009 20:46:52 +0100 Subject: [py-svn] You have new message! Message-ID: <670977138.66861948758614@sith.itb.ac.id> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Sun Jul 26 18:42:58 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Sun, 26 Jul 2009 18:42:58 +0200 Subject: [py-svn] You have new message! Message-ID: <076241638.02089131855840@schindler.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Mon Jul 27 00:43:55 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Sun, 26 Jul 2009 17:43:55 -0500 Subject: [py-svn] You have new message! Message-ID: <044253170.28782005092517@rottenstore.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Mon Jul 27 14:08:49 2009 From: py-svn at codespeak.net (© 2002-2009 Pfizer Inc.) Date: Mon, 27 Jul 2009 14:08:49 +0200 (CEST) Subject: [py-svn] Dear py-svn@codespeak.net 72% 0FF on Pfizer ! Message-ID: <20090727120849.AE96416849A@codespeak.net> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Mon Jul 27 16:23:59 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Mon, 27 Jul 2009 15:23:59 +0100 Subject: [py-svn] You have new message! Message-ID: <960708313.75742107649672@radiosistemas.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Mon Jul 27 19:21:08 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Mon, 27 Jul 2009 18:21:08 +0100 Subject: [py-svn] You have new message! Message-ID: <863187251.99195646981335@ratedxradio.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Tue Jul 28 08:47:20 2009 From: py-svn at codespeak.net (Anissa Upuhy) Date: Tue, 28 Jul 2009 08:47:20 +0200 (CEST) Subject: [py-svn] Welcome to our event Message-ID: <6534RHK.6075B7D85A.73343631356AEXYWEREETXSQKY57@87-205-246-52.adsl.inetia.pl> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Tue Jul 28 11:59:09 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Tue, 28 Jul 2009 10:59:09 +0100 Subject: [py-svn] Your excitement will break ceilings Message-ID: <968046101.28811924167846@raymondindia.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Tue Jul 28 16:31:24 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Tue, 28 Jul 2009 16:31:24 +0200 Subject: [py-svn] Be the mightiest driller! Message-ID: <741575994.86238622656938@roxburypd.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Tue Jul 28 19:54:47 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Tue, 28 Jul 2009 13:24:47 -0430 Subject: [py-svn] Don't let flaccidity spoil fun! Message-ID: <925182015.41767991953064@railcons.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Wed Jul 29 02:32:46 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Wed, 29 Jul 2009 02:32:46 +0200 Subject: [py-svn] Boost your rocket Message-ID: <777222554.43536659866385@riedc.com> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Wed Jul 29 03:09:07 2009 From: py-svn at codespeak.net (Wilburn Jettie) Date: Wed, 29 Jul 2009 03:09:07 +0200 (CEST) Subject: [py-svn] New booking Message-ID: An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Thu Jul 30 12:16:17 2009 From: py-svn at codespeak.net (Hemani Contessa) Date: Thu, 30 Jul 2009 12:16:17 +0200 (CEST) Subject: [py-svn] Check this MMS Message-ID: An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Thu Jul 30 20:53:55 2009 From: py-svn at codespeak.net (Aurelio Bunuxy) Date: Thu, 30 Jul 2009 20:53:55 +0200 (CEST) Subject: [py-svn] Let's try via mail )) Message-ID: <5604HVJ.783955697B.5681046142896LVVNGRVDDNQJVUW28@[91.187.21.91]> An HTML attachment was scrubbed... URL: From py-svn at codespeak.net Thu Jul 30 21:36:58 2009 From: py-svn at codespeak.net (py-svn at codespeak.net) Date: Thu, 30 Jul 2009 21:36:58 +0200 (CEST) Subject: [py-svn] Delivery Status Notification Message-ID: <20090730193658.B780B169FEA@codespeak.net> An HTML attachment was scrubbed... URL: From getxsick at codespeak.net Fri Jul 31 22:12:43 2009 From: getxsick at codespeak.net (getxsick at codespeak.net) Date: Fri, 31 Jul 2009 22:12:43 +0200 (CEST) Subject: [py-svn] r66719 - py/trunk/py/compat Message-ID: <20090731201243.EADD4169F5D@codespeak.net> Author: getxsick Date: Fri Jul 31 22:12:41 2009 New Revision: 66719 Modified: py/trunk/py/compat/LICENSE Log: redundant word Modified: py/trunk/py/compat/LICENSE ============================================================================== --- py/trunk/py/compat/LICENSE (original) +++ py/trunk/py/compat/LICENSE Fri Jul 31 22:12:41 2009 @@ -1,7 +1,7 @@ License for modules in py/compat directory ============================================================== -The "*.py" files in py/compat/ and subdirectories are are all +The "*.py" files in py/compat/ and subdirectories are all - except when otherwise stated at the beginning of the file - copyrighted by the Python Software Foundation and licensed under the Python Software License of which you can find a copy