Airbrake Python

Overview

airbrake-python

Note. Python 3.4+ are advised to use new Airbrake Python notifier which supports async API and code hunks. Python 2.7 users should continue to use this notifier.

Airbrake integration for python that quickly and easily plugs into your existing code.

import airbrake

logger = airbrake.getLogger()

try:
    1/0
except Exception:
    logger.exception("Bad math.")

airbrake-python is used most effectively through its logging handler, and uses the Airbrake V3 API for error reporting.

install

To install airbrake-python, run:

$ pip install -U airbrake

setup

The easiest way to get set up is with a few environment variables:

export AIRBRAKE_API_KEY=*****
export AIRBRAKE_PROJECT_ID=12345
export AIRBRAKE_ENVIRONMENT=dev

and you're done!

Otherwise, you can instantiate your AirbrakeHandler by passing these values as arguments to the getLogger() helper:

import airbrake

logger = airbrake.getLogger(api_key=*****, project_id=12345)

try:
    1/0
except Exception:
    logger.exception("Bad math.")

By default, airbrake will catch and send uncaught exceptions. To avoid this behvaiour, use the send_uncaught_exc option: logger = airbrake.getLogger(api_key=*****, project_id=12345, send_uncaught_exc=False)

setup for Airbrake On-Premise and other compatible back-ends (e.g. Errbit)

Airbrake Enterprise and self-hosted alternatives, such as Errbit, provide a compatible API.

You can configure a different endpoint than the default (https://api.airbrake.io) by either:

  • Setting an environment variable:
export AIRBRAKE_HOST=https://self-hosted.errbit.example.com/
  • Or passing a host argument to the getLogger() helper:
import airbrake

logger = airbrake.getLogger(api_key=*****, project_id=12345, host="https://self-hosted.errbit.example.com/")

adding the AirbrakeHandler to your existing logger

import logging

import airbrake

yourlogger = logging.getLogger(__name__)
yourlogger.addHandler(airbrake.AirbrakeHandler())

by default, the AirbrakeHandler only handles logs level ERROR (40) and above

Additional Options

More options are available to configure this library.

For example, you can set the environment to add more context to your errors. One way is by setting the AIRBRAKE_ENVIRONMENT env var.

export AIRBRAKE_ENVIRONMENT=staging

Or you can set it more explicitly when you instantiate the logger.

import airbrake

logger = airbrake.getLogger(api_key=*****, project_id=12345, environment='production')

The available options are:

  • environment, defaults to env var AIRBRAKE_ENVIRONMENT
  • host, defaults to env var AIRBRAKE_HOST or https://api.airbrake.io
  • root_directory, defaults to None
  • timeout, defaults to 5. (Number of seconds before each request times out)
  • send_uncaught_exc, defaults to True (Whether or not to send uncaught exceptions)

giving your exceptions more context

import airbrake

logger = airbrake.getLogger()

def bake(**goods):
    try:
        temp = goods['temperature']
    except KeyError as exc:
        logger.error("No temperature defined!", extra=goods)

Setting severity

[Severity][what-is-severity] allows categorizing how severe an error is. By default, it's set to error. To redefine severity, simply build_notice with the needed severity value. For example:

notice = airbrake.build_notice(exception, severity="critical")
airbrake.notify(notice)

Using this library without a logger

You can create an instance of the notifier directly, and send errors inside exception blocks.

from airbrake.notifier import Airbrake

ab = Airbrake(project_id=1234, api_key='fake')

try:
    amazing_code()
except ValueError as e:
    ab.notify(e)
except:
    # capture all other errors
    ab.capture()

Running Tests Manually

Create your environment and install the test requirements

virtualenv venv
source venv/bin/activate
pip install .
python setup.py test

To run via nose (unit/integration tests):

source venv/bin/activate
pip install -r ./test-requirements.txt
source venv/bin/activate
nosetests

Run all tests, including multi-env syntax, and coverage tests.

pip install tox
tox -v --recreate

It's suggested to make sure tox will pass, as CI runs this. tox needs to pass before any PRs are merged.


The airbrake.io api docs used to implement airbrake-python are here: https://airbrake.io/docs/api/

[[what-is-severity]: https://airbrake.io/docs/airbrake-faq/what-is-severity/]

Comments
  • Add local variables at each backtrace line.

    Add local variables at each backtrace line.

    Note: This is a question I got from Adam Easterling via Support.


    One thing that I frequently find myself wanting is a stack trace that includes local variables at each stack frame. In Python, all that information is there -- however, it looks like your API doesn't have a place for this information.

    I asked Codebase for your API documentation, and they directed me to version 2.3, https://help.airbrake.io/kb/api-2/notifier-api-version-23

    */notice/error/backtrace/line*
    
    Required. This element can occur more than once. Each line element 
    describes one code location or frame in the backtrace when the error 
    occurred, and requires @file and @number attributes. If the location 
    includes a method or function, the @method attribute should be used. 
    

    Notice, there's not really a place to include local variables at each backtrace line.

    @vmihailenco Could we add this into V3? https://help.airbrake.io/kb/api-2/notifier-api-v3

    opened by benarent 17
  • packaging and CI refactor

    packaging and CI refactor

    Among other things, this change adds a circle.yml file so we can start testing airbrake-python using CircleCI which is free for open source projects like this one.

    The python versions I have configured for testing are:

    • 2.7.9
    • 2.7.10
    • 3.3.3
    • 3.4.3
    • 3.5.0

    I have a passing CircleCI build on my fork against the code in this pull request: https://circleci.com/gh/samstav/airbrake-python/12

    opened by stavxyz 10
  • Duck type traceback type

    Duck type traceback type

    Easier to create fake tracebacks for custom logging. If you want to create a traceback that has a custom / modified trace, airbrake will not treat it accordingly since it does a type check against types.TracebackType. This is overly cautionary since the object is just handed off to methods in the traceback module which work appropriately on duck-typed object

    Inspired by this stack overflow question: http://stackoverflow.com/questions/13210436/get-full-traceback

    opened by pfhayes 7
  • Silence the stderr git warning when running from a non-git directory

    Silence the stderr git warning when running from a non-git directory

    When running from a non-git directory the process will print fatal: Not a git repository (or any of the parent directories): .git to stderr once every minute or so. In our case we use a carefully packaged Docker container which excludes the git directory to keep the sizes smaller. This pull request silences that warning and maintains the same functionality (returning None)

    A test was also added to reproduce the issue while troubleshooting, though it was unable to capture the existing subprocess stderr so could not assert there will not be a regression. The new test will, however, display the fatal: Not a git repository (or any of the parent directories): .git warning when running test tests if there is a regression in the future.

    opened by mzsanford 5
  • Don't fail when 'extra' in log records contain non JSON serializable objects

    Don't fail when 'extra' in log records contain non JSON serializable objects

    Hi! It's me again.

    I plugged the Airbrake handler to the logging of an existing django project, and noticed that airbrake notifications were not being sent after triggering errors in the webapp. The reason was that Django, when logging errors, sends along information in the extra argument that is not any of the basic JSON types (basically every object except string, int, list, dict, etc).

    This was causing a TypeError('X is not JSON serializable') in notifier.py when executing json.dumps(payload)

    The purpose of this PR, is to use repr(object) for any param that is not JSON serializable.

    Notice that this scenario might be pretty common also outside the context of Django.

    Tests and linters green: https://circleci.com/gh/argos83/airbrake-python/11

    opened by argos83 5
  • V1.1.0 updates

    V1.1.0 updates

    Some long needed updates. Improves usability and leverages more of the datapoints available through the airbrake error reporting API. Includes a helper for fetching a logger object, pre-configured with an AirbrakeHandler, and many other improvements.

    Updated the README to reflect the simplified interface.

    opened by stavxyz 5
  • Set TLS verify

    Set TLS verify

    I set up Errbit in AWS and made the endpoint private for testing, then access the endpoint from EKS. I know we should always verify TLS, but as for especially testing, we should have an option to skip verification. Could you consider merging this feature?

    opened by dtaniwaki 4
  • describeexctipn for airbrake?

    describeexctipn for airbrake?

    How would i add airbrake code with logger i already added this

    import airbrake
    logger = airbrake.getLogger(api_key=myapikeyishiddenforprivacy:), project_id=234209)
    now i at the end of my game starter i have this
    autoRun = ConfigVariableBool('toontown-auto-run', 1)
    if autoRun:
        try:
            base.run()
        except SystemExit:
            raise
        except:
            print describeException()
            raise
    

    now how would i add logger.exception properly after describeexception so i report crashes to airbrake every time a person who plays my game crashes :)

    opened by MichaelGDev48 4
  • Asyncio support?

    Asyncio support?

    Hi thanks for good tool and battery!

    Asyncio/aiohttp stack is rapidly growing in usage and it will be really nice if library add support for async transport.

    If you consider it as an addition i can create PR.

    opened by hzlmn 3
  • Support for Python logging.config.fileConfig

    Support for Python logging.config.fileConfig

    Hi

    I'm rather new to logging with Python (and Pyramid in particular). How do I configure the logging facility to use Airbrake?

    According to 16.8. logging.config of the Python 3 library a config file should contain this:

    ...
    [handlers]
    keys = ..., airbrake
    
    [logger_myapp]
    level = <something>
    handlers = airbrake
    ...
    
    [handler_airbrake]
    class = 
    args = 
    level = 
    

    Now, what value should class, args and level take? I could think of these but I have no clue if they'd even make sense syntactically:

    [handler_airbrake]
    # Because it implementes the Python handler interface?
    class = airbrake.handler.AirbrakeHandler
    # Don't know, just guessing
    args = {'airbrake':None, 'level':NOTSET, 'project_id': 'myapp', 'api_key': myairbrakekey }
    # Delegate decision over log level to logger. For convenience only
    level = NOTSET
    
    opened by lusitania 3
  • Fix commit hash retrieval.

    Fix commit hash retrieval.

    Before, the commit hash looks like "b'8cfe34106cc8ade9da14c932523b9c5e62c0c295'" Now it looks like '8cfe34106cc8ade9da14c932523b9c5e62c0c295'

    opened by JThinkable 2
  • Make sure capture() does not drop stack frames

    Make sure capture() does not drop stack frames

    In the following example flask app, we have a report that using capture() will not report the appropriate handlers that raised the error (when running on uwsgi). Using notify() solved this problem.

    from flask import Flask, jsonify
    from airbrake.notifier import Airbrake
    
    app = Flask(__name__)
    ab = Airbrake(project_id=2, api_key='5a00a5340e6cac4def2262adb4ded8a4', host="http://getexceptional.me.ab")
    
    @app.errorhandler(Exception)
    def handle_error(e):
        ab.notify(e)
        return jsonify(error=str(e)), 500
    
    @app.route('/hello')
    def hello_world():
        raise Exception("Hello world failed")
        return 'Hello, World!'
    
    @app.route('/ping')
    def ping():
        raise Exception("ping failed")
        return 'Ping!'
    
    if __name__ == '__main__':
        app.run()
    
    opened by zachgoldstein 0
  • Notice.py initialiser should use str in message

    Notice.py initialiser should use str in message

    From https://github.com/airbrake/airbrake-python/pull/76#discussion_r113081044

    I think what I'm really trying to say is, if I did something silly/wrong like pass a string to Notice as the exception argument, then I would expect it to either 1) fail or 2) end up as the error message (or _somewhere) in airbrake.

    When passed a string, I think the initialiser should use that in the error message. More generally, we could probably clean up __init__ in notice.py so that it's more clear what it's doing.

    enhancement 
    opened by zachgoldstein 5
  • Add failback for stacktraces from exceptions

    Add failback for stacktraces from exceptions

    Right now we don't pick up stacktraces from bare exceptions. I think we should make an effort to do this, even though there is no guarantee that sys.exc_info() will pick up anything. In python 3.5+ we have exception.__traceback__, so we should also use this if it's available. This will also simplify some of the work in integrations.

    enhancement 
    opened by zachgoldstein 1
  • Add regex for filtering keys

    Add regex for filtering keys

    As mentioned in https://github.com/airbrake/airbrake-python/pull/67#discussion_r105037391. We have this in the ruby notifier, and we should add it here as well.

    enhancement 
    opened by zachgoldstein 0
Releases(v2.2.0)
  • v2.2.0(Jun 17, 2021)

    Commits

    d970443 :heavy_minus_sign: Update lint for tls verify :small_blue_diamond: Daisuke Taniwaki 59c6fbe :heavy_minus_sign: Utilize requests session to apply the verify setting throughout the instance lifecycle :small_blue_diamond: Daisuke Taniwaki 174f92b :heavy_minus_sign: Set tls verify :small_blue_diamond: Daisuke Taniwaki 9c6083d :heavy_minus_sign: Remove arthur python jpg. Use current Airbrake logo :small_blue_diamond: Patrick Humpal 6f910ae :heavy_minus_sign: Deprecate use of Python3.4 :small_blue_diamond: Patrick Humpal


    https://pypi.python.org/pypi/airbrake/2.2.0

    Source code(tar.gz)
    Source code(zip)
  • v2.1.2(Mar 5, 2019)

    Commits

    c0d83a0 :heavy_minus_sign: Update Airbrake api endpoint :small_blue_diamond: Patrick Humpal


    https://pypi.python.org/pypi/airbrake/2.1.2

    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Mar 5, 2019)

    Commits

    45a2c74 :heavy_minus_sign: Upgrade requests :small_blue_diamond: Patrick Humpal 713df8e :heavy_minus_sign: Fix pyenv for CircleCI builds 🔹 Patrick Humpal


    https://pypi.python.org/pypi/airbrake/2.1.1

    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Aug 3, 2017)

    Commits

    e1ab851 :heavy_minus_sign: Send uncaught exceptions by default :small_blue_diamond: Zach Goldstein 629a421 :heavy_minus_sign: Move 'severity' field from errors[] to context :small_blue_diamond: tuttieee 6efe49e :heavy_minus_sign: Silence the stderr git warning when running from a non-git directory :small_blue_diamond: mzsanford c9ad35b :heavy_minus_sign: Accept unicode error messages :small_blue_diamond: sirdodger


    https://pypi.python.org/pypi/airbrake/2.1.0

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Mar 27, 2017)

    Commits

    2c8a114 :heavy_minus_sign: Remove hardcoded test version use :small_blue_diamond: Zach Goldstein d06327f :heavy_minus_sign: Bump major version to 2.0.0 :small_blue_diamond: Zach Goldstein 44bebd1 :heavy_minus_sign: Add capture decorator :small_blue_diamond: Zach Goldstein 963688e :heavy_minus_sign: Add error severity and integrate into logging :small_blue_diamond: Zach Goldstein 51b9303 :heavy_minus_sign: Set default root_directory (#68) :small_blue_diamond: Zach Goldstein 60af090 :heavy_minus_sign: Add user data to context payload (#70) :small_blue_diamond: Zach Goldstein f8b055f :heavy_minus_sign: Set the git revision in deploys if it's available locally (#64) :small_blue_diamond: Zach Goldstein ff2cdde :heavy_minus_sign: Add list-based filters (white/black) :small_blue_diamond: Zach Goldstein 2a5c267 :heavy_minus_sign: Add convenience method capture () for most recent exception :small_blue_diamond: Zach Goldstein bbfb031 :heavy_minus_sign: Feature/add separate notice obj :small_blue_diamond: Zach Goldstein 1f9fbc1 :heavy_minus_sign: Add timeout :small_blue_diamond: Zach Goldstein cb9c3e8 :heavy_minus_sign: Add readme notes for running tests manually :small_blue_diamond: Zach Goldstein 99ba7e9 :heavy_minus_sign: Add hostname to context and allow env override :small_blue_diamond: Zach Goldstein 7ac77ff :heavy_minus_sign: Upgrade to use v4 deploy endpoint fix :small_blue_diamond: Zach Goldstein


    https://pypi.python.org/pypi/airbrake/2.0.0

    Source code(tar.gz)
    Source code(zip)
  • v1.3.3(Jun 9, 2016)

    Commits

    2502c91 :heavy_minus_sign: bump to 1.3.3 for notify fix :small_blue_diamond: Sam Stavinoha fbc78dc :heavy_minus_sign: Fix Airbrake.notify regression :small_blue_diamond: Lars Butler


    https://pypi.python.org/pypi/airbrake/1.3.3

    Source code(tar.gz)
    Source code(zip)
  • v1.3.2(Apr 13, 2016)

    Commits

    c806a27 :heavy_minus_sign: bump to version 1.3.2 for traceback duck-typing :small_blue_diamond: Sam Stavinoha 6a5b9b9 :heavy_minus_sign: Fix tests, lint :small_blue_diamond: Patrick Hayes 34c93ac :heavy_minus_sign: Traceback tests :small_blue_diamond: Patrick Hayes b96e425 :heavy_minus_sign: Duck type traceback type :small_blue_diamond: Patrick Hayes


    https://pypi.python.org/pypi/airbrake/1.3.2

    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Apr 4, 2016)

    Commits

    887dd41 :heavy_minus_sign: call JSONEncoder.default(o) if repr(o) raises an exception :small_blue_diamond: Seba 12b9519 :heavy_minus_sign: Comment about inline pylint disable :small_blue_diamond: Sebastian Tello 0577541 :heavy_minus_sign: Moved pylint disable comment inline :small_blue_diamond: Seba 1d7b191 :heavy_minus_sign: Don't fail when 'extra' in log records contain non JSON serializable objects :small_blue_diamond: Seba 5421b8c :heavy_minus_sign: @phumpal README.md suggestions :small_blue_diamond: Sebastian Tello fa231cf :heavy_minus_sign: fixed: E704 multiple statements on one line :small_blue_diamond: Seba 3c90a20 :heavy_minus_sign: Fixed: E501 line too long :small_blue_diamond: Seba 13c0a7a :heavy_minus_sign: Fix: E731 do not assign a lambda expression, use a def :small_blue_diamond: Seba fa2f35e :heavy_minus_sign: Link to errbit in readme doc :small_blue_diamond: Sebastian Tello fb849f2 :heavy_minus_sign: fixed version increment :small_blue_diamond: Sebastian Tello ac6345e :heavy_minus_sign: Added support to Airbrake alternatives by accepting a base uri :small_blue_diamond: Sebastian Tello e50ca3b :heavy_minus_sign: bump version to 1.2.1 :small_blue_diamond: Sam Stavinoha bac97df :heavy_minus_sign: add python 3.3 to classifiers :small_blue_diamond: Sam Stavinoha a708b26 :heavy_minus_sign: linting import order :small_blue_diamond: Sam Stavinoha e472eef :heavy_minus_sign: libraries shouldnt do this :small_blue_diamond: Sam Stavinoha 266634b :heavy_minus_sign: wheeeeels :small_blue_diamond: Sam Stavinoha ff0c571 :heavy_minus_sign: custom exceptions :small_blue_diamond: Sam Stavinoha a777b5f :heavy_minus_sign: nosetests dont run real_test.py :small_blue_diamond: Sam Stavinoha ea2db99 :heavy_minus_sign: pass gates :small_blue_diamond: Sam Stavinoha dcad4ec :heavy_minus_sign: level-up testing and CI config :small_blue_diamond: Sam Stavinoha be8dec3 :heavy_minus_sign: fixup pkg metadata and setup.py :small_blue_diamond: Sam Stavinoha 949f184 :heavy_minus_sign: update and pin requirements :small_blue_diamond: Sam Stavinoha 0fdadcd :heavy_minus_sign: Fixing arguments erroneously given as kw-parameter :small_blue_diamond: lusitania


    https://pypi.python.org/pypi/airbrake/1.3.1

    Source code(tar.gz)
    Source code(zip)
  • v1.1.4(Aug 2, 2015)

    Commits:

    c038b31 :heavy_minus_sign: Signature change as proposed in issue #16 :small_blue_diamond: lusitania 4d25174 :heavy_minus_sign: Py3 exception logging, issue #17 :small_blue_diamond: lusitania 2a11ea0 :heavy_minus_sign: Revert "Py3 exception logging, issue #17" :small_blue_diamond: lusitania ef6dd58 :heavy_minus_sign: Py3 exception logging, issue #17 :small_blue_diamond: lusitania 2f30619 :heavy_minus_sign: Updated setuptools classifiers :small_blue_diamond: lusitania 29aa385 :heavy_minus_sign: Py3 changes, Py2 backwards compatibility fix :small_blue_diamond: lusitania 19d8764 :heavy_minus_sign: Don't overwrite a custom message :small_blue_diamond: Yoriyasu Yano 7eda24a :heavy_minus_sign: Checking the Logger for existing AirbrakeHandlers. :small_blue_diamond: John Keyes 11c2b1f :heavy_minus_sign: Splitting requirements. :small_blue_diamond: John Keyes 6938b55 :heavy_minus_sign: Ensuring an Airbrake logger doesn't have multiple AirbrakeHandlers. :small_blue_diamond: John Keyes 60a2858 :heavy_minus_sign: Adding requirements.txt :small_blue_diamond: John Keyes 0824715 :heavy_minus_sign: Adding support to pass session and environment via extra parameters. :small_blue_diamond: John Keyes


    https://pypi.python.org/pypi/airbrake/1.1.4

    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(Aug 20, 2014)

  • v1.1.2(Aug 13, 2014)

  • v1.1.1(Aug 13, 2014)

Owner
Airbrake
Visibility into your Application's Health
Airbrake
A simple python script where the user inputs the current ingredients they have in their kitchen into ingredients.txt

A simple python script where the user inputs the current ingredients they have in their kitchen into ingredients.txt and then runs the main.py script, and it will output what recipes can be created b

Jordan Leich 3 Nov 02, 2022
A responsive package for Buttons, DropMenus and Combinations

A responsive package for Buttons, DropMenus and Combinations, This module makes the process a lot easier !

Skr Phoenix YT 0 Jan 30, 2022
A Python script made for the Python Discord Pixels event.

Python Discord Pixels A Python script made for the Python Discord Pixels event. Usage Create an image.png RGBA image with your pattern. Transparent pi

Stanisław Jelnicki 4 Mar 23, 2022
A basic animation modding workflow for FFXIV

AnimAssist Provides a quick and easy way to mod animations in FFXIV. You will need: Before anything, the VC++2012 32-bit Redist from here. Havok will

liam 37 Dec 16, 2022
Holographic Declarative Memory for Python ACT-R

HDM This is the repository for the Holographic Declarative Memory (HDM) module for Python ACT-R. This repository contains: documentation: a paper, con

Carleton Cognitive Modeling Lab 1 Jan 17, 2022
An After Effects render queue for ShotGrid Toolkit.

AEQueue An After Effects render queue for ShotGrid Toolkit. Features Render multiple comps to locations defined by templates in your Toolkit config. C

Brand New School 5 Nov 20, 2022
Solves Maths24 problems for you!

maths24-solver Solves Maths24 problems for you! Enjoy this open scource project! You can edit modify and share! My wishes is for you to use this proje

6 Nov 07, 2021
Simple Wayland HotKey Daemon

swhkd Simple Wayland HotKey Daemon This project is still very new and I'm making new decisions everyday as to where I should drive this project. I'm u

Aakash Sen Sharma 407 Dec 30, 2022
A turtlebot auto controller allows robot to autonomously explore environment.

A turtlebot auto controller allows robot to autonomously explore environment.

Yuliang Zhong 1 Nov 10, 2021
BMI-Calculator: Program to Calculate Body Mass Index (BMI)

The Body Mass Index (BMI) or Quetelet index is a value derived from the mass (weight) and height of an individual, male or female.

PyLaboratory 0 Feb 07, 2022
Files relating to polymtl university

This is a tool I developed quickly, which allows users to visualize class availability by day of the week for a given program at polymtl. The schedule

PN 3 Mar 15, 2022
A fast python implementation of DTU MVS 2014 evaluation

DTUeval-python A python implementation of DTU MVS 2014 evaluation. It only takes 1min for each mesh evaluation. And the gap between the two implementa

82 Dec 27, 2022
Osintgram by Datalux but i fixed some errors i found and made it look cleaner

OSINTgram-V2 OSINTgram-V2 is made from Osintgram which is made by Datalux originally but i took the script and fixed some errors i found and made the

2 Feb 02, 2022
Convert temps in your Alfred search bar

Alfred Temp Converter Convert temps in your Alfred search bar. Download Here Usage: temp 100f converts to Celsius, Kelvin, and Rankine. temp 100c conv

Justin Hamilton 4 Apr 11, 2022
Step by step development of a vending coffee machine project, including tkinter, sqlite3, simulation, etc.

Step by step development of a vending coffee machine project, including tkinter, sqlite3, simulation, etc.

Nikolaos Avouris 2 Dec 05, 2021
Repository to store sample python programs for python learning

py Repository to store sample Python programs. This repository is meant for beginners to assist them in their learning of Python. The repository cover

codebasics 5.8k Dec 30, 2022
Simple python bot, that notifies about new manga chapters through Telegram.

Simple python bot, that notifies about new manga chapters through Telegram.

Dmitry Kopturov 1 Dec 05, 2021
HSPyLib is a Python library that will elevate your experience to another level.

HomeSetup Python Library - HSPyLib Your mature python application HSPyLib is a Python library that will elevate your experience to another level. It r

Hugo Saporetti Junior 4 Dec 14, 2022
Practice in Oxford_AI&ML class

Practice in Oxford_AI&ML class

St3ve Lee 2 Feb 04, 2022
Calibre Libgen Non-fiction / Sci-tech store plugin

CalibreLibgenSci A Libgen Non-Fiction/Sci-tech store plugin for Calibre Installation Download the latest zip file release from here Open Calibre Navig

IDDQD 9 Dec 27, 2022