Skip to content

guchengxi1994/dev-tool-for-python

Repository files navigation

dev-tool-for-python

a small tool for python development

Build Status

Introduction

Make coding easier and happier.

Try something never tried and realize those ridiculous thoughts.

Reinvent wheels just for fun.

HOW TO USE.

1. Download this repo. run

pip install -r requestments.txt

2. Copy the "devtool" folder into your project, or JUST try

pip install DevTool

Change log

2021.4.17

Image Translation alpha version. is not good when image is small. and needs to be smoothed.

image

2021.4.15

is going to develop a tool, crop an image, using OCR to get words ,translate.

2021.4.14

Drawing simple UML and ER diagram supported.

image

image

test script can use this

2021.4.10

  1. converting entities to images is under construction. See here

2021.1.26

  1. merge some usage from 'show-and-search'

  2. add function plot

To use this decorator, try testPlot.py, effect:

@traceplot(False)
def add1(a, b):
    c = 3
    d = 4
    e = c + d
    return a + b + e

@traceplot()
def add2(a, b):
    c = 3
    d = 4
    e = c + d
    return a + b + e

if __name__ == "__main__":
    add1(3,4)
    add2(3,4)


(base) PS D:\testALg\mask2json\devTool\dev-tool-for-python> & D:/anaconda/python.exe d:/testALg/mask2json/devTool/dev-tool-for-python/testPlot.py
call __main__.add1:35 {'a': 3, 'b': 4} None
line __main__.add1:37 {'a': 3, 'b': 4} None
line __main__.add1:38 {'a': 3, 'b': 4, 'c': 3} None
line __main__.add1:39 {'a': 3, 'b': 4, 'c': 3, 'd': 4} None
line __main__.add1:40 {'a': 3, 'b': 4, 'c': 3, 'd': 4, 'e': 7} None
return __main__.add1:40 {'a': 3, 'b': 4, 'c': 3, 'd': 4, 'e': 7} 14

        section1
 _____________________
|        call         |
|      __main__       |
|       add2:42       |
|        None         |
|_____________________|

            |
            |
            |
            |
            V

        section2
 _____________________
|        line         |
|      __main__       |
|       add2:44       |
|        None         |
|_____________________|

            |
            |
            |
            |
            V

        section3
 _____________________
|        line         |
|      __main__       |
|       add2:45       |
|        None         |
|_____________________|

            |
            |
            |
            |
            V

        section4
 _____________________
|        line         |
|      __main__       |
|       add2:46       |
|        None         |
|_____________________|

            |
            |
            |
            |
            V

        section5
 _____________________
|        line         |
|      __main__       |
|       add2:47       |
|        None         |
|_____________________|

            |
            |
            |
            |
            V

        section6
 _____________________
|       return        |
|      __main__       |
|       add2:47       |
|         14          |
|_____________________|

            |
            |
            O
  1. running function with a int number as the memory threshold.

     @running(mThres=5)
     def test11():
         i = 0
         while i <= 2:
             print(test11.__name__ + ' running')
             time.sleep(1.5)
             i += 1
    

    test11 running memory : 21MB, memory_persent : 0.261%, cpu_percent : 0.0

    This function out of memory with threshold 5 MB, but got 21 MB during runtime.

2021.1.25

  1. add decorator "running", see here

To use this decorator, try testWrap.test10, effect:

(base) PS D:\testALg\mask2json\devTool\dev-tool-for-python> python .\testWrap.py
test10 running
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
test10 running
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
test10 running
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0
memory : 21MB, memory_persent : 0.264%, cpu_percent : 0.0

                                        Total
            =============================================================
            Used time:                 9.000941753387451 s,
            Average memory:            21.0 MB,
            Average memory percent:    0.264 %,
            Average cpu percent:       0.0 % ,
            Average used gpu:          0.0 MB.
            =============================================================

Others.

1 For logs filter.

from devtool.devTool import DevTool
DevTool.logFilter(*kwds, **params)

kws are the keywords to be searched,params include path,since and until under this version.

To record log file easily,try this.

from devtool import logit

@logit()
def test4():
    x = 1 / 0

test4()

then DevLog/devlog.log will be created and log information will be added.

2021-01-09 09:49:00,143 - DevTool - ERROR - __main__.test4 Traceback (most recent call last):
File "D:\dev-tool-for-python\devtool\__init__.py", line 112, in execute
    func(*args, **kwargs)
File ".\testWrap.py", line 35, in test4
    x = 1 / 0
ZeroDivisionError: division by zero

@logit can add three params: save,load,ignore

@save ,to record the function ,params and result to DevLog/devCache.dump

@load, load result from DevLog/devCache.dump if the function costs much time. if the params are same to the stored params, then return the result. Otherwise, excute again.

@ignore, force to execute the function

@logit(save=True,load=True,ignore=False)
def test8(a=1,b=2):
    import time
    rs = 'aaaaab'
    t1 = time.time()
    time.sleep(5)
    print(time.time()-t1)
    return rs

if __name__ == "__main__":
    a = test8(a=3,b=4)
    print(a)

first time:

(base) PS D:\dev-tool-for-python> python .\testWrap.py
5.01481556892395
aaaaab

second time:

(base) PS D:\dev-tool-for-python> python .\testWrap.py
aaaaab

2 init a new python project

from devtool.devTool import DevTool

if __name__ == "__main__":
    DevTool.initProject('Test')

initproject

If 'DevTool.initProject' got a param 'tree=True', then

This script needs a parameter "path",but got "",using D:\testALg\mask2json\devTool\dev-tool-for-python\Test instead.
Init finishes.
.
|-- main.py
|-- static
|-- tests
|-- utils
|   |-- __init__.py

The structure of project is stored in style.yaml.

MINE:
    scripts:
        main : root/main.py
        utils_init : root/utils/__init__.py
    folders:
        static : root/static
        utils : root/utils
        tests : root/tests