{ "info": { "author": "Feite Brekeveld", "author_email": "f.brekeveld@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Financial and Insurance Industry", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "saxo_openapi\n============\n\n\nPython wrapper for Saxo Bank OpenAPI REST-API (see `here\n`_)\n\nMost endpoints are covered by *saxo_openapi*. Check `Covered endpoints`_ for details.\n\n.. image:: https://travis-ci.org/hootnot/saxo_openapi.svg?branch=master\n :target: https://travis-ci.org/hootnot/saxo_openapi\n\n.. image:: https://readthedocs.org/projects/saxo-openapi/badge/?version=latest\n :target: https://saxo-openapi.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://coveralls.io/repos/github/hootnot/saxo_openapi/badge.svg?branch=master\n :target: https://coveralls.io/github/hootnot/saxo_openapi?branch=master\n :alt: Coverage\n\n.. image:: https://img.shields.io/pypi/v/saxo_openapi.svg\n :target: https://pypi.org/project/saxo-openapi\n :alt: PyPI\n\n.. image:: https://img.shields.io/pypi/pyversions/saxo_openapi.svg\n :target: https://pypi.org/project/saxo-openapi\n :alt: Python versions\n\n.. image:: https://api.codacy.com/project/badge/Grade/edcfcf6a416a4f94bb710413a35daa83\n :target: https://www.codacy.com/app/hootnot/saxo_openapi?utm_source=github.com&utm_medium=referral&utm_content=hootnot/saxo_openapi&utm_campaign=Badge_Grade\n\nInteractive\n-----------\n\n.. image:: https://jupyter.readthedocs.io/en/latest/_static/_images/jupyter.svg\n :target: ./jupyter\n :alt: Jupyter\n\nUsing the Jupyter `notebook`_ it is easy to experiment with the\n*saxo_openapi* library.\n\n.. _notebook: ./jupyter/index.ipynb\n\nTOC\n---\n\n + `Install`_\n + `Design`_\n + `Documentation`_\n + `Example`_\n + `Some Trading`_\n - `Or by using: contrib.orders`_\n + `Covered endpoints`_\n\n\nInstall\n-------\n\n.. code-block:: bash\n\n # Setup a virtual environment\n $ mkdir tst_saxo_openapi\n $ cd tst_saxo_openapi\n $ /usr/local/bin/python3.7 -m venv venv37\n $ . ./venv37/bin/activate\n (venv37) feite@oatr:~/tst_saxo_openapi$\n\n $ pip install saxo_openapi requests\n\n # get a token from developer.saxo\n # try some examples\n\n\nTo use the latest development version from github:\n\n.. code-block:: bash\n\n $ pip install git+https://github.com/hootnot/saxo_openapi.git\n\n\n.. note:: Only python3 is supported!\n\n\nDesign\n------\n\nThe *saxo_openapi* covers each *endpoint* of the SAXO OpenAPI by a\n*request class*.\nEach request class representing an endpoint applies the following in a consistent way:\n\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | **Endpoint parameters as documented by SAXO** | **saxo_openpi request class** | **Comment** |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | *route* parameters | named parameters: required | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | example: | | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | /port/v1/positions/me/?FieldGroups=... | portfolio.PositionsMe() | No route params and no required params |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | | | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | *querystring* parameters | *params* dict: optional and/or required parameters. | |\n | | If all parameters in params are optional the params | |\n | | parameter is optional, otherwise it is required | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | example: | | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | /port/v1/positions/{PositionId}/?... | pf.positions.SinglePosition(PositionId, params={..})| *PositionId*: required, *params*: required |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | | | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | *body* parameters | *data* dict: optional and/or required parameters | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | example: | | |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n | /trade/v2/orders/ | tr.orders.Order(data={..}) | *data*: required |\n +-----------------------------------------------+-----------------------------------------------------+--------------------------------------------------------+\n\nTop `saxo_openapi`_\n\nDocumentation\n-------------\n\nSAXO Bank has a full documentation of their REST interface available\non `https://www.developer.saxo/openapi/referencedocs`_.\n\nThe documentation of *saxo_openapi* is on `https://saxo-openapi.readthedocs.io/en/latest`_.\nEach request-class is documented with a straightforward usage example.\n\n.. _`https://www.developer.saxo/openapi/referencedocs`: https://www.developer.saxo/openapi/referencedocs\n.. _`https://saxo-openapi.readthedocs.io/en/latest`: https://saxo-openapi.readthedocs.io/en/latest\n\nTop `saxo_openapi`_\n\nExample\n-------\n\n.. code-block:: python\n\n from saxo_openapi import API\n import saxo_openapi.endpoints.rootservices as rs\n from pprint import pprint\n\n token = \" ... [Paste your access token here - create a 24-hour token for testing on developer.saxo] ... \"\n client = API(access_token=token)\n\n # lets make a diagnostics request, it should return '' with a state 200\n r = rs.diagnostics.Get()\n print(\"request is: \", r)\n rv = client.request(r)\n assert rv is None and r.status_code == 200\n print('diagnostics passed')\n\n # request available rootservices-features\n r = rs.features.Availability()\n rv = client.request(r)\n print(\"request is: \", r)\n print(\"response: \")\n pprint(rv, indent=2)\n print(r.status_code)\n\nOutput:\n\n ::\n\n request is: openapi/root/v1/diagnostics/get/\n diagnostics passed\n request is: openapi/root/v1/features/availability/\n response:\n [ {'Available': True, 'Feature': 'News'},\n {'Available': True, 'Feature': 'GainersLosers'},\n {'Available': True, 'Feature': 'Calendar'},\n {'Available': True, 'Feature': 'Chart'}]\n 200\n\nTop `saxo_openapi`_\n\nSome Trading\n------------\n\n.. code-block:: python\n\n from saxo_openapi import API\n import saxo_openapi.endpoints.trading as tr\n import saxo_openapi.endpoints.portfolio as pf\n import json\n\n # Place your token in a file named: tok.txt\n tok = \"\"\n with open(\"tok.txt\") as I:\n tok = I.read().strip()\n\n # Our client to process the requests\n client = API(access_token=tok)\n\n # Positions, probably none, but maybe you see positions\n # that you created by the explorer\n r = pf.positions.PositionsMe()\n rv = client.request(r)\n print(json.dumps(rv, indent=2))\n\n # Place some market orders\n MO = [\n {\n \"AccountKey\": \"Cf4xZWiYL6W1nMKpygBLLA==\",\n \"Amount\": \"100000\",\n \"AssetType\": \"FxSpot\",\n \"BuySell\": \"Sell\",\n \"OrderType\": \"Market\",\n \"Uic\": 21 # EURUSD\n },\n {\n \"AccountKey\": \"Cf4xZWiYL6W1nMKpygBLLA==\",\n \"Amount\": \"80000\",\n \"AssetType\": \"FxSpot\",\n \"BuySell\": \"Buy\",\n \"OrderType\": \"Market\",\n \"Uic\": 23 # GBPCAD\n },\n ]\n\n # create Order requests and process them\n for r in [tr.orders.Order(data=orderspec) for orderspec in MO]:\n client.request(r)\n\n # check for positions again\n r = pf.positions.PositionsMe()\n rv = client.request(r)\n print(json.dumps(rv, indent=2))\n\n\nOutput:\n\n.. code-block:: python\n\n {\n \"__count\": 0,\n \"Data\": []\n }\n\n.. code-block:: python\n\n {\n \"__count\": 2,\n \"Data\": [\n {\n \"NetPositionId\": \"GBPCAD__FxSpot\",\n \"PositionBase\": {\n \"Uic\": 23,\n \"AccountId\": \"9226397\",\n \"Amount\": 80000.0,\n \"CanBeClosed\": true,\n \"SourceOrderId\": \"76306670\",\n \"ExecutionTimeOpen\": \"2019-03-05T22:39:43.738721Z\",\n \"Status\": \"Open\",\n \"IsMarketOpen\": true,\n \"CorrelationKey\": \"244b083d-7bce-4e4b-a01c-5117e5860321\",\n \"CloseConversionRateSettled\": false,\n \"ClientId\": \"9226397\",\n \"OpenPrice\": 1.75937,\n \"RelatedOpenOrders\": [],\n \"ValueDate\": \"2019-03-08T00:00:00.000000Z\",\n \"SpotDate\": \"2019-03-08\",\n \"AssetType\": \"FxSpot\"\n },\n \"PositionView\": {\n \"Exposure\": 80000.0,\n \"InstrumentPriceDayPercentChange\": -0.04,\n \"ConversionRateCurrent\": 0.662245,\n \"TradeCostsTotal\": -14.07,\n \"ExposureInBaseCurrency\": 93196.8,\n \"CurrentPriceType\": \"Bid\",\n \"TradeCostsTotalInBaseCurrency\": -9.32,\n \"ProfitLossOnTradeInBaseCurrency\": -49.27,\n \"CurrentPriceDelayMinutes\": 0,\n \"ConversionRateOpen\": 0.662245,\n \"ProfitLossOnTrade\": -74.4,\n \"ExposureCurrency\": \"GBP\",\n \"CurrentPrice\": 1.75844,\n \"CalculationReliability\": \"Ok\"\n },\n \"PositionId\": \"212702698\"\n },\n {\n \"NetPositionId\": \"EURUSD__FxSpot\",\n \"PositionBase\": {\n \"Uic\": 21,\n \"AccountId\": \"9226397\",\n \"Amount\": -100000.0,\n \"CanBeClosed\": true,\n \"SourceOrderId\": \"76306669\",\n \"ExecutionTimeOpen\": \"2019-03-05T22:39:43.546536Z\",\n \"Status\": \"Open\",\n \"IsMarketOpen\": true,\n \"CorrelationKey\": \"4dab5814-8b84-421e-859b-dfdbdbec06ec\",\n \"CloseConversionRateSettled\": false,\n \"ClientId\": \"9226397\",\n \"OpenPrice\": 1.13054,\n \"RelatedOpenOrders\": [],\n \"ValueDate\": \"2019-03-08T00:00:00.000000Z\",\n \"SpotDate\": \"2019-03-08\",\n \"AssetType\": \"FxSpot\"\n },\n \"PositionView\": {\n \"Exposure\": -100000.0,\n \"InstrumentPriceDayPercentChange\": -0.01,\n \"ConversionRateCurrent\": 0.884455,\n \"TradeCostsTotal\": -11.3,\n \"ExposureInBaseCurrency\": -100000.0,\n \"CurrentPriceType\": \"Ask\",\n \"TradeCostsTotalInBaseCurrency\": -9.99,\n \"ProfitLossOnTradeInBaseCurrency\": -17.69,\n \"CurrentPriceDelayMinutes\": 0,\n \"ConversionRateOpen\": 0.884455,\n \"ProfitLossOnTrade\": -20.0,\n \"ExposureCurrency\": \"EUR\",\n \"CurrentPrice\": 1.13074,\n \"CalculationReliability\": \"Ok\"\n },\n \"PositionId\": \"212702696\"\n }\n ]\n }\n\n\nTop `saxo_openapi`_\n\nOr by using: contrib.orders\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe same orders but now using *MarketOrderFxSpot* to create the orderbodies.\n\n.. code-block:: python\n\n from saxo_openapi import API\n import saxo_openapi.endpoints.trading as tr\n import saxo_openapi.endpoints.portfolio as pf\n from saxo_openapi.contrib.orders import tie_account_to_order, MarketOrderFxSpot\n from saxo_openapi.contrib.session import account_info\n import json\n\n # Place your token in a file named: token.txt\n token = \"\"\n with open(\"token.txt\") as I:\n tok = I.read().strip()\n\n # client to process the requests\n client = API(access_token=token)\n ai = account_info(client)\n\n # Positions, probably none, but maybe you see positions\n # that you created by the explorer\n r = pf.positions.PositionsMe()\n rv = client.request(r)\n print(json.dumps(rv, indent=2))\n\n # Place some market orders, only Amount and Uic needed\n # the other body parameters will be generated by MarketOrderFxSpot\n MO = [\n {\n \"Amount\": -100000, # negative amount indicates a Sell\n \"Uic\": 21 # EURUSD\n },\n {\n \"Amount\": 80000, # positive amount indicates a buy\n \"Uic\": 23 # GBPCAD\n }]\n\n # create Order requests and process them\n for spec in MO:\n mospec = tie_account_to_order(ai.AccountKey, MarketOrderFxSpot(**spec))\n r = tr.orders.Order(data=mospec)\n client.request(r)\n\n # check for positions again\n r = pf.positions.PositionsMe()\n rv = client.request(r)\n print(json.dumps(rv, indent=2))\n\n\nTop `saxo_openapi`_\n\nCovered endpoints\n-----------------\n\nSAXO Bank organizes the endpoints in groups/subgroups, see:\n`https://www.developer.saxo/openapi/referencedocs`_\n\n\n.. _`https://www.developer.saxo/openapi/referencedocs`: https://www.developer.saxo/openapi/referencedocs\n\nStates:\n\n + [ ] not covered yet\n + [.] work in progress\n + [x] covered\n\n ::\n\n Account History\n Account Values\n AccountSummary [x]\n HistoricalPositions\n HistoricalPositions [x]\n Performance\n AccountPerformance [x]\n\n Auto Trading\n Investments\n Trade Followers\n Trade Leaders\n\n Chart\n Charts [x]\n\n Client Management\n Signups v1\n Signups v2\n Users\n\n Client Reporting\n Historical Report Data - Account Statement\n Historical Report Data - Portfolio Management\n Historical Report Data - Trade Details\n Historical Report Data - Trades Executed\n Historical Report Data - Transaction\n Historical Report Data - Transaction Balance\n\n Client Services\n Audit Activities\n Audit OrderActivities\n CashManagement - InterAcountTransfer\n CashManagement - Wiretransfers\n ClientInfo\n Historical Report Data - Aggregated amounts\n Historical Report Data - Bookings\n Historical Report Data - Closed positions\n Historical Report Data - Trades\n Support - Cases\n\n Event Notification Services\n ClientActivities\n create a subscription for client events [x]\n remove subscription [x]\n remove subscriptions [x]\n get activities for client/account [x]\n\n Partner Integration (Beta/Early Preview)\n InteractiveIdVerification\n\n Platform\n Articles\n Get a specific article from sitecore [ ]\n Get a list of articles from sitecore [ ]\n ConfigurationInvestor\n Get the structure configuration for platform [ ]\n Get a specific page for not loading full site [ ]\n ConfigurationTrader\n Get the structure configuration for platform [ ]\n Get a specific page for not loading full site [ ]\n\n Portfolio\n AccountGroups\n AccountGroupDetails [x]\n AccountGroupsMe [x]\n AccountGroupsList [x]\n AccountGroupUpdate [x]\n\n Accounts\n AccountDetails [x]\n AccountList [x]\n AccountListByClient [x]\n AccountUpdate [x]\n Accountreset [x]\n SubscriptionCreate [x]\n SubscriptionRemoveByTag [x]\n SubscriptionRemoveById [x]\n\n Balances\n AccountBalancesMe [x]\n AccountBalances [x]\n MarginOverview [x]\n BalanceSubscriptionCreate [x]\n BalanceSubscriptionRemoveByTag [x]\n BalanceSubscriptionRemoveById [x]\n\n Clients\n ClientDetailsMe [x]\n ClientDetails [x]\n ClientDetailsUpdate [x]\n ClientDetailsByOwner [x]\n ClientSwitchPosNettingMode [x]\n\n ClosedPositions\n ClosedPositionList [x]\n ClosedPositionById [x]\n ClosedPositionDetails [x]\n ClosedPositionsMe [x]\n ClosedPositionSubscription [x]\n ClosedPositionSubscriptionUpdate [x]\n ClosedPositionSubscriptionsRemove [x]\n ClosedPositionSubscriptionRemoveById [x]\n\n Exposure\n NetInstrumentsExposureMe [x]\n NetInstrumentsExposure [x]\n CreateExposureSubscription [x]\n RemoveExposureSubscriptionsByTag [x]\n RemoveExposureSubscription [x]\n CurrencyExposureMe [x]\n CurrencyExposureSpecific [x]\n FxSpotExposureMe [x]\n FxSpotExposurSpecific [x]\n\n NetPositions\n Get a single netposition [x]\n Get detailed information for a single netposition [x]\n Get netpositions for the logged-in client [x]\n Get netpositions for a client, account group, account or a position [x]\n Create a netsubscription on a list of positions and make it active [x]\n Remove multiple subscriptions [x]\n Remove a subscription [x]\n\n Orders\n GetOpenOrder [x]\n GetOpenOrdersMe [x]\n OrderDetails [x]\n GetAllOpenOrders [x]\n CreateOpenOrdersSubscription [x]\n RemoveOpenOrderSubscriptionsByTag [x]\n RemoveOpenOrderSubscription [x]\n\n Positions\n Get a single position [x]\n Get detailed information for a single position [x]\n Get positions for the logged-in client [x]\n Get positions for a client, account group, account or a position [x]\n Create a subscription on a list of positions and make it active [x]\n Change the subscription page size [x]\n Remove multiple subscriptions [x]\n Remove a subscription [x]\n\n Users\n UsersMe [x]\n Users [x]\n UserDetails [x]\n UserUpdate [x]\n\n Reference Data\n AlgoStrategies\n Get all strategies [x]\n Get details about a specific strategy [x]\n Countries [x]\n Cultures [x]\n Currencies [x]\n Exchanges\n Get all exchanges [x]\n Get details about a specific exchange [x]\n Instruments\n Instruments [x]\n InstrumentsDetails [x]\n InstrumentDetails [x]\n ContractoptionSpaces [x]\n FuturesSpaces [ ]\n TradingSchedule [x]\n Languages [x]\n StandardDates\n Get a list of forward tenor dates [x]\n Get a list of FX option expiry dates [x]\n TimeZones [x]\n\n Root Services\n Diagnostics\n GET test endpoint [x]\n POST test endpoint [x]\n PUT test endpoint [x]\n DELETE test endpoint [x]\n PATCH test endpoint [x]\n HEAD test endpoint [x]\n OPTIONS test endpoint [x]\n ECHO test endpoint [x]\n\n Features\n Get availability of all features [x]\n Create a feature availability subscription [x]\n Remove a feature availability subscription [x]\n Sessions\n Get Session capabilities [x]\n Change Session capabilities [x]\n Create Session capabilities subscr. [x]\n Remove Session capabilities subscr. [x]\n Subscriptions\n Rmove multiple active subscr [x]\n User [x]\n\n Trading\n AllocationKeys\n Get a list of existing allocation keys [x]\n Get detailed inform. about an alloc. key [x]\n Create an allocation key [x]\n Delete an allocation key [x]\n InfoPrices\n Get an info price for a specific instrum. [x]\n Get info prices for a list of instruments [x]\n Create info pr subscr. on list of instr. [x]\n Remove info pr subscr. on instruments [x]\n Remove info pr subscr on an instrument [x]\n Messages [x]\n OptionChain\n Create options chain subscription [x]\n Modify options chain subscription [x]\n Remove options chain subscription [x]\n ResetATM options chain subscription [x]\n v1 Orders\n v2 Orders\n Place a new order [x]\n Change one or more existing orders [x]\n Cancel one or more orders [x]\n Precheck a single order [x]\n Positions\n Create pos by quote [x]\n Update a position [x]\n Exercise a position [x]\n Exercise an amount [x]\n Prices\n CreatePriceSubscriptions [x]\n RequestMarginImpact [x]\n RemovePriceSubscriptionByTag [x]\n RemovePriceSubscription [x]\n\n Value Add\n PriceAlerts\n Get all price alert definitions [x]\n Get a specific price alert definition [x]\n Create a new price alert definition [x]\n Update an existing price alert def. [x]\n Delete price alert definitions [x]\n Get the current users's notification settings [x]\n Modify the current users's notification settings [x]\n\nTop `saxo_openapi`_\n\n\nChangelog\n=========\n\n[Unreleased]\n------------\n\nv0.6.0 (2019-09-16)\n-------------------\n\nNew Features\n~~~~~~~~~~~~\n\n- [order endpoints] added support for the ManualOrder attribute\n\n BREAKING CHANGE: SAXO OpenApi will require this attribute in the\n orderbodies, see:\n https://www.developer.saxo/excel/blog/updated-requirements-for-order-placement?phrase=ManualOrder\n\nStyle Fixes\n~~~~~~~~~~~\n\n- fixed flake8 style issues\n\nDocumentation Changes\n~~~~~~~~~~~~~~~~~~~~~\n\n- [sphinx config] fixed typo\n\nv0.5.0 (2019-09-10)\n-------------------\n\nNew Features\n~~~~~~~~~~~~\n\n- [endpoints] chart endpoints\n\n addition of all chart endpoint classes\n\nDocumentation Changes\n~~~~~~~~~~~~~~~~~~~~~\n\n- [endpoints] chart endpoints documentation\n\n all chart endpoint classes documentation\n- various doc/docstring updates\n\nv0.4.1 (2019-05-23)\n-------------------\n\nNew Features\n~~~~~~~~~~~~\n\n- [endpoints] eventnotificationservices\n\n addition all eventnotificationservices endpoint classes\n- [definitions] activities and reportformats\n\n addition of definitions for 'activities' and 'reportformats'\n\nBug Fixes\n~~~~~~~~~\n\n- corrected config causing broken build\n\n replace auto-changelog\n\nDocumentation Changes\n~~~~~~~~~~~~~~~~~~~~~\n\n- [endpoints] eventnotificationservices\n\n addition all eventnotificationservices endpoint classes\n\nv0.3.1 (2019-05-04)\n-------------------\n\nv0.3.0 (2019-05-04)\n-------------------\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/hootnot/saxo_openapi", "keywords": "saxo_openapi", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "saxo-openapi", "package_url": "https://pypi.org/project/saxo-openapi/", "platform": "", "project_url": "https://pypi.org/project/saxo-openapi/", "project_urls": { "Homepage": "https://github.com/hootnot/saxo_openapi" }, "release_url": "https://pypi.org/project/saxo-openapi/0.6.0/", "requires_dist": null, "requires_python": "", "summary": "SAXO Bank OpenAPI REST-API access", "version": "0.6.0" }, "last_serial": 5836941, "releases": { "0.3.0": [ { "comment_text": "", "digests": { "md5": "6228f0e9d8fac430533694b9a84a2629", "sha256": "0613abf0490dd3edb0c5023435d77b266488247ae55314c54aaff1d2f591f233" }, "downloads": -1, "filename": "saxo_openapi-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6228f0e9d8fac430533694b9a84a2629", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 117297, "upload_time": "2019-05-04T13:18:26", "url": "https://files.pythonhosted.org/packages/36/38/aae691e691700d6864459353a8a5116642f288001af6172ae285bb5cbe20/saxo_openapi-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec7eb56c3d93014b9c3196ff3da315fd", "sha256": "eb21e8aed8ccadaa23ca921fcb7f4257c950a8d75d6539e1b55c7a3ccce2f93a" }, "downloads": -1, "filename": "saxo_openapi-0.3.0.tar.gz", "has_sig": false, "md5_digest": "ec7eb56c3d93014b9c3196ff3da315fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68411, "upload_time": "2019-05-04T13:18:28", "url": "https://files.pythonhosted.org/packages/8b/c1/aef9eab9050790be9808e7d39f8767d99d8839ea1174088d1252b5d92f20/saxo_openapi-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "0689ba267f4ac5e06cb7a7553c98c047", "sha256": "b386d4bc6dcfe48e4c52c34e3f4a1bf1ee83aa1b624388e3926f6de6ea9df493" }, "downloads": -1, "filename": "saxo_openapi-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0689ba267f4ac5e06cb7a7553c98c047", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 117346, "upload_time": "2019-05-04T14:35:32", "url": "https://files.pythonhosted.org/packages/fc/4b/da92be448de82b0a1359c64524bce0c389417a9603a20e54bff2e2bbed88/saxo_openapi-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f20d090a08bd5358ab24867e1497a63", "sha256": "832d061efc4c428f32fa43dfacc96e6a0a2978f80d29edf95e8d456c066c839e" }, "downloads": -1, "filename": "saxo_openapi-0.3.1.tar.gz", "has_sig": false, "md5_digest": "8f20d090a08bd5358ab24867e1497a63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68496, "upload_time": "2019-05-04T14:35:34", "url": "https://files.pythonhosted.org/packages/b8/65/a1103637781d43dd2bcf4b8d213a2093a1a62a90fc65f1545ea2a37c4dfa/saxo_openapi-0.3.1.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a047297dfaee488103a928f3e45d5feb", "sha256": "6eaba88f48347b2d948272372f9974a11bc96d1da9a58055bb5badb5f682071b" }, "downloads": -1, "filename": "saxo_openapi-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a047297dfaee488103a928f3e45d5feb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 122843, "upload_time": "2019-05-23T10:45:40", "url": "https://files.pythonhosted.org/packages/69/df/62d3e1138e30704aa5c60d57feb5eca5713be397387011c84d2a2de2f5fb/saxo_openapi-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "47fefcf51332031b869a08d685f68c23", "sha256": "8d09a715aacb5a35114f5927ef8e1df71e8bced7e6056a9585362e15c1173a2d" }, "downloads": -1, "filename": "saxo_openapi-0.4.1.tar.gz", "has_sig": false, "md5_digest": "47fefcf51332031b869a08d685f68c23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71998, "upload_time": "2019-05-23T10:45:42", "url": "https://files.pythonhosted.org/packages/e7/24/dbecb81aa071f8ec6b16d2f46cb9f85a386da786239330edd5e0ae74ad49/saxo_openapi-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "dcf0b1ca6eb2ce7844d2c8c0314d7c03", "sha256": "c23d09fb9f2b33ea88d210d1f6889c2f27a8e0128f5e271e22ad99ecf0000209" }, "downloads": -1, "filename": "saxo_openapi-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dcf0b1ca6eb2ce7844d2c8c0314d7c03", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 122530, "upload_time": "2019-09-10T19:26:16", "url": "https://files.pythonhosted.org/packages/4c/73/cdde799f9e3edccd516489ec209264e94373280bf2218a60b0f382b3ccf9/saxo_openapi-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9a998cb78e3baeedd7b670a4c61ffdf", "sha256": "c90298f45a989b28857975dfe9ea8ce760b2fd552b07c708d55a5e8563511c09" }, "downloads": -1, "filename": "saxo_openapi-0.5.0.tar.gz", "has_sig": false, "md5_digest": "f9a998cb78e3baeedd7b670a4c61ffdf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71257, "upload_time": "2019-09-10T19:26:18", "url": "https://files.pythonhosted.org/packages/77/c9/1e00236e4fc4e0396b5c982e5b17fa71a05f6ed551128ea819f9352c023d/saxo_openapi-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "6f6afd4964f2061be069565dd3e3bebd", "sha256": "03857bb81c5f8e77c8f679de233f1edb7dbb4f585d2c253350b5ba4e74211119" }, "downloads": -1, "filename": "saxo_openapi-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6f6afd4964f2061be069565dd3e3bebd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 123371, "upload_time": "2019-09-16T15:45:02", "url": "https://files.pythonhosted.org/packages/39/9a/2182948a822b484b8f0fc458d690878d30c2866f1fd4ae5d409ea7e3716f/saxo_openapi-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6c44f872ef7d3824389a398fc07c9d4", "sha256": "88d16ecae4f11885a68f7064bb1addb6dc1ece19c3e09c21609527783c458636" }, "downloads": -1, "filename": "saxo_openapi-0.6.0.tar.gz", "has_sig": false, "md5_digest": "c6c44f872ef7d3824389a398fc07c9d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72439, "upload_time": "2019-09-16T15:45:05", "url": "https://files.pythonhosted.org/packages/92/fc/689a3a0899a04464e48a67d11cc3130234605170d52bfd4ede289de68630/saxo_openapi-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6f6afd4964f2061be069565dd3e3bebd", "sha256": "03857bb81c5f8e77c8f679de233f1edb7dbb4f585d2c253350b5ba4e74211119" }, "downloads": -1, "filename": "saxo_openapi-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6f6afd4964f2061be069565dd3e3bebd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 123371, "upload_time": "2019-09-16T15:45:02", "url": "https://files.pythonhosted.org/packages/39/9a/2182948a822b484b8f0fc458d690878d30c2866f1fd4ae5d409ea7e3716f/saxo_openapi-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6c44f872ef7d3824389a398fc07c9d4", "sha256": "88d16ecae4f11885a68f7064bb1addb6dc1ece19c3e09c21609527783c458636" }, "downloads": -1, "filename": "saxo_openapi-0.6.0.tar.gz", "has_sig": false, "md5_digest": "c6c44f872ef7d3824389a398fc07c9d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72439, "upload_time": "2019-09-16T15:45:05", "url": "https://files.pythonhosted.org/packages/92/fc/689a3a0899a04464e48a67d11cc3130234605170d52bfd4ede289de68630/saxo_openapi-0.6.0.tar.gz" } ] }