{{breadcrumbs}}
← BACK TO HUB
HUB / lib_bejson_server.py

lib_bejson_server.py

Runtime
Python
Category
Core
Path
/storage/emulated/0/Projects/Management/Libraries/py/Core/lib_bejson_server.py
FILE // lib_bejson_server.py
"""
Library:     lib_bejson_server.py
MFDB Version: 1.3.1
Format_Creator: Elton Boehnen
Status:      OFFICIAL - v1.3.1
Date:        2026-05-06
"""
"""
Library:     lib_bejson_server.py
Family:      Core
Jurisdiction: ["PYTHON", "BEJSON_LIBRARIES"]
Status:      OFFICIAL — BEJSON/Lib (v1.4)
Author:      Elton Boehnen
Version:     1.3 OFFICIAL
Date:        2026-05-01
Description: Flask server management with port randomization, registration, and auto-launch.
"""
import os
import socket
import random
import subprocess
import sys
import json
import time
from datetime import datetime

# JURISDICTIONS: ["PYTHON", "WEB_ARCHITECTURE", "CORE_COMMAND"]

def is_port_in_use(port):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        return s.connect_ex(('localhost', port)) == 0

def get_random_available_port(start=5001, end=5020):
    ports = list(range(start, end + 1))
    random.shuffle(ports)
    for port in ports:
        if not is_port_in_use(port):
            return port
    return None

def register_server(name, port):
    reg_path = '/Data/Data/com.termux/files/home/Registry/Environment_Registry.bejson.json'
    if not os.path.exists(reg_path): return
    try:
        with open(reg_path, 'r') as f:
            data = json.load(f)
        data['Values'] = [v for v in data['Values'] if not (v[0] == 'Running_Server' and v[3] == name)]
        now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
        url = f"http://localhost:{port}"
        record = ['Running_Server', now, 'ServerLib', name, url, None, None, str(port), 'ONLINE', 'Global']
        data['Values'].append(record)
        with open(reg_path, 'w') as f:
            json.dump(data, f, indent=2)
        print(f" [ServerLib] REGISTERED: {name} on {url}")
    except Exception as e:
        print(f" [ServerLib] Registration Error: {e}")

def unregister_server(name):
    reg_path = '/Data/Data/com.termux/files/home/Registry/Environment_Registry.bejson.json'
    if not os.path.exists(reg_path): return
    try:
        with open(reg_path, 'r') as f:
            data = json.load(f)
        data['Values'] = [v for v in data['Values'] if not (v[0] == 'Running_Server' and v[3] == name)]
        with open(reg_path, 'w') as f:
            json.dump(data, f, indent=2)
        print(f" [ServerLib] UNREGISTERED: {name}")
    except Exception as e:
        print(f" [ServerLib] Unregistration Error: {e}")

def start_flask_server_random(app_path, name=None, debug=False):
    port = get_random_available_port()
    if port is None:
        print("FAIL | No available ports.")
        return False

    app_name = name or os.path.splitext(os.path.basename(app_path))[0]
    register_server(app_name, port)
    
    url = f"http://localhost:{port}"
    print(f"--- BEJSON SERVER STARTER ---")
    print(f"Name: {app_name}")
    print(f"Port: {port}")
    print(f"OPEN_URL:{url}")
    # Mandate: Copy URL to clipboard
    try:
        subprocess.run(["termux-clipboard-set", url])
        print(" [ServerLib] URL copied to clipboard.")
    except:
        pass

    
    # Mandate: Auto-launch
    try:
        subprocess.Popen(['termux-open-url', url])
    except:
        pass
    
    env = os.environ.copy()
    env['FLASK_APP'] = app_path
    env['FLASK_DEBUG'] = '1' if debug else '0'
    
    try:
        subprocess.run(['flask', 'run', '--host=0.0.0.0', '--port', str(port)], env=env)
    finally:
        unregister_server(app_name)

if __name__ == '__main__':
    if len(sys.argv) > 1:
        start_flask_server_random(sys.argv[1])
    else:
        print("Usage: python3 lib_bejson_server.py <app_path>")