{ "info": { "author": "1533 Systems", "author_email": "info@1533.io", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Driveline Python SDK\n\n\nAt the core of the Python SDK is the class `DrivelineClient`.\n\n```python\nimport asyncio\n\nfrom driveline import DrivelineClient, run_async\n\nasync def main():\n async with DrivelineClient('ws://127.0.0.1:8080') as client:\n\n # list all streams\n async for stream_name in await client.list_streams('*'):\n print('found stream:', stream_name)\n\n # list all keys is the document store\n async for key_name in await client.list_keys('*'):\n print('found document with key', key_name)\n\n\n # store a document in the document store\n await client.store('key/1', dict(title='Welcome', body='Hello, world!'))\n\n # load a key from the document store\n future_record = await client.load('key/1')\n record = await future_record\n print('document associated with key/1 is:', record.record, 'id:', record.record_id)\n\n # remove all records in the document store with keys matching 'key/...'\n await client.removeMatches('key/*')\n\n # run a live query against a stream. \n # We want all records that have an odd index\n def query_handler(res):\n print('query returned record:', res.record, 'id:', res.record_id)\n query = await client.continuous_query('SELECT * FROM STREAM my_stream where index % 1 == 1', query_handler)\n\n\n # stop the query\n await asyncio.sleep(10)\n await client.cancel(query)\n\n # quit\n await client.close()\n\nif __name__ == '__main__':\n run_async(main())\n```\n\n\n# DQL Driveline Query Language\n\n## Query syntax\n\n### Basic syntax\n\n```sql\nSELECT FROM STREAM [WHERE ]\nSELECT * FROM STREAM stream_1\nSELECT * FROM STREAM stream_1 WHERE key=value\nSELECT time AS t,(2+3) AS five FROM STREAM stream_1 WHERE age BETWEEN 21 AND 25 OR name LIKE 'Joe%'\n```\n\n`DQL` supports standard `SQL` query syntax, excluding Joins and\nAggregates. This means `DQL` can be used for all forms of data filtering\nand partitioning of data over live streams.\n\n### KV query\n\n```sql\nSELECT FROM [WHERE ]\nSELECT * FROM 'users/*' WHERE color='red'\n```\n\nMulti key query is a `DQL` extension that lets you subscribe to multiple\nevent streams, automatically subscribing to new streams as they form,\nbased on the stream name expression. Stream name expression use file-system/Pythong `Glob`,\nwith `?`, `*` and `**` serving as the wildcard match characters.\n\n### ECMAScript Object Notation (JavaScript extensions)\n\n```sql\nSELECT {time,name:user.name,phone_number:user.phone.mobile.number,original:{...*}} FROM stream\n```\n\nWith inputs of the form:\n\n```javascript\n{time:123, user: {name:'joe', phone: {mobile: {number:'1-800-123-4567'}}}}\n```\n\nResults in:\n\n```javascript\n{time:123,name:'joe',phone_number:'1-800-123-4567',original:{time:123,user:phone:{...}}}\n```\n\n## Operators\n\nThe following table summarizes all language operators in order of\nprecedence\n\n| Name | Description | Example | Additional details |\n|:------------------------------------------|:--------------------|:------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------|\n| `OR` | extended logical OR | `SELECT * FROM STREAM stream WHERE a OR b` | `if (a) return a; else return b;` |\n| `AND` | logical AND | `SELECT * FROM STREAM stream WHERE a AND b` | `if (a && b) return true; else return false;` |\n| `NOT` | logical NOT | `SELECT * FROM STREAM stream WHERE NOT a` | `if (a) return false; else return true;` |\n| `IS [NOT] NULL` | Null check | `SELECT * FROM STREAM stream WHERE a IS NOT NULL` | `if (null===a) return true; return false;` |\n| `IN` | Set lookup | `SELECT * FROM STREAM stream WHERE a IN (1,2,3)` | All values in paranthesis must be constants |\n| `BETWEEN` | Compare range | `SELECT * FROM STREAM stream WHERE a BETWEEN b AND c` | `if (b=b && a<=c); else return (a>=c && a<=b);` |\n| `=` `>=` `<=` `!=` `>` `<` `!<` `!>` `<>` | Compare | `SELECT * FROM STREAM STREAM WHERE a <> b` | |\n| `LIKE` | Pattern match | `SELECT * FROM STREAM stream WHERE a like '%b%'` | `_` stands for single, `%` stands for multi-char match |\n| `+` `-` | Unary plus/minus | `SELECT * FROM STREAM stream WHERE -5 < +5` | |\n| `+` `-` | Addition | `SELECT * FROM STREAM stream WHERE 1+2=3` | |\n| `*` `/` `%` | Multiplicative | `SELECT * FROM STREAM stream WHERE 3%2=1` | |\n| `( exp )` | Paranthesis | `SELECT * FROM STREAM stream WHERE (1+2)*3=9` | |\n| `true` `false` `null` | Constant | `SELECT * FROM STREAM stream WHERE true != false` | |\n| `-123.45e-1` | Numeric constant | | |\n| `'hello'` | String constant | | `SELECT * FROM stream WHERE name='joe'` |\n| `name` | Identifier | `SELECT name FROM STREAM stream` | |\n| `` `user name` `` | Identifier | ``SELECT `user name` FROM STREAM stream`` | (backticks) Allows using identifier names that are otherwise invalid, e.g., contain invalid characters or symbols |\n\n\n## Built-in functions\n\n| Name | Description | Example |\n|:------------|:----------------------------------------------------|:--------------------------------------------------------------------|\n| ABS | Absolute value `float=>float` | `SELECT ABS(-5) AS num FROM stream` `{num:5}` |\n| CEIL | Rounded up value `float=>float` | `SELECT CEIL(4.5) AS num FROM stream` `{num:5}` |\n| FLOOR | Rounded down value `float=>float` | `SELECT FLOOR(4.5) AS num FROM stream` `{num:4}` |\n| EXP | Natural exponent `float=>float` | `SELECT EXP(1) AS num FROM stream` `{num:2.718281828459045}` |\n| LN | Natural logarithm `float=>float` | `SELECT LN(2) AS num FROM stream` `{num:0.6931471805599453}` |\n| SQRT | Square root `float=>float` | `SELECT SQRT(9) AS num FROM stream` `{num:3}` |\n| HASH | Hash function `any=>uint64` | `SELECT HASH('abc') AS num FROM stream` `{num:4952883123889572249}` |\n| CHAR_LENGTH | Length of string `string->int32` | `SELECT CHAR_LENGTH('abc') AS num FROM stream` `{num:3}` |\n| POSITION | Index of substring in string `string,string->int32` | `SELECT POSITION('bc' IN 'abc') AS num FROM stream` `{num:2}` |\n| LOCATE | Index of substring in string `string,string->int32` | `SELECT LOCATE('bc', 'abc') AS num FROM stream` `{num:2}` |\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/1533-systems/python3-sdk", "keywords": "driveline performance database streaming document", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "driveline", "package_url": "https://pypi.org/project/driveline/", "platform": "", "project_url": "https://pypi.org/project/driveline/", "project_urls": { "Homepage": "https://github.com/1533-systems/python3-sdk" }, "release_url": "https://pypi.org/project/driveline/0.14.1/", "requires_dist": [ "websockets (~=7.0)", "cbor (~=1.0)" ], "requires_python": ">=3.6.0", "summary": "Driveline client", "version": "0.14.1" }, "last_serial": 4916885, "releases": { "0.14.0": [ { "comment_text": "", "digests": { "md5": "823a86758dbaf4390b6dc5471396fbab", "sha256": "a74c410f9f06231dfd5bf0a55de2fcbbc0740f44fb6798fa015cb50f6495fc46" }, "downloads": -1, "filename": "driveline-0.14.0-py3-none-any.whl", "has_sig": false, "md5_digest": "823a86758dbaf4390b6dc5471396fbab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 17267, "upload_time": "2019-02-20T21:38:32", "url": "https://files.pythonhosted.org/packages/29/4a/4e12cfa29df11118848d64034ed6967adf63d0e08c974d85b9e199df013c/driveline-0.14.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b948ce5d4724a9f87e21506dd54f72b5", "sha256": "9d3124a0567e922f6ded9ad6b103e12e8a434d7665e06e5777d4525022dc669b" }, "downloads": -1, "filename": "driveline-0.14.0.tar.gz", "has_sig": false, "md5_digest": "b948ce5d4724a9f87e21506dd54f72b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 14387, "upload_time": "2019-02-20T21:38:34", "url": "https://files.pythonhosted.org/packages/d1/a4/bfef861fd76ff3ffb14e1560aec53a4abda3d6071fbb785bb4446c8c0741/driveline-0.14.0.tar.gz" } ], "0.14.1": [ { "comment_text": "", "digests": { "md5": "4a511b0fa79e9d42e77d22626ce97d02", "sha256": "9da94b6b67147532b2dc015313aec4a759f90a734e95e0e1bcd38afffb21dc45" }, "downloads": -1, "filename": "driveline-0.14.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4a511b0fa79e9d42e77d22626ce97d02", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 17282, "upload_time": "2019-03-08T20:00:31", "url": "https://files.pythonhosted.org/packages/1a/10/02743ff8394b384c999d22e08558320452bb6477a2b998775920ade580b3/driveline-0.14.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d8efb567caac3b8b8c6a70e64854dcb4", "sha256": "dba906743f7971e7d00d90a1cfbe51edf9261a11b09286f63ed0d093b5164bdf" }, "downloads": -1, "filename": "driveline-0.14.1.tar.gz", "has_sig": false, "md5_digest": "d8efb567caac3b8b8c6a70e64854dcb4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 14427, "upload_time": "2019-03-08T20:00:32", "url": "https://files.pythonhosted.org/packages/17/be/0b0a142707cc1479050267bb3bc74b03b28269fb83d3d44a07c81244dfee/driveline-0.14.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4a511b0fa79e9d42e77d22626ce97d02", "sha256": "9da94b6b67147532b2dc015313aec4a759f90a734e95e0e1bcd38afffb21dc45" }, "downloads": -1, "filename": "driveline-0.14.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4a511b0fa79e9d42e77d22626ce97d02", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 17282, "upload_time": "2019-03-08T20:00:31", "url": "https://files.pythonhosted.org/packages/1a/10/02743ff8394b384c999d22e08558320452bb6477a2b998775920ade580b3/driveline-0.14.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d8efb567caac3b8b8c6a70e64854dcb4", "sha256": "dba906743f7971e7d00d90a1cfbe51edf9261a11b09286f63ed0d093b5164bdf" }, "downloads": -1, "filename": "driveline-0.14.1.tar.gz", "has_sig": false, "md5_digest": "d8efb567caac3b8b8c6a70e64854dcb4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 14427, "upload_time": "2019-03-08T20:00:32", "url": "https://files.pythonhosted.org/packages/17/be/0b0a142707cc1479050267bb3bc74b03b28269fb83d3d44a07c81244dfee/driveline-0.14.1.tar.gz" } ] }