{ "info": { "author": "Krishna Velu", "author_email": "krishnajvelu@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\n# Python SDK for Alice Blue API\n\nThe Python library for communicating with the Alice Blue APIs.\n\nAlice Blue Python library provides an easy to use wrapper over the HTTPs APIs.\n\nThe HTTP calls have been converted to methods and JSON responses are wrapped into Python-compatible objects.\n\nWebsocket connections are handled automatically within the library\n\n* Author: [krishnavelu](https://github.com/krishnavelu/)\n* [Unofficed](https://www.unofficed.com/) is strategic partner of Alice Blue responsible for this git.\n\n## Installation\n\nThis module is installed via pip:\n\n```\npip install alice_blue\n```\n\nTo force upgrade existing installations:\n```\npip uninstall alice_blue\npip --no-cache-dir install --upgrade alice_blue\n```\n\n### Prerequisites\n\nPython 3.x\n\nAlso, you need the following modules:\n\n* `protlib`\n* `websocket_client`\n* `requests`\n* `bs4`\n\nThe modules can also be installed using `pip`\n\n## Getting started with API\n\n### Overview\nThere is only one class in the whole library: `AliceBlue`. The `login_and_get_access_token()` static method is used to retrieve an access token from the alice blue server. An access token is valid for 24 hours.\nWith an access token, you can instantiate an AliceBlue object. Ideally you only need to create an access_token once every day. After you have the access token, you can store it\nseparately for re-use.\n\n### REST Documentation\nThe original REST API that this SDK is based on is available online.\n [Alice Blue API REST documentation](http://antplus.aliceblueonline.com/#introduction)\n\n## Using the API\n\n### Logging\nThe whole library is equipped with python's `logging` moduele for debugging. If more debug information is needed, enable logging using the following code.\n\n```python\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n```\n\n### Get api_secret\napi_secret is unique for each and every account. You need to enable api trading and get api_secret from alice blue.\nPlesae [contact](https://www.aliceblueonline.com/contact-us/) alice blue for getting api_secret.\n\n### Get an access token\n1. Import alice_blue\n```python\nfrom alice_blue import *\n```\n\n2. Create access_token using login_and_get_access_token() function with your `username`, `password`, `2FA` and `api_secret`\n```python\naccess_token = AliceBlue.login_and_get_access_token(username='username', password='password', twoFA='a', api_secret='api_secret')\n```\n\n### Create AliceBlue Object\n1. Once you have your `access_token`, you can create an AliceBlue object with your `access_token`, `username` and `password`.\n```python\nalice = AliceBlue(username='username', password='password', access_token=access_token)\n```\n\n2. You can run commands here to check your connectivity\n```python\nprint(alice.get_balance()) # get balance / margin limits\nprint(alice.get_profile()) # get profile\nprint(alice.get_daywise_positions()) # get daywise positions\nprint(alice.get_netwise_positions()) # get netwise positions\nprint(alice.get_holding_positions()) # get holding positions\n```\n\n### Get master contracts\nGetting master contracts allow you to search for instruments by symbol name and place orders.\nMaster contracts are stored as an OrderedDict by token number and by symbol name. Whenever you get a trade update, order update, or quote update, the library will check if master contracts are loaded. If they are, it will attach the instrument object directly to the update. By default all master contracts of all enabled exchanges in your personal profile will be downloaded. i.e. If your profile contains the folowing as enabled exchanges `['NSE', 'BSE', 'MCX', NFO']` all contract notes of all exchanges will be downloaded by default. If you feel it takes too much time to download all exchange, or if you don't need all exchanges to be downloaded, you can specify which exchange to download contract notes while creating the AliceBlue object.\n\n```python\nalice = AliceBlue(username='username', password='password', access_token=access_token, master_contracts_to_download=['NSE', 'BSE'])\n```\nThis will reduce a few milliseconds in object creation time of AliceBlue object.\n\n\n### Search for symbols\nSymbols can be retrieved in multiple ways. Once you have the master contract loaded for an exchange, you can search for an instrument in many ways.\n\nSearch for a single instrument by it's name:\n```python\ntatasteel_nse_eq = alice.get_instrument_by_symbol('NSE', 'TATASTEEL')\nreliance_nse_eq = alice.get_instrument_by_symbol('NSE', 'RELIANCE')\nongc_bse_eq = alice.get_instrument_by_symbol('BSE', 'ONGC')\nindia_vix_nse_index = alice.get_instrument_by_symbol('NSE', 'India VIX')\nsensex_nse_index = alice.get_instrument_by_symbol('BSE', 'Sensex')\n```\n\nSearch for a single instrument by it's token number (generally useful only for BSE Equities):\n```python\nongc_bse_eq = alice.get_instrument_by_token(500312)\nreliance_bse_eq = alice.get_instrument_by_token(500325)\nacc_nse_eq = alice.get_instrument_by_token(22)\n```\n\nSearch for multiple instruments by matching the name\n```python\nall_banknifty_scrips = alice.search_instruments('NFO', 'BANKNIFTY')\n```\n\nSearch FNO instruments easily by mentioning expiry, strike & call or put.\n```python\nbn_fut = alice.get_instrument_for_fno(symbol = 'BANKNIFTY', expiry_date=datetime.date(2019, 6, 27), is_fut=True, strike=None, is_CE = False)\nbn_call = alice.get_instrument_for_fno(symbol = 'BANKNIFTY', expiry_date=datetime.date(2019, 6, 27), is_fut=False, strike=30000, is_CE = True)\nbn_put = alice.get_instrument_for_fno(symbol = 'BANKNIFTY', expiry_date=datetime.date(2019, 6, 27), is_fut=False, strike=30000, is_CE = False)\n```\n\n\n#### Instrument object\nInstruments are represented by instrument objects. These are named-tuples that are created while getting the master contracts. They are used when placing an order and searching for an instrument. The structure of an instrument tuple is as follows:\n```python\nInstrument = namedtuple('Instrument', ['exchange', 'token', 'symbol',\n 'name', 'expiry', 'lot_size'])\n```\n\nAll instruments have the fields mentioned above. Wherever a field is not applicable for an instrument (for example, equity instruments don't have strike prices), that value will be `None`\n\n### Quote update\nOnce you have master contracts loaded, you can easily subscribe to quote updates.\n\n#### Four types of feed data are available\nYou can subscribe any one type of quote update for a given scrip. Using the `LiveFeedType` enum, you can specify what type of live feed you need.\n* `LiveFeedType.MARKET_DATA`\n* `LiveFeedType.COMPACT`\n* `LiveFeedType.SNAPQUOTE`\n* `LiveFeedType.FULL_SNAPQUOTE`\n\nPlease refer to the original documentation [here](http://antplus.aliceblueonline.com/#marketdata) for more details of different types of quote update.\n\n\n#### Subscribe to a live feed\n```python\nalice.subscribe(alice.get_instrument_by_symbol('NSE', 'TATASTEEL'), LiveFeedType.MARKET_DATA)\nalice.subscribe(alice.get_instrument_by_symbol('BSE', 'RELIANCE'), LiveFeedType.COMPACT)\n```\nSubscribe to multiple instruments in a single call. Give an array of instruments to be subscribed.\n\n```python\nalice.subscribe([alice.get_instrument_by_symbol('NSE', 'TATASTEEL'), alice.get_instrument_by_symbol('NSE', 'ACC')], LiveFeedType.MARKET_DATA)\n```\nNote: There is a limit of 250 scrips that can be subscribed on total. Beyond this point the server may disconnect web-socket connection. \n\nStart getting live feed via socket\n\n```python\nsocket_opened = False\ndef event_handler_quote_update(message):\n print(f\"quote update {message}\")\n\ndef open_callback():\n global socket_opened\n socket_opened = True\n\nalice.start_websocket(subscribe_callback=event_handler_quote_update,\n socket_open_callback=open_callback,\n run_in_background=True)\nwhile(socket_opened==False):\n pass\nalice.subscribe(alice.get_instrument_by_symbol('NSE', 'ONGC'), LiveFeedType.MARKET_DATA)\nsleep(10)\n```\n\n#### Unsubscribe to a live feed\nUnsubscribe to an existing live feed\n```python\nalice.unsubscribe(alice.get_instrument_by_symbol('NSE', 'TATASTEEL'), LiveFeedType.MARKET_DATA)\nalice.unsubscribe(alice.get_instrument_by_symbol('BSE', 'RELIANCE'), LiveFeedType.COMPACT)\n```\nUnsubscribe to multiple instruments in a single call. Give an array of instruments to be unsubscribed.\n```python\nalice.unsubscribe([alice.get_instrument_by_symbol('NSE', 'TATASTEEL'), alice.get_instrument_by_symbol('NSE', 'ACC')], LiveFeedType.MARKET_DATA)\n```\n\n#### Get All Subscribed Symbols\n```python\nalice.get_all_subscriptions() # All\n```\n\n### Place an order\nPlace limit, market, SL, SL-M, AMO, BO, CO orders\n\n```python\nprint (alice.get_profile())\n\n# TransactionType.Buy, OrderType.Market, ProductType.Delivery\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.Market,\n product_type = ProductType.Delivery,\n price = 0.0,\n trigger_price = None,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n )\n\n# TransactionType.Buy, OrderType.Market, ProductType.Intraday\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.Market,\n product_type = ProductType.Intraday,\n price = 0.0,\n trigger_price = None,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n# TransactionType.Buy, OrderType.Market, ProductType.CoverOrder\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.Market,\n product_type = ProductType.CoverOrder,\n price = 0.0,\n trigger_price = 7.5, # trigger_price Here the trigger_price is taken as stop loss (provide stop loss in actual amount)\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n\n# TransactionType.Buy, OrderType.Limit, ProductType.BracketOrder\n# OCO Order can't be of type market\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.Limit,\n product_type = ProductType.BracketOrder,\n price = 8.0,\n trigger_price = None,\n stop_loss = 6.0,\n square_off = 10.0,\n trailing_sl = None,\n is_amo = False)\n)\n\n# TransactionType.Buy, OrderType.Limit, ProductType.Intraday\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%5%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.Limit,\n product_type = ProductType.Intraday,\n price = 8.0,\n trigger_price = None,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n\n# TransactionType.Buy, OrderType.Limit, ProductType.CoverOrder\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.Limit,\n product_type = ProductType.CoverOrder,\n price = 7.0,\n trigger_price = 6.5, # trigger_price Here the trigger_price is taken as stop loss (provide stop loss in actual amount)\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n###############################\n\n# TransactionType.Buy, OrderType.StopLossMarket, ProductType.Delivery\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%7%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.StopLossMarket,\n product_type = ProductType.Delivery,\n price = 0.0,\n trigger_price = 8.0,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n\n# TransactionType.Buy, OrderType.StopLossMarket, ProductType.Intraday\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%8%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.StopLossMarket,\n product_type = ProductType.Intraday,\n price = 0.0,\n trigger_price = 8.0,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n\n\n# TransactionType.Buy, OrderType.StopLossMarket, ProductType.CoverOrder\n# CO order is of type Limit and And Market Only\n\n# TransactionType.Buy, OrderType.StopLossMarket, ProductType.BO\n# BO order is of type Limit and And Market Only\n\n###################################\n\n# TransactionType.Buy, OrderType.StopLossLimit, ProductType.Delivery\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%9%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.StopLossMarket,\n product_type = ProductType.Delivery,\n price = 8.0,\n trigger_price = 8.0,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n\n# TransactionType.Buy, OrderType.StopLossLimit, ProductType.Intraday\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%10%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.StopLossLimit,\n product_type = ProductType.Intraday,\n price = 8.0,\n trigger_price = 8.0,\n stop_loss = None,\n square_off = None,\n trailing_sl = None,\n is_amo = False)\n)\n\n\n\n# TransactionType.Buy, OrderType.StopLossLimit, ProductType.CoverOrder\n# CO order is of type Limit and And Market Only\n\n\n# TransactionType.Buy, OrderType.StopLossLimit, ProductType.BracketOrder\n\nprint (\"%%%%%%%%%%%%%%%%%%%%%%%%%%%%11%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\")\nprint(\n alice.place_order(transaction_type = TransactionType.Buy,\n instrument = alice.get_instrument_by_symbol('NSE', 'INFY'),\n quantity = 1,\n order_type = OrderType.StopLossLimit,\n product_type = ProductType.BracketOrder,\n price = 8.0,\n trigger_price = 8.0,\n stop_loss = 1.0,\n square_off = 1.0,\n trailing_sl = 20,\n is_amo = False)\n)\n```\n\n### Cancel an order\n\n```python\nalice.cancel_order('170713000075481') #Cancel an open order\n```\n\n### Order properties as enums\nOrder properties such as TransactionType, OrderType, and others have been safely classified as enums so you don't have to write them out as strings\n\n#### TransactionType\nTransaction types indicate whether you want to buy or sell. Valid transaction types are of the following:\n\n* `TransactionType.Buy` - buy\n* `TransactionType.Sell` - sell\n\n#### OrderType\nOrder type specifies the type of order you want to send. Valid order types include:\n\n* `OrderType.Market` - Place the order with a market price\n* `OrderType.Limit` - Place the order with a limit price (limit price parameter is mandatory)\n* `OrderType.StopLossLimit` - Place as a stop loss limit order\n* `OrderType.StopLossMarket` - Place as a stop loss market order\n\n#### ProductType\nProduct types indicate the complexity of the order you want to place. Valid product types are:\n\n* `ProductType.Intraday` - Intraday order that will get squared off before market close\n* `ProductType.Delivery` - Delivery order that will be held with you after market close\n* `ProductType.CoverOrder` - Cover order\n* `ProductType.BracketOrder` - One cancels other order. Also known as bracket order\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/krishnavelu/alice_blue", "keywords": "alice,alice-blue,python,sdk,trading,stock markets", "license": "", "maintainer": "", "maintainer_email": "", "name": "alice-blue", "package_url": "https://pypi.org/project/alice-blue/", "platform": "", "project_url": "https://pypi.org/project/alice-blue/", "project_urls": { "Homepage": "https://github.com/krishnavelu/alice_blue" }, "release_url": "https://pypi.org/project/alice-blue/0.0.5/", "requires_dist": [ "requests", "websocket-client", "bs4", "protlib" ], "requires_python": "", "summary": "Python library for Alice Blue APIs", "version": "0.0.5" }, "last_serial": 6000062, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "adb909fb057df0d150b6d15a09aa43e8", "sha256": "bf54011be38fa818d8a3153276c697750dae7ad23c882e1d8c70b9fa2fd2030c" }, "downloads": -1, "filename": "alice_blue-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "adb909fb057df0d150b6d15a09aa43e8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24425, "upload_time": "2019-04-06T16:47:16", "url": "https://files.pythonhosted.org/packages/a7/f5/f8b52cb1229075fa37c1dd772fc8c9be528f5f09a58e00a59381989be0ab/alice_blue-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f4f502b5a72ff8b2500be942ab191d3a", "sha256": "100456d643df4ec7b0009448848cbc85d2a0e74465d6ae06183ca56ea04f03b9" }, "downloads": -1, "filename": "alice_blue-0.0.2.tar.gz", "has_sig": false, "md5_digest": "f4f502b5a72ff8b2500be942ab191d3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28566, "upload_time": "2019-04-06T16:47:18", "url": "https://files.pythonhosted.org/packages/45/2a/4b6bdaa1f65580211e44a0641e70da5a827f3b6499955aa2c0ebb15a2419/alice_blue-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "7489d3e5356abe9d64362174608e2d6d", "sha256": "006f6a09c5b5dfbfc7c0a6f7af62b513709b264cdb93543f6f7336d88ade0e7e" }, "downloads": -1, "filename": "alice_blue-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7489d3e5356abe9d64362174608e2d6d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24321, "upload_time": "2019-04-07T04:43:30", "url": "https://files.pythonhosted.org/packages/6e/c5/86488fd9e1ec8c53450b50fa1e5a5fcdba39923dca8d3b20af7daed819dd/alice_blue-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16f658d90bcc786c1b6a0f8892f8973c", "sha256": "5c46eceb63735705a90102a0eedb20d618f0e7ba2278ede9cfe0baf3d6ab4d40" }, "downloads": -1, "filename": "alice_blue-0.0.3.tar.gz", "has_sig": false, "md5_digest": "16f658d90bcc786c1b6a0f8892f8973c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28404, "upload_time": "2019-04-07T04:43:31", "url": "https://files.pythonhosted.org/packages/4e/69/f8dcd67ea3265f7ba401f8219822ef95844ab2751d59ab13d09132ef9cc5/alice_blue-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "f2a1443359ef6a9ebbd90f7aeb12a07a", "sha256": "f9b4a204f08c6b165b76fbb2b18a33980c3a7cfdad09169d8beb35edb91d8f50" }, "downloads": -1, "filename": "alice_blue-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f2a1443359ef6a9ebbd90f7aeb12a07a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24438, "upload_time": "2019-04-17T02:19:10", "url": "https://files.pythonhosted.org/packages/d3/48/0f2d5a748cefc74fa6490f3f78bfcd2754a2dd57255b6d053d546f600173/alice_blue-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "393d0ca10ac1f45569766750ca6762f6", "sha256": "ae5a77f68e18873813d1066804c9b67eb0e6f39f4cb12d280594dacbfba9b98f" }, "downloads": -1, "filename": "alice_blue-0.0.4.tar.gz", "has_sig": false, "md5_digest": "393d0ca10ac1f45569766750ca6762f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28478, "upload_time": "2019-04-17T02:19:12", "url": "https://files.pythonhosted.org/packages/a7/07/70c17ffb0085286482b9f91c8836f9680b72ef396e8941a865c3eb912db4/alice_blue-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "4cc9c4f3edc96991623907b2681b71b6", "sha256": "bdb80bf5e5ad3a9d43d05dde5c2488507aede8af9fce150ab7308e5ab5efee8a" }, "downloads": -1, "filename": "alice_blue-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4cc9c4f3edc96991623907b2681b71b6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24875, "upload_time": "2019-10-19T15:08:03", "url": "https://files.pythonhosted.org/packages/23/0f/e6662ae1e62bc34670c2c877e6fae734d52b2f293d59647ea75c70d4ab03/alice_blue-0.0.5-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4cc9c4f3edc96991623907b2681b71b6", "sha256": "bdb80bf5e5ad3a9d43d05dde5c2488507aede8af9fce150ab7308e5ab5efee8a" }, "downloads": -1, "filename": "alice_blue-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4cc9c4f3edc96991623907b2681b71b6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24875, "upload_time": "2019-10-19T15:08:03", "url": "https://files.pythonhosted.org/packages/23/0f/e6662ae1e62bc34670c2c877e6fae734d52b2f293d59647ea75c70d4ab03/alice_blue-0.0.5-py2.py3-none-any.whl" } ] }