ezKit 1.12.0__py3-none-any.whl → 1.12.1__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.
ezKit/zabbix.py CHANGED
@@ -1,4 +1,5 @@
1
- import sys
1
+ """Zabbix Library"""
2
+
2
3
  import time
3
4
  from copy import deepcopy
4
5
 
@@ -8,7 +9,7 @@ from loguru import logger
8
9
  from . import utils
9
10
 
10
11
 
11
- class Zabbix():
12
+ class Zabbix:
12
13
  """Zabbix"""
13
14
 
14
15
  api: str | None = None
@@ -24,11 +25,7 @@ class Zabbix():
24
25
  # ----------------------------------------------------------------------------------------------
25
26
 
26
27
  def request(
27
- self,
28
- method: str,
29
- params: dict | list,
30
- debug: bool = False,
31
- **kwargs
28
+ self, method: str, params: dict | list, debug: bool = False, **kwargs
32
29
  ) -> dict | None:
33
30
  """Request Zabbix API"""
34
31
 
@@ -50,7 +47,7 @@ class Zabbix():
50
47
  "method": method,
51
48
  "params": params,
52
49
  "auth": None if method == "apiinfo.version" else self.auth,
53
- "id": int(time.time())
50
+ "id": int(time.time()),
54
51
  }
55
52
 
56
53
  if utils.isTrue(debug, bool):
@@ -61,7 +58,9 @@ class Zabbix():
61
58
  return None
62
59
 
63
60
  # 请求API
64
- response = requests.post(self.api, headers=headers, json=data, timeout=10, **kwargs)
61
+ response = requests.post(
62
+ self.api, headers=headers, json=data, timeout=10, **kwargs
63
+ )
65
64
 
66
65
  if utils.isTrue(debug, bool):
67
66
  logger.info(f"response: {response}")
@@ -89,8 +88,7 @@ class Zabbix():
89
88
  logger.info(f"{info} [started]")
90
89
 
91
90
  data: dict | None = self.request(
92
- method="user.login",
93
- params={"username": username, "password": password}
91
+ method="user.login", params={"username": username, "password": password}
94
92
  )
95
93
 
96
94
  if data is None:
@@ -122,7 +120,7 @@ class Zabbix():
122
120
  data = self.request(method="user.logout", params={})
123
121
 
124
122
  if data is not None and data.get("result"):
125
- logger.success(f'{info} [succeeded]')
123
+ logger.success(f"{info} [succeeded]")
126
124
  return True
127
125
 
128
126
  if data is not None and data.get("error"):
@@ -160,13 +158,13 @@ class Zabbix():
160
158
 
161
159
  logger.info(f"{info} [started]")
162
160
 
163
- data = self.request('apiinfo.version', [])
161
+ data = self.request("apiinfo.version", [])
164
162
 
165
163
  if data is None:
166
164
  return None
167
165
 
168
166
  logger.success(f"{info} [succeeded]")
169
- return data['result']
167
+ return data["result"]
170
168
 
171
169
  except Exception as e:
172
170
  logger.error(f"{info} [failed]")
@@ -189,17 +187,19 @@ class Zabbix():
189
187
 
190
188
  logger.info(f"{info} [started]")
191
189
 
192
- data = self.request('template.get', {'output': 'templateid', 'filter': {'name': name}})
190
+ data = self.request(
191
+ "template.get", {"output": "templateid", "filter": {"name": name}}
192
+ )
193
193
 
194
194
  if data is None:
195
195
  return None
196
196
 
197
- if not utils.isTrue(data['result'], list):
197
+ if not utils.isTrue(data["result"], list):
198
198
  logger.error(f"{info} [error: {data['error']}]")
199
199
  return None
200
200
 
201
201
  logger.success(f"{info} [succeeded]")
202
- return [i['templateid'] for i in data['result']]
202
+ return [i["templateid"] for i in data["result"]]
203
203
 
204
204
  except Exception as e:
205
205
  logger.error(f"{info} [failed]")
@@ -223,17 +223,19 @@ class Zabbix():
223
223
  logger.info(f"{info} [started]")
224
224
 
225
225
  # Zabbix 6.0 -> output: groupid
226
- data = self.request('hostgroup.get', {'output': 'extend', 'filter': {'name': name}})
226
+ data = self.request(
227
+ "hostgroup.get", {"output": "extend", "filter": {"name": name}}
228
+ )
227
229
 
228
230
  if data is None:
229
231
  return None
230
232
 
231
- if not utils.isTrue(data.get('result'), list):
233
+ if not utils.isTrue(data.get("result"), list):
232
234
  logger.error(f"{info} [error: {data['error']}]")
233
235
  return None
234
236
 
235
237
  logger.success(f"{info} [succeeded]")
236
- return [i['groupid'] for i in data['result']]
238
+ return [i["groupid"] for i in data["result"]]
237
239
 
238
240
  except Exception as e:
239
241
  logger.error(f"{info} [failed]")
@@ -242,7 +244,9 @@ class Zabbix():
242
244
 
243
245
  # ----------------------------------------------------------------------------------------------
244
246
 
245
- def get_hosts_by_template_name(self, name: str, output: str = 'extend', **kwargs) -> list | None:
247
+ def get_hosts_by_template_name(
248
+ self, name: str, output: str = "extend", **kwargs
249
+ ) -> list | None:
246
250
  """Get hosts by template name"""
247
251
 
248
252
  # name: string/array
@@ -255,28 +259,32 @@ class Zabbix():
255
259
 
256
260
  logger.info(f"{info} [started]")
257
261
 
258
- templates = self.request('template.get', {'output': ['templateid'], 'filter': {'host': name}})
262
+ templates = self.request(
263
+ "template.get", {"output": ["templateid"], "filter": {"host": name}}
264
+ )
259
265
 
260
266
  if templates is None:
261
267
  return None
262
268
 
263
- if not utils.isTrue(templates.get('result'), list):
269
+ if not utils.isTrue(templates.get("result"), list):
264
270
  logger.error(f"{info} [error: {templates['error']}]")
265
271
  return None
266
272
 
267
- templateids = [i['templateid'] for i in templates['result']]
273
+ templateids = [i["templateid"] for i in templates["result"]]
268
274
 
269
- hosts = self.request('host.get', {'output': output, 'templateids': templateids, **kwargs})
275
+ hosts = self.request(
276
+ "host.get", {"output": output, "templateids": templateids, **kwargs}
277
+ )
270
278
 
271
279
  if hosts is None:
272
280
  return None
273
281
 
274
- if not utils.isTrue(hosts.get('result'), list):
282
+ if not utils.isTrue(hosts.get("result"), list):
275
283
  logger.error(f"{info} [error: {hosts['error']}]")
276
284
  return None
277
285
 
278
286
  logger.success(f"{info} [succeeded]")
279
- return hosts['result']
287
+ return hosts["result"]
280
288
 
281
289
  except Exception as e:
282
290
  logger.error(f"{info} [failed]")
@@ -285,7 +293,9 @@ class Zabbix():
285
293
 
286
294
  # ----------------------------------------------------------------------------------------------
287
295
 
288
- def get_hosts_by_hostgroup_name(self, name: str, output: str | list = 'extend', **kwargs) -> list | None:
296
+ def get_hosts_by_hostgroup_name(
297
+ self, name: str, output: str | list = "extend", **kwargs
298
+ ) -> list | None:
289
299
  """Get hosts by hostgroup name"""
290
300
 
291
301
  # name: string/array
@@ -303,17 +313,19 @@ class Zabbix():
303
313
  if ids is None:
304
314
  return None
305
315
 
306
- hosts = self.request('host.get', {'output': output, 'groupids': ids, **kwargs})
316
+ hosts = self.request(
317
+ "host.get", {"output": output, "groupids": ids, **kwargs}
318
+ )
307
319
 
308
320
  if hosts is None:
309
321
  return None
310
322
 
311
- if not utils.isTrue(hosts.get('result'), list):
323
+ if not utils.isTrue(hosts.get("result"), list):
312
324
  logger.error(f"{info} [error: {hosts['error']}]")
313
325
  return None
314
326
 
315
327
  logger.success(f"{info} [succeeded]")
316
- return hosts['result']
328
+ return hosts["result"]
317
329
 
318
330
  except Exception as e:
319
331
  logger.error(f"{info} [failed]")
@@ -322,7 +334,9 @@ class Zabbix():
322
334
 
323
335
  # ----------------------------------------------------------------------------------------------
324
336
 
325
- def get_interface_by_host_id(self, hostid: str, output: str = 'extend') -> list | None:
337
+ def get_interface_by_host_id(
338
+ self, hostid: str, output: str = "extend"
339
+ ) -> list | None:
326
340
  """Get interface by host id"""
327
341
 
328
342
  # hostids: string/array
@@ -334,17 +348,19 @@ class Zabbix():
334
348
 
335
349
  logger.info(f"{info} [started]")
336
350
 
337
- data = self.request('hostinterface.get', {'output': output, 'hostids': hostid})
351
+ data = self.request(
352
+ "hostinterface.get", {"output": output, "hostids": hostid}
353
+ )
338
354
 
339
355
  if data is None:
340
356
  return None
341
357
 
342
- if not utils.isTrue(data.get('result'), list):
358
+ if not utils.isTrue(data.get("result"), list):
343
359
  logger.error(f"{info} [error: {data['error']}]")
344
360
  return None
345
361
 
346
362
  logger.success(f"{info} [succeeded]")
347
- return data['result']
363
+ return data["result"]
348
364
 
349
365
  except Exception as e:
350
366
  logger.error(f"{info} [failed]")
@@ -367,8 +383,8 @@ class Zabbix():
367
383
 
368
384
  # 服务器排查
369
385
  for host in hosts:
370
- if host['interfaces'][0]['available'] != '1':
371
- unavailable.append(host['name'])
386
+ if host["interfaces"][0]["available"] != "1":
387
+ unavailable.append(host["name"])
372
388
  else:
373
389
  available.append(host)
374
390
 
@@ -386,7 +402,7 @@ class Zabbix():
386
402
  time_from: int,
387
403
  time_till: int,
388
404
  item_key: str,
389
- data_type: int = 3
405
+ data_type: int = 3,
390
406
  ) -> list | None:
391
407
  """get history by item key"""
392
408
 
@@ -453,13 +469,13 @@ class Zabbix():
453
469
  # --------------------------------------------------------------------------------------
454
470
 
455
471
  # Get Item
456
- hostids = [i['hostid'] for i in hosts]
472
+ hostids = [i["hostid"] for i in hosts]
457
473
  item_params = {
458
- 'output': ['name', 'itemid', 'hostid'],
459
- 'hostids': hostids,
460
- 'filter': {'key_': item_key}
474
+ "output": ["name", "itemid", "hostid"],
475
+ "hostids": hostids,
476
+ "filter": {"key_": item_key},
461
477
  }
462
- items = self.request('item.get', item_params)
478
+ items = self.request("item.get", item_params)
463
479
 
464
480
  if items is None:
465
481
  return None
@@ -467,7 +483,7 @@ class Zabbix():
467
483
  # --------------------------------------------------------------------------------------
468
484
 
469
485
  # 因为 history 获取的顺序是乱的, 为了使输出和 hosts 列表顺序一致, 将 Item ID 追加到 hosts, 然后遍历 hosts 列表输出
470
- if not utils.isTrue(items.get('result'), list):
486
+ if not utils.isTrue(items.get("result"), list):
471
487
  logger.error(f"{info} [item key {item_key} not find]")
472
488
  return None
473
489
 
@@ -475,12 +491,12 @@ class Zabbix():
475
491
  if not isinstance(items, dict):
476
492
  return
477
493
 
478
- item: dict = next((item_object for item_object in items['result'] if host['hostid'] == item_object['hostid']), '') # type: ignore
494
+ item: dict = next((item_object for item_object in items["result"] if host["hostid"] == item_object["hostid"]), "") # type: ignore
479
495
 
480
- if utils.isTrue(item, dict) and item.get('itemid') is not None:
481
- host['itemkey'] = item_key
482
- host['itemid'] = item['itemid']
483
- item_ids.append(item['itemid'])
496
+ if utils.isTrue(item, dict) and item.get("itemid") is not None:
497
+ host["itemkey"] = item_key
498
+ host["itemid"] = item["itemid"]
499
+ item_ids.append(item["itemid"])
484
500
  item_history.append(host)
485
501
 
486
502
  # 如果 ID 列表为空, 则返回 None
@@ -492,30 +508,36 @@ class Zabbix():
492
508
 
493
509
  # Get History
494
510
  history_params = {
495
- 'output': 'extend',
496
- 'history': data_type,
497
- 'itemids': item_ids,
498
- 'time_from': time_from,
499
- 'time_till': time_till
511
+ "output": "extend",
512
+ "history": data_type,
513
+ "itemids": item_ids,
514
+ "time_from": time_from,
515
+ "time_till": time_till,
500
516
  }
501
- history = self.request('history.get', history_params)
517
+ history = self.request("history.get", history_params)
502
518
 
503
519
  if history is None:
504
520
  return None
505
521
 
506
522
  # --------------------------------------------------------------------------------------------------
507
523
 
508
- if not utils.isTrue(history.get('result'), list):
524
+ if not utils.isTrue(history.get("result"), list):
509
525
  logger.error(f"{info} [item history not find]")
510
526
  return None
511
527
 
512
528
  for item in item_history:
513
529
  # 根据 itemid 提取数据
514
- item_history_data = [history_result for history_result in history['result'] if item['itemid'] == history_result['itemid']]
530
+ item_history_data = [
531
+ history_result
532
+ for history_result in history["result"]
533
+ if item["itemid"] == history_result["itemid"]
534
+ ]
515
535
  # 根据 clock 排序
516
- item_history_data = utils.list_dict_sorted_by_key(item_history_data, 'clock')
536
+ item_history_data = utils.list_dict_sorted_by_key(
537
+ item_history_data, "clock"
538
+ )
517
539
  # 整合数据
518
- item['history'] = item_history_data
540
+ item["history"] = item_history_data
519
541
 
520
542
  logger.success(f"{info} [succeeded]")
521
543
  return item_history
@@ -533,7 +555,7 @@ class Zabbix():
533
555
  interfaces: list,
534
556
  time_from: int,
535
557
  time_till: int,
536
- direction: str
558
+ direction: str,
537
559
  ) -> list | None:
538
560
  """获取网卡历史数据"""
539
561
 
@@ -561,28 +583,35 @@ class Zabbix():
561
583
  # return None
562
584
 
563
585
  # 创建一个只有 网卡名称 的 列表
564
- interfaces_names: set = set(interface['interface'] for interface in interfaces)
586
+ interfaces_names: set = set(
587
+ interface["interface"] for interface in interfaces
588
+ )
565
589
 
566
590
  # 创建一个 Key 为 网卡名称 的 dictionary
567
591
  interfaces_dict: dict = {key: [] for key in interfaces_names}
568
592
 
569
593
  # 汇集 相同网卡名称 的 IP
570
594
  for interface in interfaces:
571
- interfaces_dict[interface['interface']].append(interface['host'])
595
+ interfaces_dict[interface["interface"]].append(interface["host"])
572
596
 
573
597
  # 获取历史数据
574
598
  history: list = []
575
599
 
576
600
  for key, value in interfaces_dict.items():
577
601
 
578
- hosts_by_ip = [host for v in value for host in hosts if v == host['interfaces'][0]['ip']]
602
+ hosts_by_ip = [
603
+ host
604
+ for v in value
605
+ for host in hosts
606
+ if v == host["interfaces"][0]["ip"]
607
+ ]
579
608
 
580
609
  data = self.get_history_by_item_key(
581
610
  hosts=hosts_by_ip,
582
611
  time_from=time_from,
583
612
  time_till=time_till,
584
613
  item_key=f'net.if.{direction}["{key}"]',
585
- data_type=3
614
+ data_type=3,
586
615
  )
587
616
 
588
617
  if data is None:
@@ -593,7 +622,7 @@ class Zabbix():
593
622
  logger.success(f"{info} [succeeded]")
594
623
 
595
624
  # 根据 name 排序
596
- return utils.list_dict_sorted_by_key(history, 'name')
625
+ return utils.list_dict_sorted_by_key(history, "name")
597
626
 
598
627
  except Exception as e:
599
628
  logger.error(f"{info} [failed]")
@@ -618,7 +647,9 @@ class Zabbix():
618
647
 
619
648
  hostids = [i["hostid"] for i in hosts]
620
649
 
621
- hostinterface = self.request(method="hostinterface.get", params={"hostids": hostids})
650
+ hostinterface = self.request(
651
+ method="hostinterface.get", params={"hostids": hostids}
652
+ )
622
653
 
623
654
  if hostinterface is None:
624
655
  return None
@@ -638,7 +669,7 @@ class Zabbix():
638
669
  ips: list,
639
670
  item: dict | None = None,
640
671
  trigger: dict | None = None,
641
- graph: bool | dict = False
672
+ graph: bool | dict = False,
642
673
  ) -> bool:
643
674
  """create object"""
644
675
 
@@ -720,7 +751,9 @@ class Zabbix():
720
751
 
721
752
  logger.info(f"{info} [get host object]")
722
753
 
723
- response = self.request('hostinterface.get', {'filter': {'ip': ip}, 'selectHosts': ['host']})
754
+ response = self.request(
755
+ "hostinterface.get", {"filter": {"ip": ip}, "selectHosts": ["host"]}
756
+ )
724
757
 
725
758
  if response is None:
726
759
  continue
@@ -735,9 +768,9 @@ class Zabbix():
735
768
  # logger.error(f"{info} [get host object] error: {ip}")
736
769
  # continue
737
770
 
738
- host = response['result'][0]['hosts'][0]['host']
739
- host_id = response['result'][0]['hostid']
740
- interface_id = response['result'][0]['interfaceid']
771
+ host = response["result"][0]["hosts"][0]["host"]
772
+ host_id = response["result"][0]["hostid"]
773
+ interface_id = response["result"][0]["interfaceid"]
741
774
 
742
775
  # ----------------------------------------------------------------------------------
743
776
 
@@ -745,23 +778,23 @@ class Zabbix():
745
778
 
746
779
  if isinstance(item, dict) and utils.isTrue(item, dict):
747
780
 
748
- logger.info(f'{info} [create item]')
781
+ logger.info(f"{info} [create item]")
749
782
 
750
783
  params = {
751
784
  # 'name': None,
752
785
  # 'key_': None,
753
- 'hostid': host_id,
754
- 'type': 7,
755
- 'value_type': 3,
756
- 'interfaceid': interface_id,
757
- 'delay': '1m',
758
- 'history': '7d',
759
- 'trends': '7d'
786
+ "hostid": host_id,
787
+ "type": 7,
788
+ "value_type": 3,
789
+ "interfaceid": interface_id,
790
+ "delay": "1m",
791
+ "history": "7d",
792
+ "trends": "7d",
760
793
  } | item
761
794
 
762
- response = self.request('item.create', params)
795
+ response = self.request("item.create", params)
763
796
 
764
- if response is None or response.get('result') is None:
797
+ if response is None or response.get("result") is None:
765
798
  continue
766
799
 
767
800
  # match True:
@@ -777,7 +810,7 @@ class Zabbix():
777
810
  # logger.error(f"{log_prefix} error: {item.get('name')}")
778
811
  # continue
779
812
 
780
- item_id = response['result']['itemids'][0]
813
+ item_id = response["result"]["itemids"][0]
781
814
 
782
815
  # ----------------------------------------------------------------------------------
783
816
 
@@ -785,13 +818,13 @@ class Zabbix():
785
818
 
786
819
  if isinstance(trigger, dict) and utils.isTrue(trigger, dict):
787
820
 
788
- logger.info(f'{info} [create trigger]')
821
+ logger.info(f"{info} [create trigger]")
789
822
 
790
823
  params = {
791
824
  # 'description': None,
792
- 'priority': '2',
825
+ "priority": "2",
793
826
  # 'expression': None,
794
- 'manual_close': '1'
827
+ "manual_close": "1",
795
828
  } | trigger
796
829
 
797
830
  # Trigger 的 expression 需要指定 HOST, 例如:
@@ -802,12 +835,12 @@ class Zabbix():
802
835
  # 所以, 传递参数的时候, expression 中就必须要有 {host}, 用于定义 HOST
803
836
  # 如果传递参数的时候使用了 f-strings, 要保留 {host}, 再套一层 {} 即可
804
837
  # f'last(/{{host}}/system.uptime)<10m'
805
- params['expression'] = f"{params['expression']}".format(host=host)
838
+ params["expression"] = f"{params['expression']}".format(host=host)
806
839
 
807
840
  # 注意: create trigger 的 params 的类型是 list
808
- response = self.request('trigger.create', [params])
841
+ response = self.request("trigger.create", [params])
809
842
 
810
- if response is None or response.get('result') is None:
843
+ if response is None or response.get("result") is None:
811
844
  continue
812
845
 
813
846
  # logger.warning(f'{log_prefix} response: {response}') if utils.isTrue(self.debug, bool) else next
@@ -829,11 +862,13 @@ class Zabbix():
829
862
 
830
863
  # Create Graph
831
864
 
832
- if utils.isTrue(graph, bool) or (isinstance(graph, dict) and utils.isTrue(graph, dict)):
865
+ if utils.isTrue(graph, bool) or (
866
+ isinstance(graph, dict) and utils.isTrue(graph, dict)
867
+ ):
833
868
 
834
- log_prefix = 'create graph'
869
+ log_prefix = "create graph"
835
870
 
836
- logger.info(f'{log_prefix} ......')
871
+ logger.info(f"{log_prefix} ......")
837
872
 
838
873
  # Graph object:
839
874
  #
@@ -863,25 +898,29 @@ class Zabbix():
863
898
  continue
864
899
 
865
900
  params: dict = {
866
- 'name': item.get('name'),
867
- 'width': 900,
868
- 'height': 200,
869
- 'gitems': [{'itemid': item_id, 'color': '0040FF'}]
901
+ "name": item.get("name"),
902
+ "width": 900,
903
+ "height": 200,
904
+ "gitems": [{"itemid": item_id, "color": "0040FF"}],
870
905
  }
871
906
 
872
907
  if isinstance(graph, dict) and utils.isTrue(graph, dict):
873
908
 
874
909
  params = params | graph
875
910
 
876
- if utils.isTrue(params.get('gitems'), list):
877
- gitems = params.get('gitems')
911
+ if utils.isTrue(params.get("gitems"), list):
912
+ gitems = params.get("gitems")
878
913
  if gitems is None:
879
914
  continue
880
915
  for gitem in gitems:
881
- if isinstance(gitem, dict) and utils.isTrue(gitem, dict) and gitem.get('itemid') == '{}':
882
- gitem['itemid'] = item_id
883
-
884
- response = self.request('graph.create', params)
916
+ if (
917
+ isinstance(gitem, dict)
918
+ and utils.isTrue(gitem, dict)
919
+ and gitem.get("itemid") == "{}"
920
+ ):
921
+ gitem["itemid"] = item_id
922
+
923
+ response = self.request("graph.create", params)
885
924
 
886
925
  if response is None:
887
926
  continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ezKit
3
- Version: 1.12.0
3
+ Version: 1.12.1
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -0,0 +1,22 @@
1
+ ezKit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ ezKit/_file.py,sha256=0qRZhwYuagTgTGrhm-tzAMvEQT4HTJA_xZKqF2bo0ho,1207
3
+ ezKit/bottle.py,sha256=43h4v1kzz6qrLvCt5IMN0H-gFtaT0koG9wETqteXsps,181666
4
+ ezKit/bottle_extensions.py,sha256=27rogmfK7mL2qUSjXH79IMGZbCVULtYEikql_N9O6Zs,1165
5
+ ezKit/cipher.py,sha256=7jBarRH7ukSYzkz-Anl8B8JzluhnRz4CLHidPRRj_cg,2939
6
+ ezKit/database.py,sha256=6mfH--zRk2xwjlaqfxEWCeX-9HczMYk2dSnsRkjzpFk,12502
7
+ ezKit/dockerhub.py,sha256=j-wQO-71BsOgExHZhYynuy2k_hCX3on-vg0TH7QCit4,1996
8
+ ezKit/http.py,sha256=zhNxJF-x91UqGncXWxVXnhZVpFo_wmmpGnMXVT11y9E,1832
9
+ ezKit/markdown_to_html.template,sha256=21G2sSVGJn6aJvHd0NN4zY5YiDteKe4UtW36AzBwSdk,22274
10
+ ezKit/mongo.py,sha256=vsRCjJ2uWbNp-1bnGKICPohNYx25El8XnHp10o-lsM4,2397
11
+ ezKit/qywx.py,sha256=Nc4HTzWia6PsngUcoxJa8FX6-gzAo3XIqBC2IFTrbjA,10797
12
+ ezKit/redis.py,sha256=leAre527XDBmA_FsjlqQ2_JT1eqwM9uvpYid1Ir1Va4,1972
13
+ ezKit/sendemail.py,sha256=xqlFyRp96zggSN3eF3fCBXi0WMwGbOZxwDWkpQMCn9I,7412
14
+ ezKit/token.py,sha256=Ac-i9xfq4TqpGyfCzakjrh4NYzxHiN2sCQrMk1tzVi8,1716
15
+ ezKit/utils.py,sha256=wyh3lNTG2fJ-a-lszNZUoSluEC5V8Y9cs1JiAVI6D_A,44243
16
+ ezKit/xftp.py,sha256=-XQXyhMqeigT63P6sXkSS7r4GROXyqqlkzKxITLWG-g,8278
17
+ ezKit/zabbix.py,sha256=PkMnfu7mcuotwwIIsHaC9FsNg-gap6hD1xvm0AwSL1Y,33777
18
+ ezkit-1.12.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
+ ezkit-1.12.1.dist-info/METADATA,sha256=tNwfMN1cWo0bSyTv7WCBubgTscvf7f9HLDeJi74e6OM,316
20
+ ezkit-1.12.1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
21
+ ezkit-1.12.1.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
+ ezkit-1.12.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,22 +0,0 @@
1
- ezKit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- ezKit/_file.py,sha256=0qRZhwYuagTgTGrhm-tzAMvEQT4HTJA_xZKqF2bo0ho,1207
3
- ezKit/bottle.py,sha256=43h4v1kzz6qrLvCt5IMN0H-gFtaT0koG9wETqteXsps,181666
4
- ezKit/bottle_extensions.py,sha256=CwXKxVKxxtbyfeeOSp2xODUqJBo7ro2C88H9sUOVDJI,1161
5
- ezKit/cipher.py,sha256=0T_StbjiNI4zgrjVgcfU-ffKgu1waBA9UDudAnqFcNM,2896
6
- ezKit/database.py,sha256=r5YNoEzeOeVTlEWI99xXtHTmPZ73_DopS8DTzZk8Lts,12432
7
- ezKit/dockerhub.py,sha256=a0v9Cdg2vIfUvSSf8gYS22mvQtUcJpJWGGM-nBphrOA,1958
8
- ezKit/http.py,sha256=ysXzqXFi9zmuVKINbYGwmf9Q5xDVW_DZWrSh6HSVq8M,1800
9
- ezKit/markdown_to_html.template,sha256=21G2sSVGJn6aJvHd0NN4zY5YiDteKe4UtW36AzBwSdk,22274
10
- ezKit/mongo.py,sha256=l3jRMmoGrTm16OG4daSCn0JLU1nbYAmTtHokwjLXzoA,2390
11
- ezKit/qywx.py,sha256=dGChIIf2V81MwufcPn6hwgSenPuxqK994KRH7ECT-CM,10387
12
- ezKit/redis.py,sha256=tdiqfizPYQQTIUumkJGUJsJVlv0zVTSTYGQN0QutYs4,1963
13
- ezKit/sendemail.py,sha256=47JTDFoLJKi0YtF3RAp9nFfo0ko2jlde3R_C1wr2E2w,7397
14
- ezKit/token.py,sha256=HKREyZj_T2S8-aFoFIrBXTaCKExQq4zE66OHXhGHqQg,1750
15
- ezKit/utils.py,sha256=uOUOCgx6WU6J2lTbHlL78Flk3oCZgdj8rBOFg2i0K7Q,44241
16
- ezKit/xftp.py,sha256=9-ocFRH2SfmkP830J2RCkSIHZ6yLa3tKF7iXjHDiakc,7878
17
- ezKit/zabbix.py,sha256=JELOKZMXOWSdq5NW-VNJ10vahhRWLAILDGebMi8VunM,33060
18
- ezkit-1.12.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
- ezkit-1.12.0.dist-info/METADATA,sha256=M6kMMDlVIa56bs6uoAbnaZSh4OaYhogeM5zSY7WM9cQ,316
20
- ezkit-1.12.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
21
- ezkit-1.12.0.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
- ezkit-1.12.0.dist-info/RECORD,,