==============
on_ext_request
==============

on_ext_request(task, request, params)

**domain**: server

**language**: python

**class** :doc:`Task class </refs/server/task_api>`

Description
===========

Use ``on_ext_request`` to send a request to the server for processing.

The ``task`` parameter is a reference to the 
:doc:`task tree </programming/task_tree>`
The ``request`` is a string that must starts with '/ext'
There could be a list of parameters.

Example
=======

The following application will send every 60 seconds a request to the server of Demo 
application

.. code-block:: py

    #!/usr/bin/env python
    
    try:
        # For Python 3.0 and later
        from urllib.request import urlopen
    except ImportError:
        # Fall back to Python 2's urllib2
        from urllib2 import urlopen
    import json
    import time
    
    def send(url, request, params):
        a = urlopen(url + '/' + request, data=str.encode(json.dumps(params)))
        r = json.loads(a.read().decode())
        return r['result']['data']
    
    if __name__ == '__main__':
        url = 'http://127.0.0.1:8080/ext'
        while True:
            result = send(url, 'get_sum', [1, 2, 3])
            print(result)
            time.sleep(60)


The server will process this request and return the sum of parameters. The 
``on_ext_request`` must be declared in task server module:

.. code-block:: py

    def on_ext_request(task, request, params):
        #print request, params
        reqs = request.split('/')
        if reqs[2] == 'get_sum':
            return params[0] + params[1] + params[2] 

