I’m learning Django 1.7 lately and nothing better than practice and create something from scratch. I have a bunch of scripts to tests webservices(XML, soap, etc.) in python using requests library, it works well so far. It returns the time it spent running, the result in an XML format and based on these data I make decisions(send email, feed it to a monitoring tool, etc.). When it’s 1 or 2 scripts is easy to admin and make changes like the XML request, headers and so on. And finally I found some time to focus more on Django and setup a web interface to do these tasks.
I’m using boostrap, Django 1.7 and Python 2.7. Think this as a simple SoapUI
on web.
The main idea is to put all these objects(headers, URLs, arguments, XML requests) inside a task and run it. Below a image to you get the idea:
The repository is on github: https://github.com/bicofino/Pyramboia
Lets install the application and run a simple task. Keep in mind that I’m using Ubuntu and sqlite as the database.
Install virtualenv and clone the repository
vagrant@zato-vagrant:~$ virtualenv ~/.envs/Pyramboia
New python executable in /home/vagrant/.envs/Pyramboia/bin/python
Installing setuptools, pip...done.
vagrant@zato-vagrant:~$ source ~/.envs/Pyramboia/bin/activate
(Pyramboia)vagrant@zato-vagrant:~$
(Pyramboia)vagrant@zato-vagrant:~$ git clone https://github.com/bicofino/Pyramboia.git
Cloning into 'Pyramboia'...
remote: Counting objects: 143, done.
remote: Compressing objects: 100% (17/17), done.
Receiving objects: 100% (143/143), 828.32 KiB | 350.00 KiB/s, done.
remote: Total 143 (delta 6), reused 0 (delta 0)
Resolving deltas: 100% (38/38), done.
Checking connectivity... done.
Install Pyramboia requirements
(Pyramboia)vagrant@zato-vagrant:~/Pyramboia/pyramboia$ ls
manage.py pyramboia static tasks
(Pyramboia)vagrant@zato-vagrant:~/Pyramboia$ ls
CHANGELOG LICENSE.txt README.md docs pyramboia requirements
Before you start, install the packages below you are going need for lxml:
sudo apt-get install -y libxml2-dev libxslt-dev python-dev lib32z1-dev
Next step install Pyramboia requirements
(Pyramboia)vagrant@zato-vagrant:~/Pyramboia$ pip install -r requirements/base.txt
Downloading/unpacking Django==1.7 (from -r requirements/base.txt (line 1))
Downloading Django-1.7-py2.py3-none-any.whl (7.4MB): 7.4MB downloaded
Requirement already satisfied (use --upgrade to upgrade): argparse==1.2.1 in /usr/lib/python2.7 (from -r requirements/base.txt (line 2))
Downloading/unpacking certifi==14.05.14 (from -r requirements/base.txt (line 3))
Downloading certifi-14.05.14.tar.gz (168kB): 168kB downloaded
Running setup.py (path:/home/vagrant/.envs/Pyramboia/build/certifi/setup.py) egg_info for package certifi
Downloading/unpacking django-crispy-forms==1.4.0 (from -r requirements/base.txt (line 4))
Downloading django-crispy-forms-1.4.0.tar.gz (47kB): 47kB downloaded
Running setup.py (path:/home/vagrant/.envs/Pyramboia/build/django-crispy-forms/setup.py) egg_info for package django-crispy-forms
warning: no files found matching '*' under directory 'crispy_forms/static'
Downloading/unpacking django-json-rpc==0.6.1 (from -r requirements/base.txt (line 5))
Downloading django-json-rpc-0.6.1.tar.gz (101kB): 101kB downloaded
Running setup.py (path:/home/vagrant/.envs/Pyramboia/build/django-json-rpc/setup.py) egg_info for package django-json-rpc
Downloading/unpacking django-tables2==0.15.0 (from -r requirements/base.txt (line 6))
Downloading django-tables2-0.15.0.tar.gz (43kB): 43kB downloaded
Running setup.py (path:/home/vagrant/.envs/Pyramboia/build/django-tables2/setup.py) egg_info for package django-tables2
Downloading/unpacking lxml==3.3.6 (from -r requirements/base.txt (line 7))
Downloading lxml-3.3.6.tar.gz (3.5MB): 3.5MB downloaded
Running setup.py (path:/home/vagrant/.envs/Pyramboia/build/lxml/setup.py) egg_info for package lxml
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
warnings.warn(msg)
Building lxml version 3.3.6.
Building without Cython.
Using build configuration of libxslt 1.1.28
warning: no previously-included files found matching '*.py'
Downloading/unpacking requests==2.4.0 (from -r requirements/base.txt (line 8))
Downloading requests-2.4.0-py2.py3-none-any.whl (457kB): 457kB downloaded
Downloading/unpacking six==1.7.3 (from -r requirements/base.txt (line 9))
Downloading six-1.7.3-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): wsgiref==0.1.2 in /usr/lib/python2.7 (from -r requirements/base.txt (line 10))
Installing collected packages: Django, certifi, django-crispy-forms, django-json-rpc, django-tables2, lxml, requests, six
Running setup.py install for certifi
Running setup.py install for django-crispy-forms
warning: no files found matching '*' under directory 'crispy_forms/static'
Running setup.py install for django-json-rpc
Running setup.py install for django-tables2
Running setup.py install for lxml
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
warnings.warn(msg)
Building lxml version 3.3.6.
Building without Cython.
Using build configuration of libxslt 1.1.28
building 'lxml.etree' extension
x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/home/vagrant/.envs/Pyramboia/build/lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -lxslt -lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/etree.so
building 'lxml.objectify' extension
x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/home/vagrant/.envs/Pyramboia/build/lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.objectify.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.objectify.o -w
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.objectify.o -lxslt -lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/objectify.so
Successfully installed Django certifi django-crispy-forms django-json-rpc django-tables2 lxml requests six
Cleaning up...
Run migrate command
(Pyramboia)vagrant@zato-vagrant:~/Pyramboia/pyramboia$ python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: django_tables2, crispy_forms
Apply all migrations: admin, contenttypes, tasks, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
Applying tasks.0001_initial... OK
Applying tasks.0002_auto_20140902_2214... OK
Applying tasks.0003_auto_20140905_1806... OK
(Pyramboia)vagrant@zato-vagrant:~/Pyramboia/pyramboia$ ls
manage.py pyramboia static tasks
Run the application
(Pyramboia)vagrant@zato-vagrant:~/Pyramboia/pyramboia$ ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
September 29, 2014 - 14:43:51
Django version 1.7, using settings 'pyramboia.settings.local'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
First page
Create a new project
First we need to create a new project since all tasks are attached to a Project
Add the target(URL)
We are going use this webservice http://wsf.cdyne.com/WeatherWS/Weather.asmx to get information about the weather.
Configure the headers
Our SOAPAction
http://ws.cdyne.com/WeatherWS/GetCityForecastByZIP
Create the task
Finally lets create the task and run it:
Our XML request:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetCityForecastByZIP xmlns="http://ws.cdyne.com/WeatherWS/">
<ZIP>33101</ZIP>
</GetCityForecastByZIP>
</soap:Body>
</soap:Envelope>
The application is easy and really simple. I plan to add new features in the future and I hope you find it you useful. If you have any question or feedback, feel free to comment or send an issue over github.