A lightweight Python wrapper for the IG Markets API

Overview
Latest Version Supported Python versions Wheel format License Development Status Downloads monthly Requirements Status Documentation Status Test Coverage

trading_ig

A lightweight Python wrapper for the IG Markets API. Simplifies access to the IG REST and Streaming APIs with a live or demo account.

What is it?

IG Markets provides financial spread betting and CFD platforms for trading equities, forex, commodities, indices, cryptocurrencies, bonds, rates, options and more.

IG provide APIs so that developers can access their platforms programmatically. Using the APIs you can get live and historical data, automate your trades, or create apps. For details about the IG APIs please see their site:

https://labs.ig.com/

NOTE: this is not an IG project. Use it at your own risk

Installation

From Python package index:

$ pip install trading_ig

with Poetry:

$ git clone https://github.com/ig-python/ig-markets-api-python-library
$ cd ig-markets-api-python-library
$ poetry install

or with optional packages:

$ poetry install --extras "pandas munch"

From source:

$ git clone https://github.com/ig-python/ig-markets-api-python-library
$ cd ig-markets-api-python-library
$ python setup.py install

or direct from Github:

$ pip install git+https://github.com/ig-python/ig-markets-api-python-library

Dependencies

For full details, see pyproject.toml

Docs

https://trading_ig.readthedocs.io/

License

BSD (See LICENSE)

Comments
  • Open and close position with API

    Open and close position with API

    'm trying using API and i want open a position.

    I'm following the Documentation and i'm in

    https://labs.ig.com/rest-trading-api-reference/service-detail?id=542

    I'm using POST request but i understand some params like:

    currencyCode,dealReferenc, expiry, level orderType,quoteID,timeInForce,trilingStop and trilingStopIncrement

    Yes, are practically all params. Can someone explain better me what do this params? Or can someone do a example request and them i try to understand all this.

    Thank you and sorry for my bad english

    opened by StebsV2 22
  • Market data not printed

    Market data not printed

    Hi, I tried the sample with my account, and the log has such error:

    TransientError: ERROR -1: Invalid account type

    I used my LIVE account, which works fine with REST api and minute data, but I want to have tick data with stream api. The account information is exactly the same.

    So, could anyone give me some hint?

    Thanks

    opened by ljcljc 22
  • Issue#82 Encrypt password during login.

    Issue#82 Encrypt password during login.

    The IG API in some countries require an encrypted password during login. Otherwise you'll get an error error.public-api.failure.encryption.required. We get the encryption key first, then create session with the encrypted password.

    Use the optional parameter encryption=True to enable this feature

    from trading_ig import IGService
    from trading_ig.config import config
    
    ig_service = IGService(config.username, config.password, config.api_key, config.acc_type)
    ig_service.create_session(encryption=True)
    
    opened by doggyeh 16
  • Lightstreamer stops after 2 hours

    Lightstreamer stops after 2 hours

    Hello everyone,

    Hope you're all ok in those tough times,

    I have an issue with the lightstreamer stream api : it works fine for about 2 hours and then stops. I have found online that it's a problem with the LOOP that "finishes its natural cycle" so I need to reconnect and subscribe to all the feeds that I had but I can't find a way to detect that "end of cycle".

    I tried to log something everytime I receive a loop message but I don't log anything.

    Please help! It drives me crazy! :)

    Thanks in advance, Sacha

    opened by sacharbit 13
  • sphinx is an unnecessary requirement

    sphinx is an unnecessary requirement

    Not sure when this happened, but suddenly sphinx is a requirement for this project. At least, when I run pip-compile --upgrade, I am seeing the following new requirements:

    snowballstemmer==2.1.0
        # via sphinx
    sphinx==4.2.0
        # via sphinx-rtd-theme
    sphinx-rtd-theme==0.5.2
        # via trading-ig
    sphinxcontrib-applehelp==1.0.2
        # via sphinx
    sphinxcontrib-devhelp==1.0.2
        # via sphinx
    sphinxcontrib-htmlhelp==2.0.0
        # via sphinx
    sphinxcontrib-jsmath==1.0.1
        # via sphinx
    sphinxcontrib-qthelp==1.0.3
        # via sphinx
    sphinxcontrib-serializinghtml==1.1.5
        # via sphinx
    

    I don't think sphinx should be necessary for running this library, and frankly is not a package I'm super happy to be adding as a requirement for my project.

    Is this perhaps a mistake on my end? I can't really see where the sphinx requirement is coming in, other than in https://github.com/ig-python/ig-markets-api-python-library/blob/master/pyproject.toml .

    opened by Doggie52 11
  • Error on LIVE, not on DEMO: KeyError: 'cst'

    Error on LIVE, not on DEMO: KeyError: 'cst'

    Dear @femtotrader, DEMO version is ok. When I change from DEMO to LIVE (username, password etc... are changed), I get the folloging error: KeyError: 'cst' (see below).

    Any help? Thank you in advance, Gilberto

    This is the error output:

    KeyError                                  Traceback (most recent call last)
    <ipython-input-10-de3f99b49acd> in <module>()
         74 
         75 if __name__ == '__main__':
    ---> 76     main()
    
    <ipython-input-10-de3f99b49acd> in main()
         34 
         35     ig_stream_service = IGStreamService(ig_service)
    ---> 36     ig_session = ig_stream_service.create_session()
         37     accountId = ig_session[u'accounts'][0][u'accountId']
         38     ig_stream_service.connect(accountId)
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/stream.py in create_session(self)
         19 
         20     def create_session(self):
    ---> 21         ig_session = self.ig_service.create_session()
         22         self.ig_session = ig_session
         23         return ig_session
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in create_session(self, session)
        942         action = 'create'
        943         # this is the first create (BASIC_HEADERS)
    --> 944         response = self._req(action, endpoint, params, session)
        945         data = self.parse_response(response.text)
        946         self.ig_session = data # store IG session
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in _req(self, action, endpoint, params, session)
        202         """Creates a CRUD request and returns response"""
        203         session = self._get_session(session)
    --> 204         response = self.crud_session.req(action, endpoint, params, session)
        205         return response
        206 
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in req(self, action, endpoint, params, session)
        119             'delete': self.delete
        120         }
    --> 121         return d_actions[action](endpoint, params, session)
        122 
        123     def _set_headers(self, response_headers, update_cst):
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in _create_first(self, endpoint, params, session)
         70                                 data=json.dumps(params),
         71                                 headers=self.HEADERS['BASIC'])
    ---> 72         self._set_headers(response.headers, True)
         73         self.create = self._create_logged_in
         74         return response
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in _set_headers(self, response_headers, update_cst)
        124         """Sets headers"""
        125         if update_cst:
    --> 126             self.CLIENT_TOKEN = response_headers['CST']
        127 
        128         if 'X-SECURITY-TOKEN' in response_headers:
    
    /Users/gb/anaconda/lib/python3.5/site-packages/requests/structures.py in __getitem__(self, key)
         52 
         53     def __getitem__(self, key):
    ---> 54         return self._store[key.lower()][1]
         55 
         56     def __delitem__(self, key):
    
    KeyError: 'cst'
    

    This is the main code (modules and credentials account imports are omitted):

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    """
    IG Markets Stream API sample with Python
    2015 FemtoTrader
    """
    
    import time
    import sys
    import traceback
    import logging
    
    from trading_ig import (IGService, IGStreamService)
    #from trading_ig.config import config
    from trading_ig.lightstreamer import Subscription
    
    
    # A simple function acting as a Subscription listener
    def on_prices_update(item_update):
        # print("price: %s " % item_update)
        print("{stock_name:<19}: Time {UPDATE_TIME:<8} - "
              "Bid {BID:>5} - Ask {OFFER:>5}".format(stock_name=item_update["name"], **item_update["values"]))
    
    def on_account_update(balance_update):
        print("balance: %s " % balance_update)
    
    def main():
        logging.basicConfig(level=logging.INFO)
        # logging.basicConfig(level=logging.DEBUG)
    
        #ig_service = IGService(config.username, config.password, config.api_key, config.acc_type)
        ig_service = IGService(username, password, api_key, acc_type)
    
        ig_stream_service = IGStreamService(ig_service)
        ig_session = ig_stream_service.create_session()
        accountId = ig_session[u'accounts'][0][u'accountId']
        ig_stream_service.connect(accountId)
    
        # Making a new Subscription in MERGE mode
        subcription_prices = Subscription(
            mode="MERGE",
            items=['L1:CS.D.GBPUSD.CFD.IP', 'L1:CS.D.USDJPY.CFD.IP'],
            fields=["UPDATE_TIME", "BID", "OFFER", "CHANGE", "MARKET_STATE"],
            )
            #adapter="QUOTE_ADAPTER")
    
    
        # Adding the "on_price_update" function to Subscription
        subcription_prices.addlistener(on_prices_update)
    
        # Registering the Subscription
        sub_key_prices = ig_stream_service.ls_client.subscribe(subcription_prices)
    
    
        # Making an other Subscription in MERGE mode
        subscription_account = Subscription(
            mode="MERGE",
            items='ACCOUNT:'+accountId,
            fields=["AVAILABLE_CASH"],
            )
        #    #adapter="QUOTE_ADAPTER")
    
        # Adding the "on_balance_update" function to Subscription
        subscription_account.addlistener(on_account_update)
    
        # Registering the Subscription
        sub_key_account = ig_stream_service.ls_client.subscribe(subscription_account)
    
        input("{0:-^80}\n".format("HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM \
        LIGHTSTREAMER"))
    
        # Disconnecting
        ig_stream_service.disconnect()
    
    if __name__ == '__main__':
        main()
    
    opened by alienoia 10
  • error.security.client-token-invalid in create_session()

    error.security.client-token-invalid in create_session()

    It happens after an application is idle for some time. Doing logout() does not help.

    Any ideas?

    See some logs below:
    create_session()
      File "/usr/lib/python3.6/site-packages/trading_ig/rest.py", line 1093, in create_session
        data = self.parse_response(response.text)
      File "/usr/lib/python3.6/site-packages/trading_ig/rest.py", line 236, in parse_response_with_exception
        raise(Exception(response['errorCode']))
    Exception: error.security.client-token-invalid
    
    opened by abialy 9
  • Replace bunch by munch

    Replace bunch by munch

    Use Munch instead of Bunch

    Bunch does not detect python version in python3_compat file. Bunch uses platform.version() instead of sys.version_info. As a result, the python version is set as 2 instead of 3 and generates the following error.

    Traceback (most recent call last):
      File "api_test.py", line 1, in <module>
        from trading_ig import IGService
      File ".../site-packages/trading_ig/__init__.py", line 17, in <module>
        from .rest import IGService
      File ".../site-packages/trading_ig/rest.py", line 15, in <module>
        from .utils import (_HAS_PANDAS, _HAS_BUNCH)
      File ".../site-packages/trading_ig/utils.py", line 21, in <module>
        from infi.bunch import bunchify
      File ".../site-packages/infi/bunch/__init__.py", line 31, in <module>
        from .python3_compat import *
      File ".../site-packages/infi/bunch/python3_compat.py", line 20, in <module>
        iteritems = dict.iteritems
    AttributeError: type object 'dict' has no attribute 'iteritems'
    
    opened by cimourdain 9
  •  [SSL: CERTIFICATE_VERIFY_FAILED]

    [SSL: CERTIFICATE_VERIFY_FAILED]

    Hi, i am testing stream_ig.py and I got this issue

    OError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
    

    ideas?

    thanks

    opened by oliveriopt 9
  • Pandas object to_offset is unhashable

    Pandas object to_offset is unhashable

    https://github.com/ig-python/ig-markets-api-python-library/blob/b5799390752551f28038c258684259636ede8c8f/trading_ig/utils.py#L38

    TypeError: unhashable type: 'pandas._libs.tslibs.offsets.Minute'

    opened by Weizhang2017 8
  • I'm getting lightstreamer deamon not available, what should I do?

    I'm getting lightstreamer deamon not available, what should I do?

    Is there some package I need to install? This is the warning:

    WARNING:trading_ig.lightstreamer:systemd.daemon not available, no watchdog notifications will be sent.
    
    opened by jappeace 8
  • ValueError: columns cannot be a set

    ValueError: columns cannot be a set

    I'm trying to update my code to use the latest version of trading_ig and I'm getting the error below. Can anyone help please? Python 3.10 Pandas 1.5.2 File "site-packages/trading_ig/rest.py", line 895, in fetch_open_positions data = pd.DataFrame(columns=self.colname_unique(cols)) File "site-packages/pandas/core/frame.py", line 639, in init raise ValueError("columns cannot be a set") ValueError: columns cannot be a set

    opened by oliverpolden 3
  • can stream account info but not prices info

    can stream account info but not prices info

    Hi, the following code tries to stream two things :

    • some info on my account
    • some prices

    while the account info are streamed correctly, it seems I never receive the price data, do you know why ? would it be because the config I tried is my demo account config ?

    Thanks in advance

            
    import logging
    
    from trading_ig import IGService, IGStreamService
    from trading_ig.config import config
    from trading_ig.lightstreamer import Subscription
    
    
    def on_prices_update(item_update):
        print("---------- tag on prices update")
        if 0:print("price: %s " % item_update)
        if 0:print(
            "{stock_name:<19}: Time {UPDATE_TIME:<8} - "
            "Bid {BID:>5} - Ask {OFFER:>5}".format(
                stock_name=item_update["name"], **item_update["values"]
            )
        )
    
    def on_update(item):
        print("{UPDATE_TIME:<8} {stock_name:<19} Bid {BID:>5} Ask {OFFER:>5}".format(stock_name=item["name"], **item["values"]))
    
    def on_account_update(balance_update):
        print("---------- tag on account update")
        print("balance: %s " % balance_update)
    
    if 1:logging.basicConfig(level=logging.INFO)
    if 0:logging.basicConfig(level=logging.DEBUG)
    ig_service = IGService(config.username, config.password, config.api_key, config.acc_type, acc_number=config.acc_number)
    ig_stream_service = IGStreamService(ig_service)
    if 1:ig_stream_service.create_session()
    if 0:ig_stream_service.create_session(version='3')
    
    # subscription prices
    subscription_prices = Subscription(
        mode="MERGE",
        #items=["L1:CS.D.GBPUSD.CFD.IP", "L1:CS.D.USDJPY.CFD.IP"], # sample CFD epics
        #items=["L1:CS.D.GBPUSD.TODAY.IP", "L1:IX.D.FTSE.DAILY.IP"], # sample spreadbet epics
        items=["CS.D.EURUSD.MINI.IP"],
        fields=["UPDATE_TIME", "BID", "OFFER", "CHANGE", "MARKET_STATE"],
    )
    if 0:subscription_prices.addlistener(on_prices_update)
    if 1:subscription_prices.addlistener(on_prices2_update)
    sub_key_prices = ig_stream_service.ls_client.subscribe(subscription_prices)
    
    # subscription account
    subscription_account = Subscription(mode="MERGE", items=["ACCOUNT:" + config.acc_number], fields=["AVAILABLE_CASH"],)
    subscription_account.addlistener(on_account_update)
    sub_key_account = ig_stream_service.ls_client.subscribe(subscription_account)
    
    input(
        "{0:-^80}\n".format(
            "HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM \
    LIGHTSTREAMER"
        )
    )
    
    # Disconnecting
    ig_stream_service.disconnect()
    
    opened by xiajya 0
  • IG Rest API gives error.security.client-token-invalid after 13-14 hours of continuous usage

    IG Rest API gives error.security.client-token-invalid after 13-14 hours of continuous usage

    I observed that the IG Rest API gives the error.security.client-token-invalid error after 13-14 hours of continuous usage in the demo account.

    I would appreciate guidance on possible ways to overcome this error.

    Thank you.

    opened by MilindRCodes 5
  • Create working order with force_open parameter

    Create working order with force_open parameter

    Hi all,

    I found a bug in the rest.py, create_working_order method:

        if force_open:
            params["forceOpen"] = 'true'
    

    it needs to be:

        if force_open:
            params["forceOpen"] = 'true'
        else:
            params["forceOpen"] = 'false'
    

    as IG's default forceOpen is true. when even the method defaults force_open as False, but it is not offsetting position.

    opened by jackyclever 1
  • pycryptodome lib deprecated

    pycryptodome lib deprecated

    bandit, the static code analysis library for Python, reports that the pycryptodome library has been deprecated, and that we should be using cryptography instead:

    https://bandit.readthedocs.io/en/1.7.4/blacklists/blacklist_imports.html#b413-import-pycrypto

    opened by bug-or-feature 0
Releases(0.0.19)
  • 0.0.19(Jan 5, 2023)

    • fix for 'ValueError: columns cannot be a set' error with pandas 1.5.2+ (PR #267)
    • fetch_historical_prices*() methods improvements (Issue #272)
    • remove requirements status badge (Issue #259)
    • publish with API token (Issue #260)
    • specify importlib-metadata version to prevent flake8 problems with python 3.7
    • updating github actions to latest versions
    Source code(tar.gz)
    Source code(zip)
  • 0.0.18(Aug 23, 2022)

  • 0.0.17(Jan 26, 2022)

  • 0.0.16(Jan 1, 2022)

    • fix for http error 405 response from IG when confirming deal (PR#237)
    • updating Poetry for automated testing
    • removing some unused legacy project config
    • removing support for unsupported Python 3.6, adding 3.10
    • better handling and docs for optional dependencies (#216, #240)
    • fixing occasional KeyError when deleting session headers (#238)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.15(Oct 19, 2021)

  • 0.0.14(Oct 4, 2021)

    • fixes the bug where guaranteed stop loss was replaced with a normal stop loss on working order update (#224)
    • legacy 'setup.py' style project config files removed
    Source code(tar.gz)
    Source code(zip)
  • 0.0.13(Oct 2, 2021)

  • 0.0.12(Jul 28, 2021)

  • 0.0.11(Jul 19, 2021)

    0.0.11

    • code samples improved, new FAQ
    • Adds support for update open position v2
    • new function to calculate mid prices for historic data
    • Adds support for getting and updating account prefs
    • Adds support for /markets endpoint for getting details of multiple markets
    • new sample script to traverse navigation tree and get epics, new FAQ
    Source code(tar.gz)
    Source code(zip)
  • 0.0.10(Jul 10, 2021)

    0.0.10

    • simplified request headers: requests.Session now handles persistence
    • adds support for v3 session creation (#157)
    • implementation and test for fetch_working_orders() v2 (like PR #187)
    • adds support for fetch_historical_prices_by_epic_and_date_range() v2
    • adds support for fetch_open_positions() v2
    • dependency management with Python Poetry (#149)
    • more robust handling of IG API rate limits
    • support for all the /history/activity endpoints
    • better test coverage. now 80% for rest.py (#38)
    • documentation improvements
    Source code(tar.gz)
    Source code(zip)
  • 0.0.9(Mar 19, 2021)

    0.0.9

    • integration and unit tests improved
    • remove reference to adapter (#190)
    • pandas 1.2.0 (#184)
    • paged historical data can be captured with one request (#183)
    • paging fixed for historical data (#175)
    • error fixed when closing stream (#174)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.8(Oct 23, 2020)

    • docs restructured and reintegrated with readthedocs.io
    • Fix for a bug in 'expand-columns()' that would cause an error if values were missing/null
    • unit tests for v3 historic prices method
    • Tidy up usage of "version" across the REST API to make it consistent
    • Marked methods that use an outdated version with TODOs
    • Fixed issues with switch_account(), delete_working_order() etc. which were not specifying a version correctly
    • unit tests for v1, v2 historic prices methods
    • allowing historic prices format to be defined at runtime
    • new optional flatter format for historic prices
    • release notes
    Source code(tar.gz)
    Source code(zip)
Owner
IG Python
A GitHub organization for Python developers who use IG Markets REST and Stream API. This organization is not related to IG Markets.
IG Python
Lazy airdrop based on private temporary ids

LobsterDAO This uses a modified MerkleDistributor, which allows to issue a lazy airdrop using temporary IDs. In this example it uses Telegram chat_id

41 Sep 10, 2022
Discord group chat leaver.

Discord group chat leaver I know many people who have fallen victim to these weird group chat spammers including me. I made this script to help those

cliphd 3 Feb 27, 2022
Python API client library for phpIPAM installations

phpypam: Python API client library for phpIPAM installation As we started to develop phpipam-ansible-modules we used an existing python library for ph

codeaffen 3 Aug 03, 2022
NFT Generator: A modular NFT generator application

NFT Generator A simple passion project done with the role to learn a bit about h

2 Aug 30, 2022
Translator based on Google API

Yakusu Toshiko Translator based on Google API. Instance of this bot is running as @yakusubot. Features Add a plus to a language's name to show an orig

Arisu W. 2 Sep 21, 2022
And now, for the first time, you can send alerts via action from ArcSight ESM Console to the TheHive when Correlation Rules are triggered.

ArcSight Integration with TheHive And now, for the first time, you can send alerts via action from ArcSight ESM Console to the TheHive when Correlatio

Amir Hossein Zargaran 3 Jan 19, 2022
Docker image for epicseven gvg qq chatbot based on Xunbot

XUN_Langskip XUN 是一个基于 NoneBot 和 酷Q 的功能型QQ机器人,目前提供了音乐点播、音乐推荐、天气查询、RSSHub订阅、使用帮助、识图、识番、搜番、上车、磁力搜索、地震速报、计算、日语词典、翻译、自我检查,权限等级功能,由于是为了完成自己在群里的承诺,一时兴起才做的,所

Xavier Xiong 2 Jun 08, 2022
Chatbot with python code!

Chatbot Python Chatbot with python! How to Run Installation requirements. pip install -r requirements.txt Sample Chatbot The required files must be d

Mohammad Dori 3 Jul 15, 2022
Inline Телеграм бот для отправки GIF-изображений из ВКонтакте

VK GIFS Bot VKGIFSBot - удобный бот для отправки GIF-изображений из ВКонтакте в Телеграмe. Работает это очень просто: бот получает токен ВКонтакте API

Sergievsky Nikita 5 Dec 10, 2022
Facebook Clooning Tool BD...

Facebook Clooning Tool BD...

Ariyan Ahmed Mamun 2 Feb 16, 2022
Python Library for Accessing the Cohere API

Cohere Python SDK This package provides functionality developed to simplify interfacing with the Cohere API in Python 3. Documentation See the API's d

cohere.ai 42 Jan 03, 2023
Discord Voice Call DoS

VC DoS Simple, effective Discord DM/GC voice call Denial of Service. How to Use & FAQ 1. Download the script (obviously). 2. In CMD prompt, find the l

Roover 4 Feb 28, 2022
Karen is a Discord Bot that will check for a list of forbidden words/expressions, removing the message that contains them and replying with another message.

Karen is a Discord Bot that will check for a list of forbidden words/expressions, removing the message that contains them and replying with another message. Everything is highly customizable.

Rafael Almeida 1 Nov 03, 2021
Telegram 聊天機器人,追蹤momo降價、重新上架

簡介 price-tracker-bot is a telegram bot that can trace the price on momoshop. 功能 降價通知 上架通知 收藏商品 清空已收藏商品 顯示目前已收藏商品 Demo Bot Telegram bot search @momo_pr

92 Dec 28, 2022
A Telegram Repo For Devs To Controll The Bots Under Maintenance.This Bot Is For Developers, If Your Bot Is Down, Use This Repo To Give Your Dear Subscribers Some Support By Providing Them Response.

Maintenance Bot A Telegram Repo For Devs To Controll The Bots Under Maintenance About This Bot This Bot Is For Developers, If Your Bot Is Down, Use Th

Vɪᴠᴇᴋ 47 Dec 29, 2022
It connects to Telegram's API. It generates JSON files containing channel's data, including channel's information and posts.

It connects to Telegram's API. It generates JSON files containing channel's data, including channel's information and posts. You can search for a specific channel, or a set of channels provided in a

Esteban Ponce de Leon 75 Jan 02, 2023
The official Python client library for the Kite Connect trading APIs

The Kite Connect API Python client - v3 The official Python client for communicating with the Kite Connect API. Kite Connect is a set of REST-like API

Zerodha Technology 756 Jan 06, 2023
Python library for Seeedstudio Grove devices

grove.py Python library for Seeedstudio Grove Devices on embeded Linux platform, especially good on below platforms: Coral Dev Board (Wiki) NVIDIA Jet

Seeed Studio 123 Dec 17, 2022
Access LeetCode problems via id

LCid - access LeetCode problems via id Introduction As a world's leading online programming learning platform, LeetCode is quite popular among program

bunnyxt 14 Oct 08, 2022