Skip to main content

Python command line tool to run YQL queries and generates YQL Tables

Project description

MYQL-CLI
~~~~~~~~

`|Build Status| <https://travis-ci.org/josuebrunel/myql-cli>`_
`|Documentation Status| <https://myql-cli.readthedocs.org/>`_

***MYQL-cli*** is a command line tool to run YQL queries or to generate
YQL OpenTable.

Installation
^^^^^^^^^^^^

::

$ pip install myql-cli # Not available yet

How To
^^^^^^

::

usage: YQL-cli tools [-h] [-v] {init-config,execute,shell,table} ...

positional arguments:
{init-config,execute,shell,table}
commands
init-config Init a config file .myql-cli.ini in your home
directory
execute Executes a YQL query
shell Prompts a YQL shell command
table Creates a YQL table

optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit

Config File
'''''''''''

***myql-cli*** config file is located in ***~/.myql-cli.ini***.

::

$ ./myql-cli.py init-config

::

[DEFAULT]
format = json # Default format
oauth = False # OAuth enabled

[json]
diagnostics = False
debug = False
jsoncompact = False

[xml]
diagnostics = False
debug = False

[auth]
from_file = None # Path to your credentials json file

**NB**: Your ***credentials*** file must at least have

::

{
"consumer_key":"your consumenr key",
"consumer_secret": "your consumer secret"
}

Query Tool
''''''''''

::

$ myql-cli execute -h
usage: YQL-cli tools execute [-h] [--format {json,xml}] [--pretty]
[--jsonCompact] [--diagnostics] [--debug]
execute

positional arguments:
execute Execute a YQL query

optional arguments:
-h, --help show this help message and exit
--format {json,xml} Response returned format
--jsonCompact Json response compacted
--diagnostics Response with diagnostics
--debug Response with diagnostics

- ***json***

``shell $ myql-cli execute --format json "select * from geo.countries where name='Congo'"``
``json { "query": { "count": 1, "lang": "en-US", "results": { "place": { "lang": "en-US", "woeid": "23424779", "uri": "http://where.yahooapis.com/v1/place/23424779", "name": "Congo", "placeTypeName": { "content": "Country", "code": "12" } } }, "created": "2015-04-07T12:37:13Z" } }``

- ***xml***

``shell $ myql-cli execute --format xml "select * from geo.countries where name='Congo'"``
``xml <?xml version="1.0" ?> <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2015-04-07T12:36:44Z" yahoo:lang="en-US"> <results> <place xml:lang="en-US" xmlns="http://where.yahooapis.com/v1/schema.rng" yahoo:uri="http://where.yahooapis.com/v1/place/23424779"> <woeid>23424779</woeid> <placeTypeName code="12">Country</placeTypeName> <name>Congo</name> </place> </results> </query> <!-- total: 113 --> <!-- pprd1-node1021-lh2.manhattan.bf1.yahoo.com -->``

- ***xml + diagnostics***

``shell $ myql-cli execute --format xml --diagnostics "select * from geo.countries where name='Congo'"``
``xml <?xml version="1.0" ?> <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2015-04-07T12:38:43Z" yahoo:lang="en-US"> <diagnostics> <publiclyCallable>true</publiclyCallable> <url execution-start-time="2" execution-stop-time="71" execution-time="69"> <![CDATA[http://wws.geotech.yahooapis.com/v1/countries;start=0;count=1000]]> </url> <user-time>74</user-time> <service-time>69</service-time> <build-version>0.2.75</build-version> </diagnostics> <results> <place xml:lang="en-US" xmlns="http://where.yahooapis.com/v1/schema.rng" yahoo:uri="http://where.yahooapis.com/v1/place/23424779"> <woeid>23424779</woeid> <placeTypeName code="12">Country</placeTypeName> <name>Congo</name> </place> </results> </query> <!-- total: 74 --> <!-- pprd1-node1016-lh3.manhattan.bf1.yahoo.com -->``

- ***json + diagnostics + debug***

``shell $ myql-cli execute --format json --diagnostices --debug "select * from geo.countries where name='Congo'"``
``json { "query": { "count": 1, "lang": "en-US", "diagnostics": { "url": [ { "content": "http://sherpa-bcp5903.dht.yahoo.com:4080/YDHTWebService/V1/get/yql.global/store%3A%2F%2Fdatatables.org%2Falltableswithkeys", "execution-stop-time": "5", "execution-start-time": "1", "execution-time": "4", "id": "3a511b18-0e52-405d-b804-803933d620eb" }, { "content": "http://sherpa-bcp5903.dht.yahoo.com:4080/YDHTWebService/V1/get/yql.global/store%3A%2F%2FRjdEzitN2Hceujh3tGHPj6", "execution-stop-time": "17", "execution-start-time": "7", "execution-time": "10", "id": "ddd7fc5d-b63d-4988-9437-fb678f781e46" }, { "content": "http://sherpa-bcp5903.dht.yahoo.com:4080/YDHTWebService/V1/get/yql.global/store%3A%2F%2FRjdEzitN2Hceujh3tGHPj6", "execution-stop-time": "53", "execution-start-time": "42", "execution-time": "11", "id": "43b945b6-b92a-4e74-a58c-9a7b597a8045" }, { "content": "http://wws.geotech.yahooapis.com/v1/countries;start=0;count=1000", "execution-stop-time": "156", "execution-start-time": "79", "execution-time": "77" } ], "user-time": "160", "build-version": "0.2.75", "service-time": "102", "publiclyCallable": "true" }, "results": { "place": { "lang": "en-US", "woeid": "23424779", "uri": "http://where.yahooapis.com/v1/place/23424779", "name": "Congo", "placeTypeName": { "content": "Country", "code": "12" } } }, "created": "2015-04-07T12:39:47Z" } }``

YQL Shell
'''''''''

::

$ myql-cli shell -h

::

$ myql-cli shell
yql>

Table Manager
'''''''''''''

::

$ myql-cli table -h
usage: YQL-cli tools table [-h] [-i] [-c] table

positional arguments:
table Create a YQL Table from python file

optional arguments:
-h, --help show this help message and exit
-i, --init Creates a project with a tables.py file in it
-c, --create Creates tables in the tables.py file of your project

- Initialize the table project

::

$ myql-cli table -i lol
$ ls -l lol
__init__.py tables.py

- Define your table

::

$ vim lol/tables.py

::

from myql.contrib.table import BinderModel, BinderKey, BinderPage, TableModel, BinderFrom

class SelectBinder(BinderModel):
name = 'select'
itemPath = 'products.product'
produces = 'xml'
pollingFrequencySeconds = 30
urls = ['http://lol.com/services?artist={artist}','http://lol.com/services/song={song}']
paging = BinderPage('page', {'id': 'ItemPage', 'default': '1'}, {'id':'Count' ,'max':'25'},{'default': '10'})
artist = BinderKey(id='artist', type='xs:string', paramType='path')
song = BinderKey(id='song', type='xs:string', paramType='path', required='true')


class TestTable(TableModel):
name = 'Test'
author = 'Josue Kouka'
apiKeyURL = 'http://josuebrunel.org/api'
documentationURL = 'http://josuebrunel.org/doc.html'
sampleQuery = ['SELECT * FROM mytable']
select = BinderFrom(SelectBinder)

- Generate your table in XML

::

$ myql-cli table --create lol
$ ls lol
Test.xml __init__.py __init__.pyc tables.py tables.pyc

::

$ cat lol/Test.xml

::

<?xml version="1.0" ?>
<table https="false" securityLevel="any" xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
<meta>
<author>Josue Kouka</author>
<apiKeyURL>http://josuebrunel.org/api</apiKeyURL>
<documentationURL>http://josuebrunel.org/doc.html</documentationURL>
<description/>
<sampleQuery>SELECT * FROM mytable</sampleQuery>
</meta>
<bindings>
<select itemPath="products.product" pollingFrequencySeconds="30" produces="xml">
<urls>
<url>http://lol.com/services?artist={artist}</url>
<url>http://lol.com/services/song={song}</url>
</urls>
<inputs>
<key id="song" paramType="path" required="true" type="xs:string"/>
<key id="artist" paramType="path" required="false" type="xs:string"/>
</inputs>
<paging model="page">
<start default="1" id="ItemPage"/>
<total default="10"/>
<pageSize id="Count" max="25"/>
</paging>
</select>
</bindings>
</table>

Voila

.. |Build Status| image:: https://travis-ci.org/josuebrunel/myql-cli.svg
.. |Documentation
Status| image:: https://readthedocs.org/projects/myql-cli/badge/?version=latest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

myql-cli-0.2.3.tar.gz (7.1 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page