| |
| <!DOCTYPE html> |
| |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <title>proton._events — Qpid Proton Python API 0.32.0 documentation</title> |
| <link rel="stylesheet" href="../../_static/sphinxdoc.css" type="text/css" /> |
| <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |
| <script id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> |
| <script src="../../_static/jquery.js"></script> |
| <script src="../../_static/underscore.js"></script> |
| <script src="../../_static/doctools.js"></script> |
| <script src="../../_static/language_data.js"></script> |
| <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> |
| <link rel="index" title="Index" href="../../genindex.html" /> |
| <link rel="search" title="Search" href="../../search.html" /> |
| </head><body> |
| <div class="related" role="navigation" aria-label="related navigation"> |
| <h3>Navigation</h3> |
| <ul> |
| <li class="right" style="margin-right: 10px"> |
| <a href="../../genindex.html" title="General Index" |
| accesskey="I">index</a></li> |
| <li class="nav-item nav-item-0"><a href="../../index.html">Qpid Proton Python API 0.32.0 documentation</a> »</li> |
| <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li> |
| <li class="nav-item nav-item-this"><a href="">proton._events</a></li> |
| </ul> |
| </div> |
| |
| <div class="document"> |
| <div class="documentwrapper"> |
| <div class="bodywrapper"> |
| <div class="body" role="main"> |
| |
| <h1>Source code for proton._events</h1><div class="highlight"><pre> |
| <span></span><span class="c1">#</span> |
| <span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span> |
| <span class="c1"># or more contributor license agreements. See the NOTICE file</span> |
| <span class="c1"># distributed with this work for additional information</span> |
| <span class="c1"># regarding copyright ownership. The ASF licenses this file</span> |
| <span class="c1"># to you under the Apache License, Version 2.0 (the</span> |
| <span class="c1"># "License"); you may not use this file except in compliance</span> |
| <span class="c1"># with the License. You may obtain a copy of the License at</span> |
| <span class="c1">#</span> |
| <span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span> |
| <span class="c1">#</span> |
| <span class="c1"># Unless required by applicable law or agreed to in writing,</span> |
| <span class="c1"># software distributed under the License is distributed on an</span> |
| <span class="c1"># "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span> |
| <span class="c1"># KIND, either express or implied. See the License for the</span> |
| <span class="c1"># specific language governing permissions and limitations</span> |
| <span class="c1"># under the License.</span> |
| <span class="c1">#</span> |
| |
| <span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">absolute_import</span> |
| |
| <span class="kn">import</span> <span class="nn">threading</span> |
| |
| <span class="kn">from</span> <span class="nn">cproton</span> <span class="kn">import</span> <span class="n">PN_CONNECTION_BOUND</span><span class="p">,</span> <span class="n">PN_CONNECTION_FINAL</span><span class="p">,</span> <span class="n">PN_CONNECTION_INIT</span><span class="p">,</span> <span class="n">PN_CONNECTION_LOCAL_CLOSE</span><span class="p">,</span> \ |
| <span class="n">PN_CONNECTION_LOCAL_OPEN</span><span class="p">,</span> <span class="n">PN_CONNECTION_REMOTE_CLOSE</span><span class="p">,</span> <span class="n">PN_CONNECTION_REMOTE_OPEN</span><span class="p">,</span> <span class="n">PN_CONNECTION_UNBOUND</span><span class="p">,</span> <span class="n">PN_DELIVERY</span><span class="p">,</span> \ |
| <span class="n">PN_LINK_FINAL</span><span class="p">,</span> <span class="n">PN_LINK_FLOW</span><span class="p">,</span> <span class="n">PN_LINK_INIT</span><span class="p">,</span> <span class="n">PN_LINK_LOCAL_CLOSE</span><span class="p">,</span> <span class="n">PN_LINK_LOCAL_DETACH</span><span class="p">,</span> <span class="n">PN_LINK_LOCAL_OPEN</span><span class="p">,</span> \ |
| <span class="n">PN_LINK_REMOTE_CLOSE</span><span class="p">,</span> <span class="n">PN_LINK_REMOTE_DETACH</span><span class="p">,</span> <span class="n">PN_LINK_REMOTE_OPEN</span><span class="p">,</span> <span class="n">PN_PYREF</span><span class="p">,</span> <span class="n">PN_SESSION_FINAL</span><span class="p">,</span> <span class="n">PN_SESSION_INIT</span><span class="p">,</span> \ |
| <span class="n">PN_SESSION_LOCAL_CLOSE</span><span class="p">,</span> <span class="n">PN_SESSION_LOCAL_OPEN</span><span class="p">,</span> <span class="n">PN_SESSION_REMOTE_CLOSE</span><span class="p">,</span> <span class="n">PN_SESSION_REMOTE_OPEN</span><span class="p">,</span> <span class="n">PN_TIMER_TASK</span><span class="p">,</span> \ |
| <span class="n">PN_TRANSPORT</span><span class="p">,</span> <span class="n">PN_TRANSPORT_CLOSED</span><span class="p">,</span> <span class="n">PN_TRANSPORT_ERROR</span><span class="p">,</span> <span class="n">PN_TRANSPORT_HEAD_CLOSED</span><span class="p">,</span> <span class="n">PN_TRANSPORT_TAIL_CLOSED</span><span class="p">,</span> \ |
| <span class="n">pn_cast_pn_connection</span><span class="p">,</span> <span class="n">pn_cast_pn_delivery</span><span class="p">,</span> <span class="n">pn_cast_pn_link</span><span class="p">,</span> <span class="n">pn_cast_pn_session</span><span class="p">,</span> <span class="n">pn_cast_pn_transport</span><span class="p">,</span> \ |
| <span class="n">pn_class_name</span><span class="p">,</span> <span class="n">pn_collector</span><span class="p">,</span> <span class="n">pn_collector_free</span><span class="p">,</span> <span class="n">pn_collector_more</span><span class="p">,</span> <span class="n">pn_collector_peek</span><span class="p">,</span> <span class="n">pn_collector_pop</span><span class="p">,</span> \ |
| <span class="n">pn_collector_put</span><span class="p">,</span> <span class="n">pn_collector_release</span><span class="p">,</span> <span class="n">pn_event_class</span><span class="p">,</span> <span class="n">pn_event_connection</span><span class="p">,</span> <span class="n">pn_event_context</span><span class="p">,</span> <span class="n">pn_event_delivery</span><span class="p">,</span> \ |
| <span class="n">pn_event_link</span><span class="p">,</span> <span class="n">pn_event_session</span><span class="p">,</span> <span class="n">pn_event_transport</span><span class="p">,</span> <span class="n">pn_event_type</span><span class="p">,</span> <span class="n">pn_event_type_name</span><span class="p">,</span> <span class="n">pn_py2void</span><span class="p">,</span> <span class="n">pn_void2py</span> |
| |
| <span class="kn">from</span> <span class="nn">._delivery</span> <span class="kn">import</span> <span class="n">Delivery</span> |
| <span class="kn">from</span> <span class="nn">._endpoints</span> <span class="kn">import</span> <span class="n">Connection</span><span class="p">,</span> <span class="n">Link</span><span class="p">,</span> <span class="n">Session</span> |
| <span class="kn">from</span> <span class="nn">._transport</span> <span class="kn">import</span> <span class="n">Transport</span> |
| |
| |
| <span class="k">class</span> <span class="nc">Collector</span><span class="p">:</span> |
| |
| <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_impl</span> <span class="o">=</span> <span class="n">pn_collector</span><span class="p">()</span> |
| |
| <span class="k">def</span> <span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">etype</span><span class="p">):</span> |
| <span class="n">pn_collector_put</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_impl</span><span class="p">,</span> <span class="n">PN_PYREF</span><span class="p">,</span> <span class="n">pn_py2void</span><span class="p">(</span><span class="n">obj</span><span class="p">),</span> <span class="n">etype</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="k">return</span> <span class="n">Event</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_collector_peek</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_impl</span><span class="p">))</span> |
| |
| <span class="k">def</span> <span class="nf">more</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="k">return</span> <span class="n">pn_collector_more</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_impl</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="n">ev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">()</span> |
| <span class="n">pn_collector_pop</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_impl</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="n">pn_collector_release</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_impl</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="n">pn_collector_free</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_impl</span><span class="p">)</span> |
| <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_impl</span> |
| |
| |
| <span class="k">if</span> <span class="s2">"TypeExtender"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="nb">globals</span><span class="p">():</span> |
| <span class="k">class</span> <span class="nc">TypeExtender</span><span class="p">:</span> |
| <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">number</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">number</span> |
| |
| <span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="k">try</span><span class="p">:</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">number</span> |
| <span class="k">finally</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">+=</span> <span class="mi">1</span> |
| |
| |
| <div class="viewcode-block" id="EventType"><a class="viewcode-back" href="../../proton.html#proton.EventType">[docs]</a><span class="k">class</span> <span class="nc">EventType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Connects an event number to an event name, and is used</span> |
| <span class="sd"> internally by :class:`Event` to represent all known</span> |
| <span class="sd"> event types. A global list of events is maintained. An</span> |
| <span class="sd"> :class:`EventType` created with a name but no number is</span> |
| <span class="sd"> treated as an *extended* event, and is assigned an</span> |
| <span class="sd"> internal event number starting at 10000.</span> |
| <span class="sd"> """</span> |
| <span class="n">_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span> |
| <span class="n">_extended</span> <span class="o">=</span> <span class="n">TypeExtender</span><span class="p">(</span><span class="mi">10000</span><span class="p">)</span> |
| <span class="n">TYPES</span> <span class="o">=</span> <span class="p">{}</span> |
| |
| <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">number</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> |
| <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">number</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |
| <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">"extended events require a name"</span><span class="p">)</span> |
| <span class="k">try</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> |
| <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |
| <span class="n">name</span> <span class="o">=</span> <span class="n">pn_event_type_name</span><span class="p">(</span><span class="n">number</span><span class="p">)</span> |
| |
| <span class="k">if</span> <span class="n">number</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |
| <span class="n">number</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extended</span><span class="o">.</span><span class="n">next</span><span class="p">()</span> |
| |
| <span class="k">if</span> <span class="n">method</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |
| <span class="n">method</span> <span class="o">=</span> <span class="s2">"on_</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">name</span> |
| |
| <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">number</span> <span class="o">=</span> <span class="n">number</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">method</span> |
| |
| <span class="bp">self</span><span class="o">.</span><span class="n">TYPES</span><span class="p">[</span><span class="n">number</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span> |
| <span class="k">finally</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> |
| |
| <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="k">return</span> <span class="s2">"EventType(name=</span><span class="si">%s</span><span class="s2">, number=</span><span class="si">%d</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span></div> |
| |
| |
| <span class="k">def</span> <span class="nf">_dispatch</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> |
| <span class="n">m</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> |
| <span class="k">if</span> <span class="n">m</span><span class="p">:</span> |
| <span class="n">m</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span> |
| <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="s2">"on_unhandled"</span><span class="p">):</span> |
| <span class="n">handler</span><span class="o">.</span><span class="n">on_unhandled</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span> |
| |
| |
| <span class="k">class</span> <span class="nc">EventBase</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> |
| |
| <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="nb">type</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The type name for this event</span> |
| |
| <span class="sd"> :type: ``str``</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">handler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The handler for this event type. Not implemented, always returns ``None``.</span> |
| |
| <span class="sd"> :type: ``None``</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="kc">None</span> |
| |
| <span class="k">def</span> <span class="nf">dispatch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handler</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Process this event by sending it to all known handlers that</span> |
| <span class="sd"> are valid for this event type.</span> |
| |
| <span class="sd"> :param handler: Parent handler to process this event</span> |
| <span class="sd"> :type handler: :class:`Handler`</span> |
| <span class="sd"> :param type: Event type</span> |
| <span class="sd"> :type type: :class:`EventType`</span> |
| <span class="sd"> """</span> |
| <span class="nb">type</span> <span class="o">=</span> <span class="nb">type</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> |
| <span class="n">_dispatch</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="nb">type</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> |
| <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="s2">"handlers"</span><span class="p">):</span> |
| <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">handlers</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">(</span><span class="si">%r</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">)</span> |
| |
| |
| <span class="k">def</span> <span class="nf">_core</span><span class="p">(</span><span class="n">number</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span> |
| <span class="k">return</span> <span class="n">EventType</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">number</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">)</span> |
| |
| |
| <span class="k">def</span> <span class="nf">_internal</span><span class="p">(</span><span class="n">name</span><span class="p">):</span> |
| <span class="k">return</span> <span class="n">EventType</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">)</span> |
| |
| |
| <span class="n">wrappers</span> <span class="o">=</span> <span class="p">{</span> |
| <span class="s2">"pn_void"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">pn_void2py</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> |
| <span class="s2">"pn_pyref"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">pn_void2py</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> |
| <span class="s2">"pn_connection"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">Connection</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_cast_pn_connection</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> |
| <span class="s2">"pn_session"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">Session</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_cast_pn_session</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> |
| <span class="s2">"pn_link"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">Link</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_cast_pn_link</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> |
| <span class="s2">"pn_delivery"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">Delivery</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_cast_pn_delivery</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> |
| <span class="s2">"pn_transport"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">Transport</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_cast_pn_transport</span><span class="p">(</span><span class="n">x</span><span class="p">))</span> |
| <span class="p">}</span> |
| |
| |
| <div class="viewcode-block" id="Event"><a class="viewcode-back" href="../../proton.html#proton.Event">[docs]</a><span class="k">class</span> <span class="nc">Event</span><span class="p">(</span><span class="n">EventBase</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Notification of a state change in the protocol engine.</span> |
| <span class="sd"> """</span> |
| <span class="n">TIMER_TASK</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_TIMER_TASK</span><span class="p">,</span> <span class="s2">"on_timer_task"</span><span class="p">)</span> |
| <span class="sd">"""A timer event has occurred."""</span> |
| |
| |
| <span class="n">CONNECTION_INIT</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_INIT</span><span class="p">,</span> <span class="s2">"on_connection_init"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The connection has been created. This is the first event that</span> |
| <span class="sd"> will ever be issued for a connection. Events of this type point</span> |
| <span class="sd"> to the relevant connection.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_BOUND</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_BOUND</span><span class="p">,</span> <span class="s2">"on_connection_bound"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The connection has been bound to a transport. This event is</span> |
| <span class="sd"> issued when the :meth:`Transport.bind` operation is invoked.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_UNBOUND</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_UNBOUND</span><span class="p">,</span> <span class="s2">"on_connection_unbound"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The connection has been unbound from its transport. This event is</span> |
| <span class="sd"> issued when the :meth:`Transport.unbind` operation is invoked.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_LOCAL_OPEN</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_LOCAL_OPEN</span><span class="p">,</span> <span class="s2">"on_connection_local_open"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local connection endpoint has been closed. Events of this</span> |
| <span class="sd"> type point to the relevant connection.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_LOCAL_CLOSE</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_LOCAL_CLOSE</span><span class="p">,</span> <span class="s2">"on_connection_local_close"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local connection endpoint has been closed. Events of this</span> |
| <span class="sd"> type point to the relevant connection.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_REMOTE_OPEN</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_REMOTE_OPEN</span><span class="p">,</span> <span class="s2">"on_connection_remote_open"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has opened the connection. Events of this</span> |
| <span class="sd"> type point to the relevant connection.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_REMOTE_CLOSE</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_REMOTE_CLOSE</span><span class="p">,</span> <span class="s2">"on_connection_remote_close"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has closed the connection. Events of this</span> |
| <span class="sd"> type point to the relevant connection.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">CONNECTION_FINAL</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_CONNECTION_FINAL</span><span class="p">,</span> <span class="s2">"on_connection_final"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The connection has been freed and any outstanding processing has</span> |
| <span class="sd"> been completed. This is the final event that will ever be issued</span> |
| <span class="sd"> for a connection.</span> |
| <span class="sd"> """</span> |
| |
| |
| <span class="n">SESSION_INIT</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_SESSION_INIT</span><span class="p">,</span> <span class="s2">"on_session_init"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The session has been created. This is the first event that will</span> |
| <span class="sd"> ever be issued for a session.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">SESSION_LOCAL_OPEN</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_SESSION_LOCAL_OPEN</span><span class="p">,</span> <span class="s2">"on_session_local_open"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local session endpoint has been opened. Events of this type</span> |
| <span class="sd"> point to the relevant session.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">SESSION_LOCAL_CLOSE</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_SESSION_LOCAL_CLOSE</span><span class="p">,</span> <span class="s2">"on_session_local_close"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local session endpoint has been closed. Events of this type</span> |
| <span class="sd"> point ot the relevant session.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">SESSION_REMOTE_OPEN</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_SESSION_REMOTE_OPEN</span><span class="p">,</span> <span class="s2">"on_session_remote_open"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has opened the session. Events of this type</span> |
| <span class="sd"> point to the relevant session.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">SESSION_REMOTE_CLOSE</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_SESSION_REMOTE_CLOSE</span><span class="p">,</span> <span class="s2">"on_session_remote_close"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has closed the session. Events of this type</span> |
| <span class="sd"> point to the relevant session.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">SESSION_FINAL</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_SESSION_FINAL</span><span class="p">,</span> <span class="s2">"on_session_final"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The session has been freed and any outstanding processing has</span> |
| <span class="sd"> been completed. This is the final event that will ever be issued</span> |
| <span class="sd"> for a session.</span> |
| <span class="sd"> """</span> |
| |
| |
| <span class="n">LINK_INIT</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_INIT</span><span class="p">,</span> <span class="s2">"on_link_init"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The link has been created. This is the first event that will ever</span> |
| <span class="sd"> be issued for a link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_LOCAL_OPEN</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_LOCAL_OPEN</span><span class="p">,</span> <span class="s2">"on_link_local_open"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local link endpoint has been opened. Events of this type</span> |
| <span class="sd"> point ot the relevant link. </span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_LOCAL_CLOSE</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_LOCAL_CLOSE</span><span class="p">,</span> <span class="s2">"on_link_local_close"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local link endpoint has been closed. Events of this type</span> |
| <span class="sd"> point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_LOCAL_DETACH</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_LOCAL_DETACH</span><span class="p">,</span> <span class="s2">"on_link_local_detach"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The local link endpoint has been detached. Events of this type</span> |
| <span class="sd"> point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_REMOTE_OPEN</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_REMOTE_OPEN</span><span class="p">,</span> <span class="s2">"on_link_remote_open"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has opened the link. Events of this type</span> |
| <span class="sd"> point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_REMOTE_CLOSE</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_REMOTE_CLOSE</span><span class="p">,</span> <span class="s2">"on_link_remote_close"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has closed the link. Events of this type</span> |
| <span class="sd"> point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_REMOTE_DETACH</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_REMOTE_DETACH</span><span class="p">,</span> <span class="s2">"on_link_remote_detach"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The remote endpoint has detached the link. Events of this type</span> |
| <span class="sd"> point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_FLOW</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_FLOW</span><span class="p">,</span> <span class="s2">"on_link_flow"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The flow control state for a link has changed. Events of this</span> |
| <span class="sd"> type point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">LINK_FINAL</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_LINK_FINAL</span><span class="p">,</span> <span class="s2">"on_link_final"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The link has been freed and any outstanding processing has been</span> |
| <span class="sd"> completed. This is the final event that will ever be issued for a</span> |
| <span class="sd"> link. Events of this type point to the relevant link.</span> |
| <span class="sd"> """</span> |
| |
| |
| <span class="n">DELIVERY</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_DELIVERY</span><span class="p">,</span> <span class="s2">"on_delivery"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> A delivery has been created or updated. Events of this type point</span> |
| <span class="sd"> to the relevant delivery.</span> |
| <span class="sd"> """</span> |
| |
| |
| <span class="n">TRANSPORT</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_TRANSPORT</span><span class="p">,</span> <span class="s2">"on_transport"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The transport has new data to read and/or write. Events of this</span> |
| <span class="sd"> type point to the relevant transport.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">TRANSPORT_ERROR</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_TRANSPORT_ERROR</span><span class="p">,</span> <span class="s2">"on_transport_error"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Indicates that a transport error has occurred. Use :attr:`Transport.condition`</span> |
| <span class="sd"> to access the details of the error from the associated transport.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">TRANSPORT_HEAD_CLOSED</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_TRANSPORT_HEAD_CLOSED</span><span class="p">,</span> <span class="s2">"on_transport_head_closed"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Indicates that the "head" or writing end of the transport has been closed. This</span> |
| <span class="sd"> means the transport will never produce more bytes for output to</span> |
| <span class="sd"> the network. Events of this type point to the relevant transport.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">TRANSPORT_TAIL_CLOSED</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_TRANSPORT_TAIL_CLOSED</span><span class="p">,</span> <span class="s2">"on_transport_tail_closed"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Indicates that the "tail" of the transport has been closed. This</span> |
| <span class="sd"> means the transport will never be able to process more bytes from</span> |
| <span class="sd"> the network. Events of this type point to the relevant transport.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">TRANSPORT_CLOSED</span> <span class="o">=</span> <span class="n">_core</span><span class="p">(</span><span class="n">PN_TRANSPORT_CLOSED</span><span class="p">,</span> <span class="s2">"on_transport_closed"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Indicates that the both the "head" and "tail" of the transport are</span> |
| <span class="sd"> closed. Events of this type point to the relevant transport.</span> |
| <span class="sd"> """</span> |
| |
| |
| <span class="c1"># These events are now internal events in the python code</span> |
| <span class="n">REACTOR_INIT</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"reactor_init"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> A reactor has been started. Events of this type point to the</span> |
| <span class="sd"> reactor.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">REACTOR_QUIESCED</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"reactor_quiesced"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> A reactor has no more events to process. Events of this type</span> |
| <span class="sd"> point to the reactor.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">REACTOR_FINAL</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"reactor_final"</span><span class="p">)</span> |
| <span class="sd">"""</span> |
| <span class="sd"> A reactor has been stopped. Events of this type point to the</span> |
| <span class="sd"> reactor.</span> |
| <span class="sd"> """</span> |
| |
| <span class="n">SELECTABLE_INIT</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_init"</span><span class="p">)</span> |
| <span class="n">SELECTABLE_UPDATED</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_updated"</span><span class="p">)</span> |
| <span class="n">SELECTABLE_READABLE</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_readable"</span><span class="p">)</span> |
| <span class="n">SELECTABLE_WRITABLE</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_writable"</span><span class="p">)</span> |
| <span class="n">SELECTABLE_EXPIRED</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_expired"</span><span class="p">)</span> |
| <span class="n">SELECTABLE_ERROR</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_error"</span><span class="p">)</span> |
| <span class="n">SELECTABLE_FINAL</span> <span class="o">=</span> <span class="n">_internal</span><span class="p">(</span><span class="s2">"selectable_final"</span><span class="p">)</span> |
| |
| <span class="nd">@staticmethod</span> |
| <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">impl</span><span class="p">):</span> |
| <span class="k">if</span> <span class="n">impl</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |
| <span class="k">return</span> <span class="kc">None</span> |
| |
| <span class="n">number</span> <span class="o">=</span> <span class="n">pn_event_type</span><span class="p">(</span><span class="n">impl</span><span class="p">)</span> |
| <span class="bp">cls</span> <span class="o">=</span> <span class="n">pn_event_class</span><span class="p">(</span><span class="n">impl</span><span class="p">)</span> |
| |
| <span class="k">if</span> <span class="bp">cls</span><span class="p">:</span> |
| <span class="n">clsname</span> <span class="o">=</span> <span class="n">pn_class_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> |
| <span class="n">context</span> <span class="o">=</span> <span class="n">wrappers</span><span class="p">[</span><span class="n">clsname</span><span class="p">](</span><span class="n">pn_event_context</span><span class="p">(</span><span class="n">impl</span><span class="p">))</span> |
| |
| <span class="c1"># check for an application defined ApplicationEvent and return that. This</span> |
| <span class="c1"># avoids an expensive wrap operation invoked by event.context</span> |
| <span class="k">if</span> <span class="bp">cls</span> <span class="o">==</span> <span class="n">PN_PYREF</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">EventBase</span><span class="p">):</span> |
| <span class="k">return</span> <span class="n">context</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="n">clsname</span> <span class="o">=</span> <span class="kc">None</span> |
| |
| <span class="n">event</span> <span class="o">=</span> <span class="n">Event</span><span class="p">(</span><span class="n">impl</span><span class="p">,</span> <span class="n">number</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span> |
| <span class="k">return</span> <span class="n">event</span> |
| |
| <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">impl</span><span class="p">,</span> <span class="n">number</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="n">EventType</span><span class="o">.</span><span class="n">TYPES</span><span class="p">[</span><span class="n">number</span><span class="p">]</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_clsname</span> <span class="o">=</span> <span class="n">clsname</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_context</span> <span class="o">=</span> <span class="n">context</span> |
| |
| <span class="c1"># Do all this messing around to avoid duplicate wrappers</span> |
| <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">context</span><span class="p">),</span> <span class="n">Delivery</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_delivery</span> <span class="o">=</span> <span class="n">context</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_delivery</span> <span class="o">=</span> <span class="n">Delivery</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_event_delivery</span><span class="p">(</span><span class="n">impl</span><span class="p">))</span> |
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delivery</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_link</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delivery</span><span class="o">.</span><span class="n">link</span> |
| <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">context</span><span class="p">),</span> <span class="n">Link</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_link</span> <span class="o">=</span> <span class="n">context</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_link</span> <span class="o">=</span> <span class="n">Link</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_event_link</span><span class="p">(</span><span class="n">impl</span><span class="p">))</span> |
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_link</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_link</span><span class="o">.</span><span class="n">session</span> |
| <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">context</span><span class="p">),</span> <span class="n">Session</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_session</span> <span class="o">=</span> <span class="n">context</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_session</span> <span class="o">=</span> <span class="n">Session</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_event_session</span><span class="p">(</span><span class="n">impl</span><span class="p">))</span> |
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_session</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_connection</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_session</span><span class="o">.</span><span class="n">connection</span> |
| <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">context</span><span class="p">),</span> <span class="n">Connection</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_connection</span> <span class="o">=</span> <span class="n">context</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_connection</span> <span class="o">=</span> <span class="n">Connection</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_event_connection</span><span class="p">(</span><span class="n">impl</span><span class="p">))</span> |
| |
| <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">context</span><span class="p">),</span> <span class="n">Transport</span><span class="p">):</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_transport</span> <span class="o">=</span> <span class="n">context</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">_transport</span> <span class="o">=</span> <span class="n">Transport</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">pn_event_transport</span><span class="p">(</span><span class="n">impl</span><span class="p">))</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">clazz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The name of the class associated with the event context.</span> |
| |
| <span class="sd"> :type: ``str``</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_clsname</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The context object associated with the event.</span> |
| |
| <span class="sd"> :type: Depends on the type of event, and include the following:</span> |
| <span class="sd"> - :class:`Connection`</span> |
| <span class="sd"> - :class:`Session`</span> |
| <span class="sd"> - :class:`Link`</span> |
| <span class="sd"> - :class:`Delivery`</span> |
| <span class="sd"> - :class:`Transport`</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_context</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">handler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The handler for this event. The handler is determined by looking</span> |
| <span class="sd"> at the following in order:</span> |
| |
| <span class="sd"> - The link</span> |
| <span class="sd"> - The session</span> |
| <span class="sd"> - The connection</span> |
| <span class="sd"> - The context object with an attribute "handler"</span> |
| |
| <span class="sd"> If none of these has a handler, then ``None`` is returned.</span> |
| <span class="sd"> """</span> |
| <span class="n">l</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">link</span> |
| <span class="k">if</span> <span class="n">l</span><span class="p">:</span> |
| <span class="n">h</span> <span class="o">=</span> <span class="n">l</span><span class="o">.</span><span class="n">handler</span> |
| <span class="k">if</span> <span class="n">h</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">h</span> |
| <span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> |
| <span class="k">if</span> <span class="n">s</span><span class="p">:</span> |
| <span class="n">h</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">handler</span> |
| <span class="k">if</span> <span class="n">h</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">h</span> |
| <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span> |
| <span class="k">if</span> <span class="n">c</span><span class="p">:</span> |
| <span class="n">h</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">handler</span> |
| <span class="k">if</span> <span class="n">h</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">h</span> |
| <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span> |
| <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s1">'handler'</span><span class="p">):</span> |
| <span class="k">return</span> <span class="kc">None</span> |
| <span class="n">h</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">handler</span> |
| <span class="k">return</span> <span class="n">h</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">reactor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> **Deprecated** - The :class:`reactor.Container` (was reactor) associated with the event.</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">container</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The :class:`reactor.Container` associated with the event.</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_transport</span><span class="o">.</span><span class="n">_reactor</span> |
| |
| <span class="k">def</span> <span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> This will look for a property of the event as an attached context object of the same</span> |
| <span class="sd"> type as the property (but lowercase)</span> |
| <span class="sd"> """</span> |
| <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span> |
| <span class="c1"># Direct type or subclass of type</span> |
| <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">name</span> <span class="ow">or</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">type</span><span class="p">(</span><span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="vm">__bases__</span><span class="p">]:</span> |
| <span class="k">return</span> <span class="n">c</span> |
| |
| <span class="c1"># If the attached object is the wrong type then see if *it* has a property of that name</span> |
| <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">transport</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The transport associated with the event, or ``None`` if none</span> |
| <span class="sd"> is associated with it.</span> |
| |
| <span class="sd"> :type: :class:`Transport`</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_transport</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The connection associated with the event, or ``None`` if none</span> |
| <span class="sd"> is associated with it.</span> |
| |
| <span class="sd"> :type: :class:`Connection`</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connection</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">session</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The session associated with the event, or ``None`` if none</span> |
| <span class="sd"> is associated with it.</span> |
| |
| <span class="sd"> :type: :class:`Session`</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_session</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">link</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The link associated with the event, or ``None`` if none</span> |
| <span class="sd"> is associated with it.</span> |
| |
| <span class="sd"> :type: :class:`Link`</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_link</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">sender</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The sender link associated with the event, or ``None`` if</span> |
| <span class="sd"> none is associated with it. This is essentially an alias for</span> |
| <span class="sd"> link(), that does an additional check on the type of the</span> |
| <span class="sd"> link.</span> |
| |
| <span class="sd"> :type: :class:`Sender` (**<-- CHECK!**)</span> |
| <span class="sd"> """</span> |
| <span class="n">l</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">link</span> |
| <span class="k">if</span> <span class="n">l</span> <span class="ow">and</span> <span class="n">l</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">l</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="k">return</span> <span class="kc">None</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">receiver</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The receiver link associated with the event, or ``None`` if</span> |
| <span class="sd"> none is associated with it. This is essentially an alias for</span> |
| <span class="sd"> link(), that does an additional check on the type of the link.</span> |
| |
| <span class="sd"> :type: :class:`Receiver` (**<-- CHECK!**)</span> |
| <span class="sd"> """</span> |
| <span class="n">l</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">link</span> |
| <span class="k">if</span> <span class="n">l</span> <span class="ow">and</span> <span class="n">l</span><span class="o">.</span><span class="n">is_receiver</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">l</span> |
| <span class="k">else</span><span class="p">:</span> |
| <span class="k">return</span> <span class="kc">None</span> |
| |
| <span class="nd">@property</span> |
| <span class="k">def</span> <span class="nf">delivery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The delivery associated with the event, or ``None`` if none</span> |
| <span class="sd"> is associated with it.</span> |
| |
| <span class="sd"> :type: :class:`Delivery`</span> |
| <span class="sd"> """</span> |
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delivery</span></div> |
| |
| |
| <span class="k">class</span> <span class="nc">LazyHandlers</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> |
| <span class="k">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">clazz</span><span class="p">):</span> |
| <span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |
| <span class="k">return</span> <span class="bp">self</span> |
| <span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span> |
| <span class="n">obj</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s1">'handlers'</span><span class="p">]</span> <span class="o">=</span> <span class="n">ret</span> |
| <span class="k">return</span> <span class="n">ret</span> |
| |
| |
| <span class="k">class</span> <span class="nc">Handler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> An abstract handler for events which supports child handlers.</span> |
| <span class="sd"> """</span> |
| <span class="n">handlers</span> <span class="o">=</span> <span class="n">LazyHandlers</span><span class="p">()</span> |
| |
| <span class="c1"># TODO What to do with on_error?</span> |
| <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handler</span><span class="p">,</span> <span class="n">on_error</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> Add a child handler</span> |
| |
| <span class="sd"> :param handler: A child handler</span> |
| <span class="sd"> :type handler: :class:`Handler` or one of its derivatives.</span> |
| <span class="sd"> :param on_error: Not used</span> |
| <span class="sd"> """</span> |
| <span class="bp">self</span><span class="o">.</span><span class="n">handlers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">handler</span><span class="p">)</span> |
| |
| <span class="k">def</span> <span class="nf">on_unhandled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> |
| <span class="sd">"""</span> |
| <span class="sd"> The callback for handling events which are not handled by</span> |
| <span class="sd"> any other handler.</span> |
| |
| <span class="sd"> :param method: The name of the intended handler method.</span> |
| <span class="sd"> :type method: ``str``</span> |
| <span class="sd"> :param args: Arguments for the intended handler method.</span> |
| <span class="sd"> """</span> |
| <span class="k">pass</span> |
| </pre></div> |
| |
| <div class="clearer"></div> |
| </div> |
| </div> |
| </div> |
| <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> |
| <div class="sphinxsidebarwrapper"> |
| <div id="searchbox" style="display: none" role="search"> |
| <h3 id="searchlabel">Quick search</h3> |
| <div class="searchformwrapper"> |
| <form class="search" action="../../search.html" method="get"> |
| <input type="text" name="q" aria-labelledby="searchlabel" /> |
| <input type="submit" value="Go" /> |
| </form> |
| </div> |
| </div> |
| <script>$('#searchbox').show(0);</script> |
| </div> |
| </div> |
| <div class="clearer"></div> |
| </div> |
| <div class="related" role="navigation" aria-label="related navigation"> |
| <h3>Navigation</h3> |
| <ul> |
| <li class="right" style="margin-right: 10px"> |
| <a href="../../genindex.html" title="General Index" |
| >index</a></li> |
| <li class="nav-item nav-item-0"><a href="../../index.html">Qpid Proton Python API 0.32.0 documentation</a> »</li> |
| <li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li> |
| <li class="nav-item nav-item-this"><a href="">proton._events</a></li> |
| </ul> |
| </div> |
| <div class="footer" role="contentinfo"> |
| © Copyright 2019, Apache Qpid Contributors. |
| Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1. |
| </div> |
| </body> |
| </html> |