ConsoleFramework 2.0.0__tar.gz → 2.0.1__tar.gz
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.
- {consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework/__init__.py +24 -127
- {consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework.egg-info/PKG-INFO +2 -2
- {consoleframework-2.0.0 → consoleframework-2.0.1}/PKG-INFO +2 -2
- {consoleframework-2.0.0 → consoleframework-2.0.1}/setup.py +2 -2
- {consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework.egg-info/SOURCES.txt +0 -0
- {consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework.egg-info/dependency_links.txt +0 -0
- {consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework.egg-info/not-zip-safe +0 -0
- {consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework.egg-info/top_level.txt +0 -0
- {consoleframework-2.0.0 → consoleframework-2.0.1}/MANIFEST.in +0 -0
- {consoleframework-2.0.0 → consoleframework-2.0.1}/setup.cfg +0 -0
|
@@ -10,7 +10,7 @@ import time
|
|
|
10
10
|
import math
|
|
11
11
|
import random
|
|
12
12
|
import socket
|
|
13
|
-
import
|
|
13
|
+
import urllib.request
|
|
14
14
|
import json
|
|
15
15
|
import threading
|
|
16
16
|
import platform
|
|
@@ -18,7 +18,7 @@ import zipfile
|
|
|
18
18
|
import stat
|
|
19
19
|
import subprocess as CMD
|
|
20
20
|
import threading
|
|
21
|
-
|
|
21
|
+
import urllib.request
|
|
22
22
|
class Colors:
|
|
23
23
|
RESET = "\033[0m"
|
|
24
24
|
RED = "\033[31m"
|
|
@@ -395,6 +395,7 @@ class ConsoleInfo:
|
|
|
395
395
|
return result.stdout.strip()
|
|
396
396
|
except:
|
|
397
397
|
return "Error: pip not found"
|
|
398
|
+
|
|
398
399
|
class Process:
|
|
399
400
|
@staticmethod
|
|
400
401
|
def StartPyCode(code, wait=False, args=None, python="python"):
|
|
@@ -501,142 +502,27 @@ class Process:
|
|
|
501
502
|
@staticmethod
|
|
502
503
|
def GetCurrentPID():
|
|
503
504
|
return os.getpid()
|
|
505
|
+
|
|
504
506
|
class Channel:
|
|
505
507
|
def __init__(self):
|
|
506
508
|
self.connection = None
|
|
507
509
|
self.host = None
|
|
508
510
|
self.port = None
|
|
509
511
|
self.is_server = False
|
|
510
|
-
self.ngrok_process = None
|
|
511
|
-
self.ngrok_url = None
|
|
512
|
-
self.renew_thread = None
|
|
513
|
-
self.renew_active = False
|
|
514
512
|
|
|
515
513
|
@staticmethod
|
|
516
|
-
def
|
|
514
|
+
def _get(url, timeout=5):
|
|
517
515
|
try:
|
|
518
|
-
|
|
516
|
+
import urllib.request
|
|
517
|
+
with urllib.request.urlopen(url, timeout=timeout) as response:
|
|
518
|
+
return response.read().decode()
|
|
519
519
|
except Exception:
|
|
520
520
|
return None
|
|
521
521
|
|
|
522
522
|
@staticmethod
|
|
523
|
-
def
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
if system == 'windows':
|
|
528
|
-
url = 'https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-windows-amd64.zip'
|
|
529
|
-
exe_name = 'ngrok.exe'
|
|
530
|
-
elif system == 'linux':
|
|
531
|
-
if 'aarch64' in arch or 'arm64' in arch:
|
|
532
|
-
url = 'https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm64.zip'
|
|
533
|
-
else:
|
|
534
|
-
url = 'https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip'
|
|
535
|
-
exe_name = 'ngrok'
|
|
536
|
-
elif system == 'darwin':
|
|
537
|
-
url = 'https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip'
|
|
538
|
-
exe_name = 'ngrok'
|
|
539
|
-
else:
|
|
540
|
-
print(f"[Error] Unsupported platform: {system}")
|
|
541
|
-
return False
|
|
542
|
-
|
|
543
|
-
if os.path.exists(exe_name):
|
|
544
|
-
return True
|
|
545
|
-
|
|
546
|
-
print(f"[Ngrok] Downloading from {url}...")
|
|
547
|
-
try:
|
|
548
|
-
response = requests.get(url, stream=True)
|
|
549
|
-
with open('ngrok.zip', 'wb') as f:
|
|
550
|
-
for chunk in response.iter_content(chunk_size=8192):
|
|
551
|
-
f.write(chunk)
|
|
552
|
-
|
|
553
|
-
with zipfile.ZipFile('ngrok.zip', 'r') as zip_ref:
|
|
554
|
-
zip_ref.extractall('.')
|
|
555
|
-
|
|
556
|
-
os.remove('ngrok.zip')
|
|
557
|
-
|
|
558
|
-
if system != 'windows':
|
|
559
|
-
st = os.stat(exe_name)
|
|
560
|
-
os.chmod(exe_name, st.st_mode | stat.S_IEXEC)
|
|
561
|
-
|
|
562
|
-
print(f"[Ngrok] Downloaded successfully!")
|
|
563
|
-
return True
|
|
564
|
-
except Exception as e:
|
|
565
|
-
print(f"[Error] Failed to download ngrok: {e}")
|
|
566
|
-
return False
|
|
567
|
-
|
|
568
|
-
def CreateNgrokTunnel(self, port=54321, region='us'):
|
|
569
|
-
if not os.path.exists('ngrok') and not os.path.exists('ngrok.exe'):
|
|
570
|
-
print("[Ngrok] ngrok not found. Downloading...")
|
|
571
|
-
if not self.DownloadNgrok():
|
|
572
|
-
return None
|
|
573
|
-
|
|
574
|
-
try:
|
|
575
|
-
exe_name = 'ngrok.exe' if platform.system().lower() == 'windows' else 'ngrok'
|
|
576
|
-
|
|
577
|
-
cmd = f"./{exe_name} tcp {port} --region={region} --log=stdout --log-level=info"
|
|
578
|
-
if platform.system().lower() == 'windows':
|
|
579
|
-
cmd = f"{exe_name} tcp {port} --region={region} --log=stdout --log-level=info"
|
|
580
|
-
|
|
581
|
-
self.ngrok_process = CMD.Popen(cmd, shell=True, stdout=CMD.PIPE, stderr=CMD.PIPE)
|
|
582
|
-
time.sleep(3)
|
|
583
|
-
|
|
584
|
-
response = requests.get('http://localhost:4040/api/tunnels')
|
|
585
|
-
data = response.json()
|
|
586
|
-
if data['tunnels']:
|
|
587
|
-
self.ngrok_url = data['tunnels'][0]['public_url']
|
|
588
|
-
print(f"[Ngrok] Tunnel created: {self.ngrok_url}")
|
|
589
|
-
return self.ngrok_url
|
|
590
|
-
else:
|
|
591
|
-
print("[Ngrok] No tunnels found")
|
|
592
|
-
return None
|
|
593
|
-
except Exception as e:
|
|
594
|
-
print(f"[Ngrok] Error: {e}")
|
|
595
|
-
return None
|
|
596
|
-
|
|
597
|
-
def StopNgrokTunnel(self):
|
|
598
|
-
if self.ngrok_process:
|
|
599
|
-
self.ngrok_process.terminate()
|
|
600
|
-
self.ngrok_process = None
|
|
601
|
-
self.ngrok_url = None
|
|
602
|
-
print("[Ngrok] Tunnel stopped")
|
|
603
|
-
|
|
604
|
-
def _renew_loop(self, port, region, interval):
|
|
605
|
-
while self.renew_active:
|
|
606
|
-
time.sleep(interval)
|
|
607
|
-
self.StopNgrokTunnel()
|
|
608
|
-
self.CreateNgrokTunnel(port, region)
|
|
609
|
-
print("[Ngrok] Tunnel renewed")
|
|
610
|
-
|
|
611
|
-
def StartAutoRenew(self, port=54321, region='us', interval=7000):
|
|
612
|
-
self.renew_active = True
|
|
613
|
-
self.renew_thread = threading.Thread(target=self._renew_loop, args=(port, region, interval))
|
|
614
|
-
self.renew_thread.daemon = True
|
|
615
|
-
self.renew_thread.start()
|
|
616
|
-
|
|
617
|
-
def StopAutoRenew(self):
|
|
618
|
-
self.renew_active = False
|
|
619
|
-
if self.renew_thread:
|
|
620
|
-
self.renew_thread.join(timeout=1)
|
|
621
|
-
|
|
622
|
-
def CreateServer(self, port=54321, ngrok=False, region='us', auto_renew=False, renew_interval=7000):
|
|
623
|
-
self.is_server = True
|
|
624
|
-
self.port = port
|
|
625
|
-
|
|
626
|
-
if ngrok:
|
|
627
|
-
self.CreateNgrokTunnel(port, region)
|
|
628
|
-
if auto_renew:
|
|
629
|
-
self.StartAutoRenew(port, region, renew_interval)
|
|
630
|
-
|
|
631
|
-
try:
|
|
632
|
-
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
633
|
-
server.bind(('0.0.0.0', port))
|
|
634
|
-
server.listen(1)
|
|
635
|
-
self.connection, addr = server.accept()
|
|
636
|
-
return self.connection
|
|
637
|
-
except Exception as e:
|
|
638
|
-
print(f"[Error] Server failed: {e}")
|
|
639
|
-
return None
|
|
523
|
+
def GetPublicIP():
|
|
524
|
+
ip = Channel._get('https://api.ipify.org')
|
|
525
|
+
return ip
|
|
640
526
|
|
|
641
527
|
def Connect(self, host='127.0.0.1', port=54321):
|
|
642
528
|
self.host = host
|
|
@@ -656,12 +542,23 @@ class Channel:
|
|
|
656
542
|
return None
|
|
657
543
|
return self.Connect(host=public_ip, port=port)
|
|
658
544
|
|
|
545
|
+
def CreateServer(self, port=54321):
|
|
546
|
+
self.is_server = True
|
|
547
|
+
self.port = port
|
|
548
|
+
try:
|
|
549
|
+
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
550
|
+
server.bind(('0.0.0.0', port))
|
|
551
|
+
server.listen(1)
|
|
552
|
+
self.connection, addr = server.accept()
|
|
553
|
+
return self.connection
|
|
554
|
+
except Exception as e:
|
|
555
|
+
print(f"[Error] Server failed: {e}")
|
|
556
|
+
return None
|
|
557
|
+
|
|
659
558
|
def Disconnect(self):
|
|
660
559
|
if self.connection:
|
|
661
560
|
self.connection.close()
|
|
662
561
|
self.connection = None
|
|
663
|
-
if self.ngrok_process:
|
|
664
|
-
self.StopNgrokTunnel()
|
|
665
562
|
|
|
666
563
|
def Send(self, message):
|
|
667
564
|
if not self.connection:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ConsoleFramework
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.1
|
|
4
4
|
Summary: The best Console Library of the Python.
|
|
5
5
|
Author: Suleiman
|
|
6
6
|
Author-email: steal.apet@mail.ru
|
|
@@ -19,4 +19,4 @@ Dynamic: license
|
|
|
19
19
|
Dynamic: requires-python
|
|
20
20
|
Dynamic: summary
|
|
21
21
|
|
|
22
|
-
ConsoleFramework - Pure Python library for console rendering, animations, processes and more.
|
|
22
|
+
ConsoleFramework - Pure Python library for console rendering, animations, processes and more. In this module ONLY standart python, no other modules.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ConsoleFramework
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.1
|
|
4
4
|
Summary: The best Console Library of the Python.
|
|
5
5
|
Author: Suleiman
|
|
6
6
|
Author-email: steal.apet@mail.ru
|
|
@@ -19,4 +19,4 @@ Dynamic: license
|
|
|
19
19
|
Dynamic: requires-python
|
|
20
20
|
Dynamic: summary
|
|
21
21
|
|
|
22
|
-
ConsoleFramework - Pure Python library for console rendering, animations, processes and more.
|
|
22
|
+
ConsoleFramework - Pure Python library for console rendering, animations, processes and more. In this module ONLY standart python, no other modules.
|
|
@@ -2,9 +2,9 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="ConsoleFramework",
|
|
5
|
-
version="2.0.
|
|
5
|
+
version="2.0.1",
|
|
6
6
|
description="The best Console Library of the Python.",
|
|
7
|
-
long_description="ConsoleFramework - Pure Python library for console rendering, animations, processes and more.",
|
|
7
|
+
long_description="ConsoleFramework - Pure Python library for console rendering, animations, processes and more. In this module ONLY standart python, no other modules.",
|
|
8
8
|
long_description_content_type="text/plain",
|
|
9
9
|
author="Suleiman",
|
|
10
10
|
author_email="steal.apet@mail.ru",
|
|
File without changes
|
{consoleframework-2.0.0 → consoleframework-2.0.1}/ConsoleFramework.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|