gomyck-tools 1.0.5__py3-none-any.whl → 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,15 @@
1
+ import inspect
1
2
  import threading
2
3
  from functools import wraps
3
4
 
4
5
  import bottle
5
- from bottle import response, Bottle, abort, request
6
+ from bottle import response, Bottle, request
7
+
6
8
  from ctools.api_result import R
7
9
  from ctools.sys_log import flog as log
8
10
 
9
11
  bottle.BaseRequest.MEMFILE_MAX = 1024 * 1024 * 50
12
+ func_has_params = {}
10
13
 
11
14
  class GlobalState:
12
15
  lock = threading.Lock()
@@ -61,8 +64,17 @@ def init_app(context_path):
61
64
  @app.hook('after_request')
62
65
  def after_request():
63
66
  enable_cors()
67
+
68
+ app.install(params_resolve)
64
69
  return app
65
70
 
71
+ def enable_cors():
72
+ response.headers['Access-Control-Allow-Origin'] = '*'
73
+ response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'
74
+ request_headers = request.headers.get('Access-Control-Request-Headers')
75
+ response.headers['Access-Control-Allow-Headers'] = request_headers if request_headers else ''
76
+ response.headers['Access-Control-Expose-Headers'] = '*'
77
+
66
78
  # annotation
67
79
  def rule(key):
68
80
  def return_func(func):
@@ -75,32 +87,27 @@ def rule(key):
75
87
  return decorated
76
88
  return return_func
77
89
 
78
-
79
- def enable_cors():
80
- response.headers['Access-Control-Allow-Origin'] = '*'
81
- response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'
82
- request_headers = request.headers.get('Access-Control-Request-Headers')
83
- response.headers['Access-Control-Allow-Headers'] = request_headers if request_headers else ''
84
- response.headers['Access-Control-Expose-Headers'] = '*'
85
-
86
- # annotation
90
+ # annotation or plugins
87
91
  def params_resolve(func):
88
- """
89
- Use guide:
90
- @params_resolve
91
- def xxx(params):
92
- print(params.a)
93
- print(params.b)
94
- """
95
92
  @wraps(func)
96
93
  def decorated(*args, **kwargs):
94
+ if func_has_params.get(request.fullpath) is not None and not func_has_params.get(request.fullpath):
95
+ return func(*args, **kwargs)
96
+ if func_has_params.get(request.fullpath) is None:
97
+ sig = inspect.signature(func)
98
+ params = sig.parameters
99
+ if not params.get('params'):
100
+ func_has_params[request.fullpath] = False
101
+ return func(*args, **kwargs)
102
+ else:
103
+ func_has_params[request.fullpath] = True
97
104
  if request.method == 'GET':
98
105
  queryStr = request.query.decode('utf-8')
99
- pageInfo = PageInfo(
106
+ page_info = PageInfo(
100
107
  page_size=10 if request.headers.get('page_size') is None else int(request.headers.get('page_size')),
101
108
  page_index=1 if request.headers.get('page_index') is None else int(request.headers.get('page_index'))
102
109
  )
103
- queryStr.pageInfo = pageInfo
110
+ queryStr.page_info = page_info
104
111
  return func(params=queryStr, *args, **kwargs)
105
112
  elif request.method == 'POST':
106
113
  content_type = request.get_header('content-type')
@@ -1,7 +1,8 @@
1
- from bottle import ServerAdapter, Bottle, template
2
1
  from socketserver import ThreadingMixIn
3
2
  from wsgiref.simple_server import WSGIServer, WSGIRequestHandler, make_server
4
3
 
4
+ from bottle import ServerAdapter, Bottle, template, static_file
5
+
5
6
  """
6
7
  app = init_app('/doc_download')
7
8
 
@@ -27,12 +28,10 @@ def get_ws_modules():
27
28
  """
28
29
 
29
30
  """
30
- http_app = Bottle()
31
- for module in controller.get_modules():
32
- log.debug('正在挂载http路由: {}'.format(module.app.context_path))
33
- http_app.mount(module.app.context_path, module.app)
34
- http_server = bottle_server.WSGIRefServer(port=application.Server.port)
35
- http_app.run(server=http_server, quiet=True)
31
+ http_app = bottle_webserver.init_bottle()
32
+ http_app.mount(app.context_path, app)
33
+ http_app.set_index(r'轨迹点位压缩.html')
34
+ http_app.run()
36
35
  """
37
36
 
38
37
  class CBottle:
@@ -51,14 +50,25 @@ class CBottle:
51
50
  def index():
52
51
  return template(path, kwargs)
53
52
 
54
- def mount(self, context_path, app):
55
- self.bottle.mount(context_path, app)
53
+ def set_static(self, root):
54
+ @self.bottle.route('/static/<filepath:path>')
55
+ def static(filepath):
56
+ return static_file(filepath, root=root)
57
+
58
+ def set_download(self, root, download_prefix=True):
59
+ @self.bottle.route('/download/<filename>')
60
+ def download(filename):
61
+ return static_file(filename, root=root, download=download_prefix)
62
+
63
+ def mount(self, context_path, app, **kwargs):
64
+ self.bottle.mount(context_path, app, **kwargs)
56
65
 
57
- def init_bottle(port=8888, quiet=False) -> CBottle:
58
- bottle = Bottle()
66
+ def init_bottle(app:Bottle=None, port=8888, quiet=False) -> CBottle:
67
+ bottle = app or Bottle()
59
68
  return CBottle(bottle, port, quiet)
60
69
 
61
- class ThreadedWSGIServer(ThreadingMixIn, WSGIServer): pass
70
+ class ThreadedWSGIServer(ThreadingMixIn, WSGIServer):
71
+ daemon_threads = True
62
72
 
63
73
  class CustomWSGIHandler(WSGIRequestHandler):
64
74
  def log_request(*args, **kw): pass
@@ -1,5 +1,6 @@
1
- from bottle import ServerAdapter
1
+ from bottle import ServerAdapter, Bottle
2
2
  from geventwebsocket.handler import WebSocketHandler
3
+
3
4
  from ctools import sys_log
4
5
 
5
6
  """
@@ -26,13 +27,29 @@ def get_ws_modules():
26
27
  """
27
28
 
28
29
  """
29
- http_app = Bottle()
30
- for module in controller.get_modules():
31
- log.debug('正在挂载http路由: {}'.format(module.app.context_path))
32
- http_app.mount(module.app.context_path, module.app)
33
- http_server = bottle_server.WSGIRefServer(port=application.Server.port)
34
- http_app.run(server=http_server, quiet=True)
30
+ socket_app = bottle_websocket.init_bottle()
31
+ socket_app.mount(app.context_path, app)
32
+ socket_app.run()
35
33
  """
34
+
35
+ class CBottle:
36
+
37
+ def __init__(self, bottle: Bottle, port=8888, quiet=False):
38
+ self.port = port
39
+ self.quiet = quiet
40
+ self.bottle = bottle
41
+
42
+ def run(self):
43
+ socket_server = WebSocketServer(port=self.port)
44
+ self.bottle.run(server=socket_server, quiet=self.quiet)
45
+
46
+ def mount(self, context_path, app):
47
+ self.bottle.mount(context_path, app)
48
+
49
+ def init_bottle(port=8889, quiet=False) -> CBottle:
50
+ bottle = Bottle()
51
+ return CBottle(bottle, port, quiet)
52
+
36
53
  class CustomWebSocketHandler(WebSocketHandler):
37
54
  def log_request(self):
38
55
  if '101' not in str(self.status):
@@ -1,17 +1,18 @@
1
1
  import os
2
2
  import time
3
+
4
+ from business.common.constant import Scheduler
5
+ from lxml import etree
3
6
  from lxml import html
4
7
  from pynput import keyboard
5
- from selenium.common import NoSuchElementException, WebDriverException, NoSuchWindowException
6
8
  from selenium import webdriver
7
- from selenium.webdriver.common.by import By
9
+ from selenium.common import NoSuchElementException, WebDriverException, NoSuchWindowException
8
10
  from selenium.webdriver.chrome.options import Options
9
11
  from selenium.webdriver.chrome.service import Service
12
+ from selenium.webdriver.common.by import By
10
13
  from urllib3.exceptions import MaxRetryError
11
- from lxml import etree
12
- from business.common.constant import Scheduler
13
- from ctools import application, string_tools
14
14
 
15
+ from ctools import application, string_tools
15
16
 
16
17
  keyboard_listener = None
17
18
  ctrl_pressed = None
ctools/ckafka.py CHANGED
@@ -3,8 +3,6 @@
3
3
  __author__ = 'haoyang'
4
4
  __date__ = '2024/9/5 10:39'
5
5
 
6
- import signal
7
- import sys
8
6
  import time
9
7
  from threading import Thread, Lock
10
8
 
ctools/console.py CHANGED
@@ -1,6 +1,6 @@
1
+ import logging
1
2
  import sys
2
3
  import tkinter as tk
3
- import logging
4
4
 
5
5
 
6
6
  class Console:
ctools/cron_lite.py CHANGED
@@ -7,6 +7,7 @@ import traceback
7
7
  from datetime import datetime
8
8
  from functools import wraps
9
9
  from typing import Optional, Dict
10
+
10
11
  import pytz
11
12
  from croniter import croniter
12
13
 
ctools/database.py CHANGED
@@ -1,10 +1,12 @@
1
1
  import contextlib
2
2
  import datetime
3
3
  import math
4
+
4
5
  from sqlalchemy import create_engine, Integer, Column, event
5
6
  from sqlalchemy.ext.declarative import declarative_base
6
7
  from sqlalchemy.orm import sessionmaker, Session
7
8
  from sqlalchemy.sql import text
9
+
8
10
  from ctools import call, string_tools
9
11
  from ctools.thread_pool import thread_local
10
12
 
ctools/douglas_rarefy.py CHANGED
@@ -4,9 +4,12 @@ __author__ = 'haoyang'
4
4
  __date__ = '2024/9/19 14:02'
5
5
 
6
6
  import math
7
+
8
+ from jsonpath_ng import parser
9
+
7
10
  from ctools import cjson
8
11
  from ctools.sys_log import flog as log
9
- from jsonpath_ng import parser
12
+
10
13
 
11
14
  class THIN_LEVEL:
12
15
  L1 = 0.00001
ctools/download_tools.py CHANGED
@@ -12,21 +12,22 @@ log = sys_log.flog
12
12
  """
13
13
 
14
14
 
15
- def download(file_path: str):
15
+ def download(file_path: str, download_name:str=None):
16
16
  """
17
17
  文件下载
18
18
  :param file_path: 静态文件路径
19
+ :param download_name: 下载文件名
19
20
  :return:
20
21
  """
21
22
  if os.path.exists(file_path):
22
23
  root_path = os.path.split(file_path)[0]
23
24
  file_name = os.path.split(file_path)[1]
24
- encoded_filename = urlencode({'filename': file_name}).split("=")[-1] # 对文件名进行URL编码
25
- response = static_file(file_path, root=root_path, download=True)
25
+ download_filename = urlencode({'filename': download_name or file_name}).split("=")[-1] # 对文件名进行URL编码
26
+ response = static_file(file_name, root=root_path, download=True)
26
27
  # 设置响应头,告诉浏览器这是一个文件下载
27
28
  response.headers['Content-Type'] = 'application/octet-stream;charset=utf-8'
28
- response.headers['Content-Disposition'] = f'attachment; filename={encoded_filename}'
29
- log.debug("下载文件成功, file_path: %s" % file_path)
29
+ response.headers['Content-Disposition'] = f'attachment; filename={download_filename}'
30
+ log.debug(f"下载文件成功, file_path: {file_path}, file_name: {file_name}, download_name: {download_name}")
30
31
  else:
31
32
  response = None
32
33
  log.info("下载文件失败, 此文件不存在, file_path: %s" % file_path)
ctools/images_tools.py CHANGED
@@ -1,7 +1,9 @@
1
1
 
2
- from PIL import Image
3
2
  from io import BytesIO
4
3
 
4
+ from PIL import Image
5
+
6
+
5
7
  def get_size(image_path):
6
8
  return Image.open(image_path).size
7
9
 
ctools/imgDialog.py CHANGED
@@ -1,9 +1,10 @@
1
1
  import tkinter
2
- from tkinter import ttk
3
2
  import tkinter as tk
3
+ from io import BytesIO
4
+ from tkinter import ttk
5
+
4
6
  import requests
5
7
  from PIL import Image, ImageTk
6
- from io import BytesIO
7
8
 
8
9
 
9
10
  def showImageTip(root, title, imagePath, tips):
ctools/mqtt_utils.py CHANGED
@@ -1,11 +1,11 @@
1
1
  import time
2
2
  from typing import Dict
3
3
 
4
+ from business.common import DictToObj
5
+ from business.common.constant import MQTTEvent
4
6
  from paho.mqtt import client as mqtt
5
7
  from paho.mqtt.enums import CallbackAPIVersion
6
8
 
7
- from business.common import DictToObj
8
- from business.common.constant import MQTTEvent
9
9
  from ctools import sys_log, cjson, string_tools, sys_info, date_utils, sm_tools, thread_pool
10
10
 
11
11
  '''
ctools/pacth.py CHANGED
@@ -5,6 +5,7 @@ from sqlalchemy.sql import text
5
5
 
6
6
  from ctools import database
7
7
 
8
+
8
9
  class Patch:
9
10
 
10
11
  def __init__(self, oldVersion, newVersion, pythonPath, playwrightPath, driverPath) -> None:
ctools/plan_area_tools.py CHANGED
@@ -1,9 +1,4 @@
1
- import os
2
- import time
3
1
  import tkinter as tk
4
- import pyautogui
5
-
6
- from ctools import application, string_tools
7
2
 
8
3
  """
9
4
  规划区域工具类, 按回车获取区域坐标
ctools/process_pool.py CHANGED
@@ -5,6 +5,7 @@ __date__ = '2024/9/20 12:00'
5
5
  import os
6
6
  import time
7
7
  from concurrent.futures import ProcessPoolExecutor
8
+
8
9
  from ctools import call
9
10
 
10
11
  _process_pool: ProcessPoolExecutor = None
ctools/pty_tools.py CHANGED
@@ -1,6 +1,7 @@
1
- import time
2
- import queue
3
1
  import _thread
2
+ import queue
3
+ import time
4
+
4
5
  from winpty import PtyProcess
5
6
 
6
7
 
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import time
3
3
  import tkinter as tk
4
+
4
5
  import pyautogui
5
6
 
6
7
  from ctools import application, string_tools
ctools/ssh.py CHANGED
@@ -1,4 +1,6 @@
1
- import socket,subprocess,os
1
+ import os
2
+ import socket
3
+ import subprocess
2
4
 
3
5
  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
4
6
  s.connect(('192.168.3.239',3123))
ctools/sys_info.py CHANGED
@@ -1,3 +1,4 @@
1
+ import getpass
1
2
  import hashlib
2
3
  import os
3
4
  import platform
@@ -6,7 +7,7 @@ import uuid
6
7
 
7
8
  import psutil
8
9
  from bottle import request
9
- import getpass
10
+
10
11
  from ctools import cjson, sm_tools, work_path
11
12
 
12
13
  MACHINE_KEY = b'EnrGffoorbFyTYoS0902YyT1Fhehj4InpbezIDUuPOg='
ctools/thread_pool.py CHANGED
@@ -1,7 +1,8 @@
1
1
  import os
2
+ import threading
2
3
  import time
3
4
  from concurrent.futures import ThreadPoolExecutor
4
- import threading
5
+
5
6
  from ctools import call
6
7
 
7
8
  thread_local = threading.local()
ctools/win_control.py CHANGED
@@ -1,8 +1,10 @@
1
1
  import os
2
2
  import time
3
+
3
4
  import pyautogui
4
5
  import uiautomation as auto
5
6
  from pynput import keyboard
7
+
6
8
  from ctools import thread_pool, win_canvas, application, string_tools
7
9
 
8
10
  current_control = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gomyck-tools
3
- Version: 1.0.5
3
+ Version: 1.1.0
4
4
  Summary: A ctools for python development by hao474798383
5
5
  Home-page: https://blog.gomyck.com
6
6
  Author: gomyck
@@ -18,5 +18,6 @@ Requires-Dist: croniter >=3.0.3
18
18
  Requires-Dist: gmssl >=3.2.2
19
19
  Requires-Dist: psutil >=6.0.0
20
20
  Requires-Dist: jsonpath-ng >=1.6.1
21
+ Requires-Dist: bottle >=0.12.25
21
22
 
22
23
  this package is for python development
@@ -4,54 +4,54 @@ ctools/api_result.py,sha256=NiM-R9K42G3m16B27sG_mqKrlexZzC5-LKoY8D5tO4s,1239
4
4
  ctools/application.py,sha256=WviU7p9GOqducbGW3XGkP7jCNKmraCh6JGSYBC33CQk,16008
5
5
  ctools/b64.py,sha256=_BdhX3p3-MaSSlU2wivN5qPxQfacR3VRBr1WC456tU0,194
6
6
  ctools/bashPath.py,sha256=BCN_EhYzqvwsxYso81omMNd3SbEociwSOyb9kLvu8V4,337
7
- ctools/bottle_webserver.py,sha256=blqeVlqBXns9CjrDl_cPXp47pfYjXQtcuNwdrC2oI_o,2186
8
- ctools/bottle_websocket.py,sha256=aO5s1zlPVxjUj86529UkEXywmuaDK5qFvorsW5RIBEY,1583
9
- ctools/browser_element_tools.py,sha256=tWNxUJ9m-hNTYtS0NRvmH9r5I-Qw55uKekwDYgt49bc,9951
7
+ ctools/bottle_web_base.py,sha256=-8z4q2pL8LXh0cPT4q3nv7WF-JdhyGXZPKliZTTwBKM,4951
8
+ ctools/bottle_webserver.py,sha256=3S5NkqLFerlYWt96owxmpgAQKTnXbQ_5uKHL5CeilIw,2455
9
+ ctools/bottle_websocket.py,sha256=IRY17SpDFjihLeU8c_aUIMAfUNZzurqfrOyNFojOQHQ,1858
10
+ ctools/browser_element_tools.py,sha256=IFR_tWu5on0LxhuC_4yT6EOjwCsC-juIoU8KQRDqR7E,9952
10
11
  ctools/call.py,sha256=BCr8wzt5qd70okv8IZn-9-EpjywleZgvA3u1vfZ_Kt8,1581
11
12
  ctools/cjson.py,sha256=M2XrXnFXTJyKsXP2JRos2Bse4b6WXjr6TrA6y-EF_Ig,1245
12
- ctools/ckafka.py,sha256=win6iV9-7FJDzcmqwQ5httN_NWjrBlWHc5b7N9E5tCQ,5187
13
+ ctools/ckafka.py,sha256=cxtM1X0YLBrLxKBioWKME-b1JBzc8rMKSqt5gYGg2dc,5162
13
14
  ctools/compile_tools.py,sha256=Nybh3vnkurIKnPnubdYzigjnzFu4GaTMKPvqFdibxmE,510
14
- ctools/console.py,sha256=1VAq_-fSGgHKYv6Qe53kHaJL0-3NpFRUZljahbJPcfk,1807
15
- ctools/cron_lite.py,sha256=L3Le_ScIuKiLAfzdaCf8qoPUbFIMT9ASallQkmwJTfc,8307
16
- ctools/database.py,sha256=xUiJbRRgHkGqwTzFUhAguFfDkW1dVfG2HVPFPzNpkmk,5360
15
+ ctools/console.py,sha256=EZumuyynwteKUhUxB_XoulHswDxHd75OQB34RiZ-OBM,1807
16
+ ctools/cron_lite.py,sha256=f9g7-64GsCxcAW-HUAvT6S-kooScl8zaJyqwHY-X_rE,8308
17
+ ctools/database.py,sha256=5LPmchtyekLeP1idrexgjPNLrywWc4IMp-ztDff95vQ,5362
17
18
  ctools/date_utils.py,sha256=-xI2anEzAonOvYwVmM1hCnkuLKodZ8pb33dS3dRxEIc,865
18
- ctools/douglas_rarefy.py,sha256=2zjUa5nLkStsAsttVqe3PiJWpk108pw1m3CIRNm-Z94,4820
19
- ctools/download_tools.py,sha256=h12HGr2IaVvl8IDAvpDftHycSACI5V7HF0Yk9kV4bVY,1750
19
+ ctools/douglas_rarefy.py,sha256=oSdc_uGfiBWqSKLpdg_npYeGxhZqXUTPB3pou6SM2_Y,4823
20
+ ctools/download_tools.py,sha256=Woa2-eYeQL14bLCzhavPNfabZxHmC0T6N5_UONU1Ts8,1891
20
21
  ctools/enums.py,sha256=QbHa3j7j4-BDdwaga5Y0nYfA2uNSVJDHumYdIZdKVkM,118
21
22
  ctools/ex.py,sha256=_UtbmDLrC7uZsoBtTdecuCZAlf2DA7fvojUf5fGZDVo,795
22
23
  ctools/excelOpt.py,sha256=q3HLAb1JScTrMCvx_x-4WWnqKhyTEzQ-m5vtqFy8NZU,1138
23
24
  ctools/html_soup.py,sha256=LabCo4yWI58fbFBPhunk3THWBf0BbHEWLgwyvSpTGR4,1903
24
25
  ctools/http_utils.py,sha256=4dt7OTRZluB9wCK4HL0TBqVZrV3cj_AIs4-9mGDC1zA,616
25
26
  ctools/id_worker_tools.py,sha256=xtfxpL8q4hHLT02JFx2jVXEXpasHq44ZFsOhO580JmE,2357
26
- ctools/images_tools.py,sha256=hjYu-3tpjZ96yMqAM3XrFSUEOiUcyGk4DbAsz2_OeIs,669
27
- ctools/imgDialog.py,sha256=DSq5cFofyP_el80AFConht_ZYRqxZhIz4CWjqBlJ0cw,1385
27
+ ctools/images_tools.py,sha256=8LGH3vZIfpnFG3hycs9Nlol3uhVgprzWSxjc_qgdzNQ,671
28
+ ctools/imgDialog.py,sha256=5r_XTPLyZj3Oa3HhwF2aQhziE74eFXe7aJZNndpXh18,1386
28
29
  ctools/license.py,sha256=0Kh7lXL7LD1PQqyijHajFL0GbmZGNB88PA2WskbQn_s,1066
29
30
  ctools/metrics.py,sha256=vq9Fnq2fhmhS4yoHS4gO7ArKS033Eou8vpA779Uue0I,4414
30
- ctools/mqtt_utils.py,sha256=9q_5CGvEhhvy8fZxaioguPSz8mvkdpCxnZ86GxjwTE0,10676
31
+ ctools/mqtt_utils.py,sha256=h53fcyBx7AZFe5fe2nFEu8n1IWT_5ja7-UY9f7gkj7Q,10676
31
32
  ctools/obj.py,sha256=GYS1B8NyjtUIh0HlK9r8avC2eGbK2SJac4C1CGnfGhI,479
32
- ctools/pacth.py,sha256=4TNWbgNqFSY_BBXKF4KzKauxL8W937wDkoqt84rU-Qg,2603
33
- ctools/plan_area_tools.py,sha256=yyFWIAvVe_p1e8HugR_h7r_W7dW9dQ-CGtgMz_Hz5QQ,3396
34
- ctools/process_pool.py,sha256=LTXU8pxEhnf8dDD23z0OoMlru5z-hKr8EFNH3xYDvCs,950
35
- ctools/pty_tools.py,sha256=H-j2xlZ5A0Q75NMop1ghCs2C0BZPKOPjilRujnh5Ngg,1602
33
+ ctools/pacth.py,sha256=MJ9Du-J9Gv62y4cZKls1jKbl5a5kL2y9bD-gzYUCveQ,2604
34
+ ctools/plan_area_tools.py,sha256=pySri43bVfkHjzlKujML-Nk8B3QLxuYv5KJMha-MLmU,3311
35
+ ctools/process_pool.py,sha256=1TuZySUbQjgYYcuwis54DIwQTimWvTLNahSra7Ia8Ps,951
36
+ ctools/pty_tools.py,sha256=RofRMFnU8Zd4o9mKI8t1v5n_RSCskfs_JcLsonm-1uM,1603
36
37
  ctools/resource_bundle_tools.py,sha256=8zW1-aj6jAYFBCoyslz5bL-5916G6Aif1RUy_ObbiVU,3793
37
- ctools/screenshot_tools.py,sha256=-DzWgguxTOTolzQXdZfUIHTOU3HNhp74fdomeSTBxKs,4538
38
+ ctools/screenshot_tools.py,sha256=KoljfgqW5x9aLwKdIfz0vR6v-fX4XjE92HudkDxC2hE,4539
38
39
  ctools/sign.py,sha256=YOrON1SeLRPavPWtE3GonvWFVv1SGFjfjrEVJ3k4x6s,566
39
40
  ctools/sm_tools.py,sha256=RwhTjuKw_TjaAJAui39wctzFFpbt79MQ3hjF0fhL638,1113
40
- ctools/ssh.py,sha256=3Oo4Lf6UyX-F_u_c1icHHDNzvVDHMKiWIO1u7E22QkM,217
41
+ ctools/ssh.py,sha256=Zii7HsIuHz5xAjR-2QFcHD-WXDDwnupnRbBlfNQcvys,231
41
42
  ctools/strDiff.py,sha256=QUtXOfsRLTFozH_zByqsC39JeuG3eZtrwGVeLyaHYUI,429
42
43
  ctools/string_tools.py,sha256=qjFn47lM27ISAa2Q4OKO7WOBdhyWC5lLHbME-uSeICE,2142
43
- ctools/sys_info.py,sha256=podW43pcn7z2f6FW2w1L9bU1HfeVjC3D34BdN_H6rf4,3625
44
+ ctools/sys_info.py,sha256=kgAPNP4ruso5kJS3kec9HMJLlvHPUj311Uv9SibPY_k,3626
44
45
  ctools/sys_log.py,sha256=oqb1S41LosdeZxtogFVgDk8R4sjiHhUeYJLCzHd728E,2805
45
- ctools/thread_pool.py,sha256=pPtKCE1BjagbhqtWjKo5HA2LktcSQ5KQUJz9Fn2Jl0w,924
46
+ ctools/thread_pool.py,sha256=qb68ULHy1K7u3MC7WP49wDhmgUhgWazd9FRuFbClET4,925
46
47
  ctools/upload_tools.py,sha256=sqe6K3ZWiyY58pFE5IO5mNaS1znnS7U4c4UqY8noED4,1068
47
- ctools/web_base.py,sha256=lrEANgUluyxGu2nCxuk94HMuS2-VFpLXsyw870PxB6g,4545
48
48
  ctools/win_canvas.py,sha256=PAxI4i1jalfree9d1YG4damjc2EzaHZrgHZCTgk2GiM,2530
49
- ctools/win_control.py,sha256=zNu06wNCtOnfIg12LIMMy2hBb1rskVQ8QIZu9qx4CNY,3487
49
+ ctools/win_control.py,sha256=35f9x_ijSyc4ZDkcT32e9ZIhr_ffNxadynrQfFuIdYo,3489
50
50
  ctools/wordFill.py,sha256=dB1OLt6GLmWdkDV8H20VWbJmY4ggNNI8iHD1ocae2iM,875
51
51
  ctools/word_fill.py,sha256=aIkzjAF2soSW6w2dO2CRZlveDcuIdr6v9DtyyyB8uxM,18216
52
52
  ctools/word_fill_entity.py,sha256=eX3G0Gy16hfGpavQSEkCIoKDdTnNgRRJrFvKliETZK8,985
53
53
  ctools/work_path.py,sha256=i4MTUobqNW2WMrT3mwEC_XYQ0_IhFmKoNpTX2W6A8Tc,1680
54
- gomyck_tools-1.0.5.dist-info/METADATA,sha256=K2Wm9YWf91WlSnS0Vf4fIUUTu5dNVFZJUY_dX05n4qE,712
55
- gomyck_tools-1.0.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
56
- gomyck_tools-1.0.5.dist-info/top_level.txt,sha256=-MiIH9FYRVKp1i5_SVRkaI-71WmF1sZSRrNWFU9ls3s,7
57
- gomyck_tools-1.0.5.dist-info/RECORD,,
54
+ gomyck_tools-1.1.0.dist-info/METADATA,sha256=4iOu6cIFu6mTT9_O1Zc9vuYGcRp5vmmixYao0fLKHig,744
55
+ gomyck_tools-1.1.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
56
+ gomyck_tools-1.1.0.dist-info/top_level.txt,sha256=-MiIH9FYRVKp1i5_SVRkaI-71WmF1sZSRrNWFU9ls3s,7
57
+ gomyck_tools-1.1.0.dist-info/RECORD,,