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
python scripts - mostly automation scripts

python python scripts - mostly automation scripts You can set your environment in various ways bash #!/bin/bash python - locally on remote host #!/bi

Enyi 1 Jan 05, 2022
Бэкапалка таблиц mysql 8 через брокер сообщений nats

nats-mysql-tables-backup Бэкап таблиц mysql 8 через брокер сообщений nats (проверено и работает в ubuntu 20.04, при наличии python 3.8) ПРИМЕРЫ: Ниже

Constantine 1 Dec 13, 2021
Radiosonde Telemetry Decoders

Radiosonde Telemetry Frame Decoders This repository is an attempt to collate the various sources of information on how to decode radiosonde telemetry

Project Horus 3 Jan 04, 2022
Python Projects is an Open Source to enhance your python skills

Welcome! 👋🏽 Python Project is Open Source to enhance your python skills. You're free to contribute. 🤓 You just need to give us your scripts written

Tristán 6 Nov 28, 2022
Handwrite - Type in your Handwriting!

Handwrite - Type in your Handwriting! Ever had those long-winded assignments, that the teacher always wants handwritten?

coded 7 Dec 06, 2022
Python Control Systems Library

The Python Control Systems Library is a Python module that implements basic operations for analysis and design of feedback control systems.

Control Systems Library for Python 1.3k Jan 06, 2023
to learn how to do pull request and do contribution to other's repo

Hacktoberfest-2021 - open-source-contribution An Open Source repository to Teach people How to contribute to open sources. 💥 🔥 JOIN PVX PROGRAMMING

Shubham Rawat 82 Dec 26, 2022
Black-Scholes library implemented as a Cairo smart contract

Cairo Black-Scholes Library Black-Scholes library implemented as a Cairo smart contract. All inputs, outputs, and internal calculations use 27-digit f

Aditya Raghavan 47 Dec 19, 2022
Project of the MSEC_LDD . group

HackathonJuntionXHN Project of team MSEC_LQĐ What did we do? Building application to generate whitelist regex for Web application firewall How to setu

Nguyễn Mạnh Cường 0 Dec 19, 2021
python scripts to perform coin die clustering (performed on Riedones3D).

python scripts to perform coin die clustering (performed on Riedones3D).

Sofiane 2 Apr 29, 2022
p5 is a Python package based on the core ideas of Processing.

p5 p5 is a Python library that provides high level drawing functionality to help you quickly create simulations and interactive art using Python. It c

p5py 645 Jan 04, 2023
Like Docker, but for Squeak. You know, for kids.

Squeaker Like Docker, but for Smalltalk images. You know, for kids. It's a small program that helps in automated derivation of configured Smalltalk im

Tony Garnock-Jones 14 Sep 11, 2022
Repositório de código de curso de Djavue ministrado na Python Brasil 2021

djavue-python-brasil Repositório de código de curso de Djavue ministrado na Python Brasil 2021 Completamente baseado no curso Djavue. A diferença está

Buser 15 Dec 26, 2022
Excel cell checker with python

excel-cell-checker Description This tool checks a given .xlsx file has the struc

Paul Aumann 1 Jan 04, 2022
A sandpit for textual related things

A sandpit repo for testing textual related things.

Craig Gumbley 1 Nov 08, 2021
Deis v1, the CoreOS and Docker PaaS: Your PaaS. Your Rules.

This repository (deis/deis) is no longer developed or maintained. The Deis v1 PaaS based on CoreOS Container Linux and Fleet has been replaced by Deis

Deis 6.1k Jan 04, 2023
Oregon State University grade distributions from Fall 2018 through Summer 2021

Oregon State University Grades Oregon State University grade distributions from Fall 2018 through Summer 2021 obtained through a Freedom Of Informatio

Melanie Gutzmann 5 May 02, 2022
A simple Python script for generating a variety of hashes from safe urandom entropy.

Hashgen A simple Python script for generating a variety of hashes from safe urandom entropy. For whenever you need a random hash (e.g. generating an a

Xanspie 1 Feb 17, 2022
Astroquery is an astropy affiliated package that contains a collection of tools to access online Astronomical data.

Astroquery is an astropy affiliated package that contains a collection of tools to access online Astronomical data.

The Astropy Project 631 Jan 05, 2023
Automatically unpin old messages so you can always pin more!

PinRotate Automatically unpin old messages so you can always pin more! Installation You will need to install poetry to run this bot locally for develo

3 Sep 18, 2022