Whisperes / pytils

Utils for data python project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pytils

Utils for data python projects. Simple, straightforward, but time saving.

  • pickledays - decorator of class. Save the object state to the filesystem after it's initialization for some defined time. Load object after another call.
  • singleton - decorator of class. Share object to all calls. There will be only one instance.
  • logger - log the info messages to file, stream and discord.
  • log - decorator of function. Log the function call into the logger.
  • configurator - additional method for Dynaconf, which create variable in settings file.
  • pandas_table - additional method for pandas, which save the DataFrame to specific sheet. Differs from standard df.to_excel by saving other sheets.

Installation

From the PiPy:

pip install pytils-functions

Directly from github:

pip install git+https://github.com/Whisperes/pytils.git

How to log

Discord logs

Straight logs

Log to the handlers:

  • discord webhook,
  • streamhandler
  • timerotation file.

For each handler you can set your own log level in the settings.toml file in your project (see Dynaconf package)

from pytils.logger import logger

logger.debug("this is a debugging message")
logger.success("this is a success message")
logger.info("this is an informational message")
logger.warning("this is a warning message")
logger.notice("this is a notice message")
logger.error("this is an error message")
logger.critical("this is a critical message")
logger.log(89, "this is a number message")

How to decorate functions for logs

from pytils.logger import log

@log()
def my_function(a=[1,3], b=2, c=3):
    //do something

answer = my_function([11, 'beta'], 2, c=3)

It will be loged like this:

2022-09-02 18:13:25 my-pc |[3812] DEBUG Processing my_function: ([11, 'beta'], 2), {'c': 3}

2022-09-02 18:13:25 my-pc |[3812] SUCCESS my_function: ([11, 'beta'], 2), {'c': 3}

Add log level

Additional levels added to logging module:

  • SUCCESS (15)

  • NOTICE (25)

    from pytils.logger import addLoggingLevel

    addLoggingLevel('MY_LOG_LEVEL', 45)

Cashe

Cashe object to the disk

from pytils.pickler import pickledays

@pickledays(period=2)
class A:
    def __init__(self, var):
        self.var = var

a = A(2)

Object A will be saved for 2 days. New call A(2) will take the state of object from pickle file. Req: object have to be immutable.

No duplicates

from pytils.singleton import Singleton_args


@Singleton_args
class A:
    def __init__(self, var):
        self.var = var

a = A(2)

Just singleton this. Your object with sspecific set of args will be be the only one through the whole code.

Retry errors

@retry(retries=5, delay=1)
def example_function():
    import random
    if random.random() < 0.8:
        raise ValueError("Random error")
    else:
        return('True')



example_function()

Decorate function with failing possibility. Delay in seconds.

About

Utils for data python project

License:MIT License


Languages

Language:Python 100.0%