Skip to main content

Tools for using on diffrent Platforms

Project description

marvmiloTools

Version: 1.11.3

Dependencies:

  • pandas
  • dash
  • dash-bootstrap-components
  • paho-mqtt

Description:

A tool a wrote for myself to have multiple functions and classes avalibale on diffrent servers and devices.

HowTo:

1. Main

1.1 ScriptPrint:

Logging and Output Tool for different Scipts.

Example 1(Printing):

import marvmiloTools as mmt

output = mmt.Output("SCRIPT")
print = output.print

print("hello world")

Output:

2022-04-18 23:53:48.015564 - INFO - [SCRIPT]: hello world

Example 2(Logging):

import marvmiloTools as mmt

output = mmt.Output("SCRIPT", logfile = "output.log")
#cleanup from last time
output.cleanup_logfile()
output.log("logging output")

print = output.print
print("logging prints")

def main():
    1 / 0

output.log_python_error(main)

output.log:

2022-04-18 23:49:41.898101 - INFO - [SCRIPT]: logging output
2022-04-18 23:49:41.898891 - INFO - [SCRIPT]: logging prints
2022-04-18 23:49:41.901410 - ERROR - [SCRIPT]: 
Traceback (most recent call last):
  File "C:\Users\marvi\OneDrive\Projects\PyPImarvmiloTools\marvmiloTools\__init__.py", line 168, in log_python_error
    function()
  File "C:\Users\marvi\OneDrive\Projects\PyPImarvmiloTools\log.py", line 12, in main
    1 / 0
ZeroDivisionError: division by zero

 

1.2 Timer:

A build in timer for measuring runtimes.

Example:

import marvmiloTools as mmt
from time import sleep

#start the timer
mmt.timer.start()

sleep(3)

#pause timer
runtime = mmt.timer.pause()
print("Type of runtime: " + str(type(runtime)))
print("Runtime at pause: " + str(runtime))

#reset timer and get runtime function
mmt.timer.reset()
runtime = mmt.timer.get_runtime()
print("Runtime at reset: " + str(runtime))

#set some laps
mmt.timer.start()
for i in range(3):
    sleep(1)
    runtime = mmt.timer.set_lap()
    print("Runtime at lap " + str(i) + ": " + str(runtime))

#get all laps
laps = mmt.timer.get_laps()
print("Laps: " + str(laps))

sleep(2)

#get time of current lap without setting a lap
lap_runtime = mmt.timer.get_lap_runtime()
print("Current Lap Runtime: " + str(lap_runtime))

Output:

Type of runtime: <class 'datetime.timedelta'>
Runtime at pause: 0:00:03.003270
Runtime at reset: 0:00:00
Runtime at lap 0: 0:00:01.001151
Runtime at lap 1: 0:00:01.001191
Runtime at lap 2: 0:00:01.001231
Laps: [datetime.timedelta(seconds=1, microseconds=1151), datetime.timedelta(seconds=1, microseconds=1191), datetime.timedelta(seconds=1, microseconds=1231)]
Current Lap Runtime: 0:00:02.002030

Create a new instance of timer:

timer = mmt.Timer()
timer.start()
...

 

1.3 get_variable_name

Converting variable in namespace into an string.

Example:

import marvmiloTools as mmt

#declare a variable
variable = "hello world"

#get name as string from variable
variable_name = mmt.get_variable_name(variable, locals())
print(variable_name, type(variable_name))

Output:

variable <class 'str'>

 

1.4 random_ID

Creating a random ID of specific length.

Example:

import marvmiloTools as mmt
print(mmt.random_ID(20))

Output:

R1DBXY64KH73BPPF7WFT

 

1.5 CloudMQTT

CloudMQTT client with multiple functions.

Example:

import marvmiloTools as mmt

#init cloudMQTT client
cloudmqtt = mmt.CloudMQTT(
    client_name = "clientname", 
    channel = "channel", 
    qos = 0
)

#connect to server
cloudmqtt.connect(
    user = "user", 
    pw = "password", 
    addr = "cloudmqtt.com", 
    port = 1234
)

#reconnecting to server if no connection
if not cloudmqtt.check_connection():
    cloudmqtt.reconnect()

#on message function
def on_message(msg, topic):
    print(f"received message: '{msg}', topic: '{topic}'")
    
#binding on_message function to a topic
cloudmqtt.bind(topic = "hello", function = on_message)

#publishing a message
cloudmqtt.publish(topic = "hello", message = "world")

#response function
def on_request(msg, topic):
    resp = "hello world"
    print(f"publishing response: {resp}")
    return(resp)

#binding on_request to request topic
cloudmqtt.bind_response("demo", on_request)

#request data from server
resp = (
    cloudmqtt.request(
        topic = "demo",
        message = ".",
        retry = 5
    )
)
print("got response: " + resp)

#disconnecting form server
cloudmqtt.disconnect()

Output:

received message: 'world', topic: 'hello'
publishing response: hello world
got response: hello world

MQTT Messages:

Messages  

1.6 SQL

Simple sqlite3 manager.

Example:

import marvmiloTools as mmt

mmt.sql.connect("database.db")
mmt.sql.execute("CREATE TABLE IF NOT EXISTS test (a INTEGER, b INTEGER)")
mmt.sql.execute("INSERT INTO test (a,b) VALUES (0,1)")
mmt.sql.disconnect()

#new sql instance
sql = mmt.SQL()
sql.connect(...

Database:

Database  

1.7 prettyprint

Prettyprint lists, dictionaries, DictObjects etc. in json format.

Example:

import marvmiloTools as mmt

random_list = [1, 2, 3]
random_dict = {"a": "A", "b": "B"}
random_dictobj = mmt.dictionary.toObj(random_dict)

mmt.prettyprint(random_list)
mmt.prettyprint(random_dict)
mmt.prettyprint(random_dictobj)

Output:

[
    1,
    2,
    3
]
{
    "a": "A",
    "b": "B"
}
{
    "a": "A",
    "b": "B"
}

1.8 Thread

For managing Threads

Example:

import time
import marvmiloTools as mmt

def function(string):
    while True:
        print(string)
        time.sleep(1)

thread_id = mmt.thread(function, "hello world")
print(mmt.threads[thread_id].is_alive())

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    for id in mmt.threads:
        mmt.threads[id].stop()

Output:

hello world
True
hello world
hello world
KeyboardInterrupt:
"""

 

2. Dash

2.1 flex_style

Dictionary for centering content in dash plotlys html.Div

Example:

import marvmiloTools as mmt
from dash import html

html.Div(
    children = [
        "hello world"
    ],
    style = mmt.dash.flex_style({
        "background-color": "black"
    })
)

 

2.2 mobile_optimization

Meta tags for setting app to a mobile optiomized app.

Example:

import marvmiloTools as mmt
import dash

app = dash.Dash(__name__, meta_tags = [mmt.dash.mobile_optimization])

 

2.3 content_div

For creating a dynamic scalealbe content Div.

Example:

import marvmiloTools as mmt
from dash import html
import dash_bootstrap_components as dbc

app.layout = html.Div(
    children = [
        dbc.Navbar(...),
        mmt.dash.content_div(
            width = "1000px",
            padding = "5%",
            content = [
                "children"
            ]
        )
    ]
)

 

2.4 modal_header_close

Creating an modal header with close button and specific color.

Example:

import marvmiloTools as mmt
import dash_bootstrap_components as dbc

dbc.Modal(
    children = [
        mmt.dash.modal_header_close(
            title = "This is the header",
            close_id = "modal-close", #id of the close button,
            color = "#4287f5" #background color of header
        ),
        dbc.Modal_Body("This is modal body")
    ]
)

 

2.5 random_ID

Creating random IDs compatible with dash.

Example:

import marvmiloTools as mmt
from dash import html

html.Div(
    children = "Hello World",
    id = mmt.dash.random_ID(20)
)

Output ID: 'MNPhNBfXcpVeHVVxuJeF'  

 

2.6 browsertime

Creating a Object in dash html form, wich provides the current clock time of the browser. That means the callbacks can calulate timezone of input.

Add this to your callbacks:

app.clientside_callback(*mmt.dash.browsertime.clientside_callback_args)

Add this in your html layout of the page:

mmt.dash.browsertime.htmlObj()

Example Callback with browser time:

from dash.dependencies import Input, Output, State

@app.callback(
    [Output(...)],
    [Input(...)],
    [State("browser-time", "data")]
)
def callback(... , browsertime):
    datetime_object = mmt.dash.browsertime.datetime(browsertime)
    time_shift = mmt.dash.browsertime.time_shift(browsertime)

Also datetime objects from browsertime string can be created. Time shift can also be calculated.  

2.7 nav

Simply creating a dash navbar with custom items.

import marvmiloTools as mmt

mmt.dash.nav.bar(
    logo = "url(/assets/logo.png)",
    logo_style = {
        "width": "3rem", 
        "height": "3rem",
        "background-size": "cover",
    },
    title = "Navbar Title",
    title_style = {
        "width": "15rem",
        "font-size": "1.5rem"
    }, 
    expand = "lg",
    items = [
        mmt.dash.nav.item.href(
            "Link",
            href = "https://github.com/marvmilo",
            target = "_blank",
            size = "lg"
        ),
        mmt.dash.nav.item.normal(
            "Button",
            id = "button-id",
            size = "lg"
        )
    ]
)

@app.callback(*mmt.dash.nav.callback_args)
def cn(n, is_open):
    return mmt.dash.nav.callback_function(n, is_open)

 

3. Json

3.1 load

For opening and loading a json file to dictionary or marvmiloTools.DictObj

Example:

.
├── example.json
└── script.py
 
example.json:

{
    "hello": "world"
}

script.py:

import marvmiloTools as mmt

dictionary = mmt.json.load("example.json", object=False)
DictObj = mmt.json.load("example.json")

print("Dictionary:")
print(dictionary)
print(type(dictionary))
print()
print("DictObject:")
print(DictObj)
print(type(DictObj))

Execute like this:

~$ python script.py

Output:

Dictionary:
{'hello': 'world'}
<class 'dict'>

DictObject:
{'hello': 'world'}
<class 'marvmiloTools.dictionary_tools.DictObject'>

 

3.2 save

For saving a dictionary or marvmiloTools.DictObject to a json file.

Example:

import marvmiloTools as mmt

dictionary = {"hello": "world"}
DictObj = mmt.dictionary.toObj(dictionary)

#save to json
mmt.json.save(dictionary, filename = "dictionary.json")
mmt.json.save(DictObj, filename = "DictObj.json")

Output as dictionary.json and DictObj.json:

{
    "hello": "world"
}

 

3.3 write

For writing a value directly to a json file without opening and saving.

Example:

.
├── example.json
└── script.py
 
example.json:

{
    "dictionary": {
        "hello": "world"
    },
    "list": [
        "a",
        "b",
        "c"
    ]
}

script.py:

import marvmiloTools as mmt

mmt.json.write("value", "example.json", ["dictionary", "new"])
mmt.json.write("new", "example.json", ["list", 1])

Output example.json:

{
    "dictionary": {
        "hello": "world",
        "new": "value"
    },
    "list": [
        "a",
        "new",
        "b",
        "c"
    ]
}

 

4. Dictionary

4.1 toObj

Transforming to a dictionary to a marvmiloTools.DictObject. This Object can be used like a Class in Python

Example:

# pylint: disable = no-member
import marvmiloTools as mmt

dictionary = {"hello": "world", "list": ["string", 10, {"a": "b"}]}
#convert dictionary to Object
DictObj = mmt.dictionary.toObj(dictionary)

print(type(DictObj))
print(DictObj)
print(DictObj.hello)
print(DictObj.list[2].a)

(usining "# pylint: disable = no-member" with Visual Studio Code for disabeling "DictObj has no hello member" Error)
 
Output:

<class 'marvmiloTools.dictionary_tools.DictObject'>
{'hello': 'world', 'list': ['string', 10, {'a': 'b'}]}
world
b

A DictObject has the same attributes and functions as a dictionary aswell One extra function is pretty:

import marvmiloTools as mmt

DictObj = mmt.dictionary.toObj({"hello": "world"})
print(DictObj.pretty())

Output:

{
    "hello": "world"
}

 

4.2 toDict

Transforming a marvmiloTools.DictObject back to a standart dictionary.

Example:

import marvmiloTools as mmt

DictObj = mmt.dictionary.toObj({"hello": "world"})

#convert to dictionary
dictionary = mmt.dictionary.toDict(DictObj)
print(dictionary)
print(type(dictionary))

Output:

{'hello': 'world'}
<class 'dict'>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

marvmiloTools-1.11.3.tar.gz (17.0 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page