{ "info": { "author": "DevCartel", "author_email": "support@devcartel.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Build Tools" ], "description": "# PyFLX\n[![version](https://img.shields.io/pypi/v/pyflx.svg)](https://pypi.org/project/pyflx)\n[![pyversion](https://img.shields.io/pypi/pyversions/pyflx.svg)](#)\n[![platform](https://img.shields.io/badge/platform-linux|%20win-lightgray.svg)](#platform-availability)\n[![license](https://img.shields.io/pypi/l/pyflx.svg)](https://github.com/devcartel/pyflx/blob/master/LICENSE.txt)\n[![downloads](https://img.shields.io/pypi/dm/pyflx.svg)](https://pypi.org/project/pyflx)\n\nProvides Python market data API access to FlexTrade SYM. PyFLX has two market data Python classes - **Symlistener** (client) for consuming market data from FlexTrade market data server and **Symproxy** (publisher or feeder) for publising custom tick data to FlexTrade market data server.\n\n## Installation\nInstall from [PyPI](https://pypi.org/project/pyflx) using `pip`:\n\n pip install pyflx\n\n## Example\n```python\nimport pyflx\nimport time\n\ndef onData(symbol, data={}):\n print(\"[onData] symbol:{}, data:{}\".format(symbol, data))\n\nsl = pyflx.Symlistener()\nsl.onData(onData)\nwhile True:\n try:\n if sl.connect('192.168.1.123', 7600):\n sl.subscribe('XAU/USD')\n sl.loop()\n time.sleep(5)\n except KeyboardInterrupt:\n exit(0)\n except Exception as e:\n print(e)\n```\n\nSee `symlistener.py` and `symproxy.py` for example codes.\n\n## API\n### Symlistener Class\n__pyflx.Symlistener()__ \nCreate an instance of Symlistener client.\n\n >> sl = pyflx.Symlistener()\n\n__Symlistener.connect(_ip_address_, _port_)__ \n_ip_address: str_ \n_port: int_ \n_\u27a5return: bool_ \nConnect to a SYM server on a specified port number. Return `true` if successful or `false` if not able to connect to the server.\n\n >> sl.connect('192.168.1.123', 7600)\n\n__Symlistener.subscribe(_symbol_)__ \n_symbol: str_ \nSubscribe to market data of the symbol.\n\n >> sl.subscribe('XAU/USD')\n\n__Symlistener.subscribeAll()__ \nSubscribe to market data of all symbols.\n\n >> sl.subscribeAll()\n\n__Symlistener.unsubscribe(_symbol_)__ \n_symbol: str_ \nUnsubscribe to market data of the symbol.\n\n >> sl.unsubscribe('XAU/USD')\n\n__Symlistener.subscribeAll()__ \nUnsubscribe to market data of all symbols.\n\n >> sl.unsubscribeAll()\n\n__Symlistener.loop()__ \nEnter an event loop and listens for callbacks .\n\n >> sl.loop()\n\n__Symlistener.onData(_symbol_, _data_)__ \n_symbol: str_ \n_data: dict_ \nA callback `onData`, if assigned, is called upon receiving messages from SYM server.\n\n >> def onData(symbol, data):\n >> print(\"[onData] symbol:{}, data:{}\".format(symbol, data))\n >>\n >> sl = pyflx.Symlistener()\n >> sl.onData(onData)\n\n### Symproxy Class\n__pyflx.Symproxy()__ \nCreate an instance of Symproxy server.\n\n >> sp = pyflx.Symproxy()\n\n__Symproxy.initialize(_port_)__ \n_port: int_ \nListens to an incoming connection request on a port.\n\n >> sp.initialize(7600)\n\n__Symproxy.getFd()__ \n_\u27a5return: int_ \nReturns either client or a binding socket.\n\n >> sp.getFd()\n\n__Symproxy.select()__ \n_\u27a5return: int_ \nLooks for events on a socket.\n\n >> sp.select()\n\n__Symproxy.checkSocket()__ \nProcess checks requests and callbacks will be triggered.\n\n >> sp.checkSocket()\n\n__Symproxy.publish(_symbol_, _data_)__ \n_symbol: str_ \n_data: dict_ \nPublishes market data tick update to a SYM server.\n\n >> sp.publish('XAU/USD', {0:1420, 1:1421.5, 512:1000, 513:2000, 1032:'USD', 1541:'U'})\n\n__Symproxy.onLogon(_username_, _password_)__ \n_username: str_ \n_password: str_ \nA callback `onLogon`, if assigned, is called upon receiving a logon message from a client.\n\n >> def onLogon(username, password):\n >> print(\"[onLogon] username:{}, password:{}\".format(username, password))\n >>\n >> sp = pyflx.Symproxy()\n >> sp.initialize(7600)\n >> sp.onLogon(onLogon)\n >> sp.onSubscribe(onSubscribe)\n >> sp.onUnsubscribe(onUnsubscribe)\n\n__Symproxy.onSubscribe(_symbol_)__ \n_symbol: str_ \nA callback `onSubscribe`, if assigned, is called upon receiving a symbol subscription message from a client.\n\n__Symproxy.onUnsubscribe(_username_, _password_)__ \n_symbol: str_ \nA callback `onUnsubscribe`, if assigned, is called upon receiving a symbol unsubscription message from a client.\n\n## Support\n* Report an issue in [issue tracker](https://github.com/devcartel/pyflx/issues)\n\n## Changelog\n1.2.0\n* 7 August 2019\n* Support for Python 2.7\n* Symlistener class\n* Symproxy class\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/devcartel/pyflx", "keywords": "flextrade application sym symproxy api market data feed", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyflx", "package_url": "https://pypi.org/project/pyflx/", "platform": "", "project_url": "https://pypi.org/project/pyflx/", "project_urls": { "Homepage": "https://github.com/devcartel/pyflx" }, "release_url": "https://pypi.org/project/pyflx/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "Provides Python market data API access to FlexTrade SYM", "version": "1.2.0" }, "last_serial": 5639349, "releases": { "1.2.0": [ { "comment_text": "", "digests": { "md5": "4c7e736fd747c56df443932ed17436bb", "sha256": "c6b253e3a419407d2589489568e202e3e8451529fabd59584b3cf047f5f5e44d" }, "downloads": -1, "filename": "pyflx-1.2.0-cp27-none-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "4c7e736fd747c56df443932ed17436bb", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 2190030, "upload_time": "2019-08-06T12:20:44", "url": "https://files.pythonhosted.org/packages/01/42/d99e2ffbac30e4a9daaaf0fb20f37ffebc8d168ac6f100dc1645424ec415/pyflx-1.2.0-cp27-none-manylinux1_x86_64.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4c7e736fd747c56df443932ed17436bb", "sha256": "c6b253e3a419407d2589489568e202e3e8451529fabd59584b3cf047f5f5e44d" }, "downloads": -1, "filename": "pyflx-1.2.0-cp27-none-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "4c7e736fd747c56df443932ed17436bb", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 2190030, "upload_time": "2019-08-06T12:20:44", "url": "https://files.pythonhosted.org/packages/01/42/d99e2ffbac30e4a9daaaf0fb20f37ffebc8d168ac6f100dc1645424ec415/pyflx-1.2.0-cp27-none-manylinux1_x86_64.whl" } ] }