#wip: Autoportable Python version.

This commit is contained in:
KyMAN 2026-06-22 07:37:40 +02:00
parent f642ad8b22
commit 922f995022
83 changed files with 425 additions and 521 deletions

View File

@ -53,7 +53,9 @@
"AnP_ControllersManager_start" : null,
"default_controllers" : {
"ai" : "AIController"
"ai" : "AIController",
"clonations_processes" : "CloneController",
"ai_translate" : "AITranslateController"
},
"AnP_ControllersManager_end" : null,

View File

@ -56,7 +56,12 @@
"Lista de títulos a evaluar: \n{list}"
],
"ai_controller_response_system" : "Usa las siguientes guías para responder y dar soporte.{loras}",
"AnP_AIController_end" : null
"AnP_AIController_end" : null,
"AnP_CloneController_start" : null,
"anp_clone_controller_file_cloned" : "El archivo '{file}' ha sido clonado desde '{from_path}' a '{to_path}'.",
"anp_clone_controller_file_deleted" : "El archivo '{file}' ha sido eliminado de '{to_path}'.",
"AnP_CloneController_end" : null
}
}

View File

@ -338,7 +338,8 @@ export const Common = (function(){
master = (
Check.is_html_item(inputs[0]) ? inputs[0] :
Check.is_string(inputs[0]) ? document.querySelector(inputs[0]) :
null);
null),
items = [];
(master ? inputs.slice(1) : inputs).forEach(subinputs => {
if(Check.is_html_item(subinputs))
@ -371,9 +372,10 @@ export const Common = (function(){
};
});
items.push(...fragment.childNodes);
master && master.appendChild(fragment);
return [...fragment.childNodes];
return items;
};
/**

View File

@ -3,9 +3,9 @@
from typing import Any, Self, Sequence, Optional, Callable
from abc import ABC, abstractmethod
from Interfaces.Application.AnPInterface import AnPInterface
from Models.AIResponseModel import AIResponseModel
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Models.AIResponseModel import AIResponseModel
from AnP.Utils.Checks import Check
class AIInterpretersAbstract(ABC):

View File

@ -2,8 +2,8 @@
# -*- coding: utf-8 -*-
from typing import Self, Any, Optional, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.ModelAbstract import ModelAbstract
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.ModelAbstract import ModelAbstract
class ControllerAbstract(ModelAbstract):

View File

@ -2,8 +2,8 @@
# -*- coding: utf-8 -*-
from typing import Self, Any, Optional, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.ModelAbstract import ModelAbstract
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.ModelAbstract import ModelAbstract
class DispatchAbstract(ModelAbstract):

View File

@ -4,10 +4,10 @@
from typing import Any, Optional, Self, Sequence
from abc import ABC, abstractmethod
from os.path import dirname as directory_name, abspath as absolute_path
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
from Utils.Checks import Check
from Utils.Patterns import RE
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
from AnP.Utils.Patterns import RE
class FilesAbstract(ABC):
@ -92,4 +92,7 @@ class FilesAbstract(ABC):
else:
results.extend(self.load_json(json, only_dictionaries))
return results
return results
@abstractmethod
def list_directory_items(self:Self, path:str) -> list[str]:pass

View File

@ -5,8 +5,8 @@ from abc import ABC, abstractmethod
from typing import Any, Self, Optional, Sequence
from re import Match as REMath
import datetime
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Common import Common
class HTTPServersAbstract(ABC):

View File

@ -3,9 +3,9 @@
from typing import Any, Self, Optional, Sequence
from abc import ABC, abstractmethod
from Interfaces.Application.AnPInterface import AnPInterface
from Application.Event import Event
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Application.Event import Event
from AnP.Utils.Common import Common
class WebSocketServersAbstract(ABC):

View File

@ -6,26 +6,26 @@ import datetime
from re import Match as REMatch
from traceback import extract_tb as extract_traceback, format_stack as trace_format_stack
from time import time as timestamp, sleep
from Abstracts.FilesAbstract import FilesAbstract
from Drivers.FilesDriver import FilesDriver
from Managers.I18NManager import I18NManager
from Managers.SettingsManager import SettingsManager
from Managers.PrintTypesManager import PrintTypesManager
from Managers.TerminalManager import TerminalManager
from Managers.ModelsManager import ModelsManager
from Managers.UniqueKeysManager import UniqueKeysManager
from Managers.QueusManager import QueuesManager
from Managers.SessionsManager import SessionsManager
from Managers.ControllersManager import ControllersManager
from Managers.DispatchesManager import DispatchesManager
from Managers.IndexesManager import IndexesManager
from Managers.RoutesManager import RoutesManager
from Managers.WebSocketServersManager import WebSocketServersManager
from Managers.HTTPServersManager import HTTPServersManager
from Managers.PseudoLoRAsManager import PseudoLoRAsManager
from Managers.AIInterpretersManager import AIInterpretersManager
from Utils.Common import Common
from Utils.Patterns import RE
from AnP.Abstracts.FilesAbstract import FilesAbstract
from AnP.Drivers.FilesDriver import FilesDriver
from AnP.Managers.I18NManager import I18NManager
from AnP.Managers.SettingsManager import SettingsManager
from AnP.Managers.PrintTypesManager import PrintTypesManager
from AnP.Managers.TerminalManager import TerminalManager
from AnP.Managers.ModelsManager import ModelsManager
from AnP.Managers.UniqueKeysManager import UniqueKeysManager
from AnP.Managers.QueusManager import QueuesManager
from AnP.Managers.SessionsManager import SessionsManager
from AnP.Managers.ControllersManager import ControllersManager
from AnP.Managers.DispatchesManager import DispatchesManager
from AnP.Managers.IndexesManager import IndexesManager
from AnP.Managers.RoutesManager import RoutesManager
from AnP.Managers.WebSocketServersManager import WebSocketServersManager
from AnP.Managers.HTTPServersManager import HTTPServersManager
from AnP.Managers.PseudoLoRAsManager import PseudoLoRAsManager
from AnP.Managers.AIInterpretersManager import AIInterpretersManager
from AnP.Utils.Common import Common
from AnP.Utils.Patterns import RE
class AnP:

View File

@ -2,11 +2,11 @@
# -*- coding: utf-8 -*-
from typing import Self, Callable
from Abstracts.ModelAbstract import ModelAbstract
from Abstracts.ControllerAbstract import ControllerAbstract
from Models.RequestModel import RequestModel
from Models.AIResponseModel import AIResponseModel
from Utils.Common import Common
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Abstracts.ControllerAbstract import ControllerAbstract
from AnP.Models.RequestModel import RequestModel
from AnP.Models.AIResponseModel import AIResponseModel
from AnP.Utils.Common import Common
class AIController(ControllerAbstract, ModelAbstract):

View File

@ -0,0 +1,11 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self
from AnP.Abstracts.ControllerAbstract import ControllerAbstract
from AnP.Models.RequestModel import RequestModel
class AITranslateController(ControllerAbstract):
def translate(self:Self, request:RequestModel) -> None:
pass

View File

@ -0,0 +1,83 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self
from threading import Thread
from AnP.Abstracts.ControllerAbstract import ControllerAbstract
from AnP.Models.RequestModel import RequestModel
from AnP.Models.HashModel import HashModel
class CloneController(ControllerAbstract):
def __clone_subdirectory(self:Self, from_path:str, to_path:str, hashes:dict[str, HashModel], ignore:list[str]) -> None:
item:str
current_items:list[str] = self.anp.files.list_directory_items(to_path, True)
if not self.anp.files.exists(to_path):
self.anp.files.make_directory(to_path)
for item in self.anp.files.list_directory_items(from_path, True):
if item in current_items:
current_items.remove(item)
if item in ignore or item in (".", ".."):
continue
from_item_path:str = f"{from_path}/{item}"
to_item_path:str = f"{to_path}/{item}"
if self.anp.files.is_directory(from_item_path):
self.__clone_subdirectory(from_item_path, to_item_path, hashes, ignore)
elif self.anp.files.is_file(from_item_path):
data:bytes = self.anp.files.load(from_item_path, "rb")
hash:HashModel = HashModel(data)
if self.anp.files.exists(to_item_path) and to_item_path not in hashes:
hashes[to_item_path] = HashModel(self.anp.files.load(to_item_path, "rb"))
if to_item_path not in hashes or not hash.compare(hashes[to_item_path]):
self.anp.files.save(to_item_path, data)
hashes[to_item_path] = hash
self.anp.print("info", "anp_clone_controller_file_cloned", {
"from_item_path" : from_item_path,
"to_item_path" : to_item_path,
"from_path" : from_path,
"to_path" : to_path,
"file" : item
})
for item in current_items:
self.anp.files.delete(f"{to_path}/{item}")
self.anp.print("info", "anp_clone_controller_file_deleted", {
"to_item_path" : f"{to_path}/{item}",
"to_path" : to_path,
"file" : item
})
def __clone_process(self:Self, from_path:str, to_path:str, waiter:int|float, ignore:list[str]) -> None:
hashes:dict[str, HashModel] = {}
waiter /= 1000.0
while self.anp.working():
self.__clone_subdirectory(from_path, to_path, hashes, ignore)
self.anp.wait(waiter)
def __clone_directory(self:Self, from_path:str, to_path:str, waiter:int|float, ignore:list[str]) -> None:
Thread(target = self.__clone_process, args = (from_path, to_path, waiter, ignore)).start()
def clone(self:Self, request:RequestModel) -> None: # Not use from Routes.
self.__clone_directory(request.get("from_path", ""), request.get("to_path", ""), request.get("waiter", 5000), request.get("ignore", []))
def execute(self:Self, _) -> None: # Not use from Routes.
from_path:str
to_path:str
waiter:int|float
ignore:list[str]
for (from_path, to_path, waiter, ignore) in self.anp.settings.get("clonations_processes", []):
self.__clone_directory(from_path, to_path, waiter, ignore)

View File

@ -3,10 +3,17 @@
from typing import Self
from os.path import isfile as is_file, isdir as is_directory, exists as path_exists
from os import unlink as delete_path, mkdir as make_directory
from Abstracts.FilesAbstract import FilesAbstract
from Abstracts.ModelAbstract import ModelAbstract
from Utils.Checks import Check
from os import (
unlink as delete_symbolic_link,
remove as delete_file,
# rmdir as remove_directory,
mkdir as make_directory,
listdir as list_directory_items
)
from shutil import rmtree as remove_directory
from AnP.Abstracts.FilesAbstract import FilesAbstract
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Utils.Checks import Check
class FilesDriver(FilesAbstract, ModelAbstract):
@ -87,11 +94,34 @@ class FilesDriver(FilesAbstract, ModelAbstract):
if absolute_path:
try:
delete_path(absolute_path)
if is_file(absolute_path):
delete_file(absolute_path)
elif is_directory(absolute_path):
remove_directory(absolute_path)
else:
delete_symbolic_link(absolute_path)
return True
except Exception as exception:
self.anp.exception(exception, "anp_files_driver_delete_exception", {
"path" : path,
"absolute_path" : absolute_path
})
return False
return False
def list_directory_items(self:Self, path:str, only_names:bool = True) -> list[str]:
items:list[str] = []
absolute_path:str = self.get_absolute_path(path)
if absolute_path is not None and self.is_directory(absolute_path):
try:
if only_names:
items.extend(list_directory_items(absolute_path))
else:
items.extend([f"{absolute_path}{self._slash}{item}" for item in list_directory_items(absolute_path)])
except Exception as exception:
self.anp.exception(exception, "anp_files_driver_list_directory_items_exception", {
"path" : path,
"only_names" : only_names
})
return items

View File

@ -2,13 +2,13 @@
# -*- coding: utf-8 -*-
from typing import Any, Optional, Self, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.ModelAbstract import ModelAbstract
from Models.RequestModel import RequestModel
from threading import Thread
from http.server import BaseHTTPRequestHandler, HTTPServer
from http.cookies import SimpleCookie
from Abstracts.HTTPServersAbstract import HTTPServersAbstract
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Models.RequestModel import RequestModel
from AnP.Abstracts.HTTPServersAbstract import HTTPServersAbstract
class HTTPServerDriver(HTTPServersAbstract, ModelAbstract):

View File

@ -11,12 +11,12 @@ from socket import (
SO_REUSEADDR as SOCKET_REUSE_ADDRESS
)
import datetime
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.HTTPServersAbstract import HTTPServersAbstract
from Models.RequestModel import RequestModel
from Utils.Common import Common
from Utils.Checks import Check
from Utils.Patterns import RE
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.HTTPServersAbstract import HTTPServersAbstract
from AnP.Models.RequestModel import RequestModel
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
from AnP.Utils.Patterns import RE
class HTTPSocketServerDriver(HTTPServersAbstract):

View File

@ -4,12 +4,12 @@
from typing import Any, Optional, Self, Sequence, Callable
from requests import post as Post, Response
# from pydantic import BaseModel
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.AIInterpretersAbstract import AIInterpretersAbstract
from Abstracts.ModelAbstract import ModelAbstract
from Models.AIResponseModel import AIResponseModel
from Utils.Checks import Check
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.AIInterpretersAbstract import AIInterpretersAbstract
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Models.AIResponseModel import AIResponseModel
from AnP.Utils.Checks import Check
from AnP.Utils.Common import Common
class OllamaDriver(AIInterpretersAbstract, ModelAbstract):

View File

@ -4,12 +4,12 @@
from threading import Thread
from typing import Any, Self, Sequence, Optional
from http.cookies import SimpleCookie
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from Abstracts.ModelAbstract import ModelAbstract
from websockets.sync.server import serve as server_serve
from websockets import Server as WebSocketServer, ClientConnection as WebSocketClient
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Checks import Check
from AnP.Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Checks import Check
class WebSocketServerDriver(WebSocketServersAbstract, ModelAbstract):

View File

@ -3,23 +3,23 @@
from typing import Any, Optional, Sequence, Self
from abc import ABC, abstractmethod
from Interfaces.Managers.SettingsManagerInterface import SettingsManagerInterface
from Interfaces.Managers.I18NManagerInterface import I18NManagerInterface
from Interfaces.Managers.PrintTypesManagerInterface import PrintTypesManagerInterface
from Interfaces.Managers.TerminalManagerInterface import TerminalManagerInterface
from Interfaces.Abstracts.FilesAbstractInterface import FilesAbstractInterface
from Interfaces.Managers.ModelsManagerInterface import ModelsManagerInterface
from Interfaces.Managers.UniqueKeysManagerInterface import UniqueKeysManagerInterface
from Interfaces.Managers.QueusManagerInterface import QueusManagerInterface
from Interfaces.Managers.SessionsManagerInterface import SessionsManagerInterface
from Interfaces.Managers.ControllersManagerInterface import ControllersManagerInterface
from Interfaces.Managers.DispatchesManagerInterface import DispatchesManagerInterface
from Interfaces.Managers.IndexesManagerInterface import IndexesManagerInterface
from Interfaces.Managers.RoutesManagerInterface import RoutesManagerInterface
from Interfaces.Managers.WebSocketServersManagerInterface import WebSocketServersManagerInterface
from Interfaces.Managers.HTTPServersManagerInterface import HTTPServersManagerInterface
from Interfaces.Managers.PseudoLoRAsManagerInterface import PseudoLoRAsManagerInterface
from Interfaces.Managers.AIInterpretersManagerInterface import AIInterpretersManagerInterface
from AnP.Interfaces.Managers.SettingsManagerInterface import SettingsManagerInterface
from AnP.Interfaces.Managers.I18NManagerInterface import I18NManagerInterface
from AnP.Interfaces.Managers.PrintTypesManagerInterface import PrintTypesManagerInterface
from AnP.Interfaces.Managers.TerminalManagerInterface import TerminalManagerInterface
from AnP.Interfaces.Abstracts.FilesAbstractInterface import FilesAbstractInterface
from AnP.Interfaces.Managers.ModelsManagerInterface import ModelsManagerInterface
from AnP.Interfaces.Managers.UniqueKeysManagerInterface import UniqueKeysManagerInterface
from AnP.Interfaces.Managers.QueusManagerInterface import QueusManagerInterface
from AnP.Interfaces.Managers.SessionsManagerInterface import SessionsManagerInterface
from AnP.Interfaces.Managers.ControllersManagerInterface import ControllersManagerInterface
from AnP.Interfaces.Managers.DispatchesManagerInterface import DispatchesManagerInterface
from AnP.Interfaces.Managers.IndexesManagerInterface import IndexesManagerInterface
from AnP.Interfaces.Managers.RoutesManagerInterface import RoutesManagerInterface
from AnP.Interfaces.Managers.WebSocketServersManagerInterface import WebSocketServersManagerInterface
from AnP.Interfaces.Managers.HTTPServersManagerInterface import HTTPServersManagerInterface
from AnP.Interfaces.Managers.PseudoLoRAsManagerInterface import PseudoLoRAsManagerInterface
from AnP.Interfaces.Managers.AIInterpretersManagerInterface import AIInterpretersManagerInterface
class AnPInterface(ABC):

View File

@ -3,7 +3,7 @@
from typing import Any, Callable, Self, Optional
from abc import ABC, abstractmethod
from Models.AIResponseModel import AIResponseModel
from AnP.Models.AIResponseModel import AIResponseModel
class AIInterpretersManagerInterface(ABC):

View File

@ -3,7 +3,7 @@
from typing import Any, Self
from abc import ABC, abstractmethod
from Models.RequestModel import RequestModel
from AnP.Models.RequestModel import RequestModel
class ControllersManagerInterface(ABC):

View File

@ -3,7 +3,7 @@
from typing import Self, Sequence, Any
from abc import ABC, abstractmethod
from Interfaces.Abstracts.HTTPServersAbstractInterface import HTTPServersAbstractInterface
from AnP.Interfaces.Abstracts.HTTPServersAbstractInterface import HTTPServersAbstractInterface
class HTTPServersManagerInterface(ABC):

View File

@ -3,7 +3,7 @@
from typing import Self, Any, Callable
from abc import ABC, abstractmethod
from Models.PseudoLoRAModel import PseudoLoRAModel
from AnP.Models.PseudoLoRAModel import PseudoLoRAModel
class PseudoLoRAsManagerInterface(ABC):

View File

@ -3,7 +3,7 @@
from typing import Self, Any
from abc import ABC, abstractmethod
from Models.RequestModel import RequestModel
from AnP.Models.RequestModel import RequestModel
class RoutesManagerInterface(ABC):

View File

@ -3,7 +3,7 @@
from typing import Self, Optional, Any
from abc import ABC, abstractmethod
from Models.SessionModel import SessionModel
from AnP.Models.SessionModel import SessionModel
class SessionsManagerInterface(ABC):

View File

@ -3,8 +3,8 @@
from typing import Any, Self, Optional, Sequence
from abc import ABC, abstractmethod
from Interfaces.Abstracts.WebSocketServersAbstractInterface import WebSocketServersAbstractInterface
from Application.Event import Event
from AnP.Interfaces.Abstracts.WebSocketServersAbstractInterface import WebSocketServersAbstractInterface
from AnP.Application.Event import Event
class WebSocketServersManagerInterface(ABC):

View File

@ -2,10 +2,10 @@
# -*- coding: utf-8 -*-
from typing import Any, Callable, Self, Optional
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.AIInterpretersAbstract import AIInterpretersAbstract
from Models.AIResponseModel import AIResponseModel
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.AIInterpretersAbstract import AIInterpretersAbstract
from AnP.Models.AIResponseModel import AIResponseModel
from AnP.Utils.Common import Common
class AIInterpretersManager:

View File

@ -1,12 +1,11 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any, Self, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.ControllerAbstract import ControllerAbstract
from Models.RequestModel import RequestModel
from Utils.Common import Common
from Utils.Checks import Check
from typing import Any, Self
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.ControllerAbstract import ControllerAbstract
from AnP.Models.RequestModel import RequestModel
from AnP.Utils.Checks import Check
class ControllersManager:

View File

@ -2,10 +2,9 @@
# -*- coding: utf-8 -*-
from typing import Any, Self
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.DispatchAbstract import DispatchAbstract
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.DispatchAbstract import DispatchAbstract
from AnP.Utils.Checks import Check
class DispatchesManager:

View File

@ -2,10 +2,10 @@
# -*- coding: utf-8 -*-
from typing import Self, Sequence, Any
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.HTTPServersAbstract import HTTPServersAbstract
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.HTTPServersAbstract import HTTPServersAbstract
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
class HTTPServersManager:

View File

@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
from typing import Any, Optional, Self, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Checks import Check
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Checks import Check
from AnP.Utils.Common import Common
class I18NManager:

View File

@ -2,8 +2,8 @@
# -*- coding: utf-8 -*-
from typing import Self, Any
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Checks import Check
class IndexesManager:

View File

@ -2,10 +2,10 @@
# -*- coding: utf-8 -*-
from typing import Self, Any, Sequence, TypeVar
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.ModelAbstract import ModelAbstract
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
T = TypeVar("T", bound = ModelAbstract)

View File

@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
from typing import Any, Self, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
class PrintTypesManager:

View File

@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
from typing import Self, Any, Sequence, Callable, Optional
from Interfaces.Application.AnPInterface import AnPInterface
from Models.PseudoLoRAModel import PseudoLoRAModel
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Models.PseudoLoRAModel import PseudoLoRAModel
from AnP.Utils.Checks import Check
class PseudoLoRAsManager:

View File

@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
from typing import Self, Any, Callable, Optional, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Models.QueuesModel import QueuesModel
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Models.QueuesModel import QueuesModel
from AnP.Utils.Common import Common
class QueuesManager:

View File

@ -1,13 +1,12 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
from typing import Self, Any
from Interfaces.Application.AnPInterface import AnPInterface
from Models.RouteModel import RouteModel
from Models.RequestModel import RequestModel
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Models.RouteModel import RouteModel
from AnP.Models.RequestModel import RequestModel
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
class RoutesManager:

View File

@ -4,8 +4,8 @@
from typing import Self, Optional, Any
from threading import Thread
from time import time as timestamp
from Interfaces.Application.AnPInterface import AnPInterface
from Models.SessionModel import SessionModel
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Models.SessionModel import SessionModel
class SessionsManager:

View File

@ -2,9 +2,9 @@
# -*- coding: utf-8 -*-
from typing import Any, Optional, Self, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
class SettingsManager:

View File

@ -1,12 +1,12 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self, Callable, Any, Optional
from typing import Self, Any, Optional
from threading import Thread
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Checks import Check
from Utils.Common import Common
from Models.CommandModel import CommandModel
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Checks import Check
from AnP.Utils.Common import Common
from AnP.Models.CommandModel import CommandModel
class TerminalManager:

View File

@ -1,9 +1,9 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self, Any
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
from typing import Self
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Utils.Common import Common
class UniqueKeysManager:

View File

@ -2,12 +2,12 @@
# -*- coding: utf-8 -*-
from typing import Any, Self, Optional, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from Application.Event import Event
from Models.RequestModel import RequestModel
from Utils.Checks import Check
from Utils.Common import Common
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from AnP.Application.Event import Event
from AnP.Models.RequestModel import RequestModel
from AnP.Utils.Checks import Check
from AnP.Utils.Common import Common
class WebSocketServersManager:

View File

@ -2,8 +2,8 @@
# -*- coding: utf-8 -*-
from typing import Any, Callable, Optional, Self, Sequence
from Utils.Common import Common
from Utils.Checks import Check
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
class CommandModel:

View File

@ -0,0 +1,73 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from hashlib import md5, sha1, sha256, blake2b
from zlib import crc32
from typing import Self, Protocol
from AnP.Utils.Checks import Check
class HashAlgorithm(Protocol):
def update(self:Self, data:bytes) -> None: ...
def hexdigest(self:Self) -> str: ...
class CRC32HashAlgorithm(HashAlgorithm):
def __init__(self:Self) -> None:
self.__value:int = 0
def update(self:Self, data:bytes) -> None:
self.__value = crc32(data, self.__value)
def hexdigest(self:Self) -> str:
return f"{self.__value & 0xFFFFFFFF:08x}"
class HashModel():
def __init__(self:Self, data:bytes = b"", chunk_size:int = 4096) -> None:
self.__chunk_size:int = chunk_size
self.md5:str = ""
self.sha1:str = ""
self.sha256:str = ""
self.blake2b:str = ""
self.crc32:str = ""
self.__hashes:list[HashAlgorithm] = ["md5", "sha1", "sha256", "blake2b", "crc32"]
self.__algorithms:list[HashAlgorithm] = [
method() for method in (md5, sha1, sha256, blake2b, CRC32HashAlgorithm)
]
len(data) and self.update(data)
def __update_chunk(self:Self, chunk:bytes) -> None:
for hash_algorithm in self.__algorithms:
hash_algorithm.update(chunk)
def update(self:Self, data:bytes|str, encode:str = "utf-8") -> None:
done:bool = False
if Check.is_string(data):
data = data.encode(encode)
if Check.is_binary(data):
while data:
chunk:bytes = data[:self.__chunk_size]
data = data[self.__chunk_size:]
self.__update_chunk(chunk)
done = True
if done:
name:str
for name in self.__hashes:
setattr(self, name, getattr(self.__algorithms[self.__hashes.index(name)], "hexdigest")())
return done
def compare(self:Self, other:Self) -> bool:
return all(getattr(self, name) == getattr(other, name) for name in self.__hashes)

View File

@ -2,8 +2,8 @@
# -*- coding: utf-8 -*-
from typing import Self, Any, Sequence, Optional
from Utils.Checks import Check
from Utils.Common import Common
from AnP.Utils.Checks import Check
from AnP.Utils.Common import Common
class PseudoLoRAModel:

View File

@ -3,8 +3,8 @@
from typing import Self, Any, Callable, Sequence, Optional
from threading import Thread, Lock
from Utils.Checks import Check
from Utils.Common import Common
from AnP.Utils.Checks import Check
from AnP.Utils.Common import Common
class QueueItemModel:
def __init__(self:Self, i:int, callback:Callable[[Callable[[], None]], None], *arguments:list[Any|None]) -> None:

View File

@ -3,9 +3,9 @@
from typing import Any, Self, Callable, Sequence, Optional
from json import dumps as json_encode
from Models.SessionModel import SessionModel
from Abstracts.RouteAbstract import RouteAbstract
from Utils.Common import Common
from AnP.Models.SessionModel import SessionModel
from AnP.Abstracts.RouteAbstract import RouteAbstract
from AnP.Utils.Common import Common
class RequestModel:

View File

@ -3,11 +3,11 @@
from typing import Self, Any, Sequence, Callable
from re import Match as REMatch, Pattern as REPattern, compile as re_compile
from Abstracts.RouteAbstract import RouteAbstract
from Utils.Common import Common
from Utils.Checks import Check
from Utils.Patterns import RE
from Models.RequestModel import RequestModel
from AnP.Abstracts.RouteAbstract import RouteAbstract
from AnP.Utils.Common import Common
from AnP.Utils.Checks import Check
from AnP.Utils.Patterns import RE
from AnP.Models.RequestModel import RequestModel
class RouteModel(RouteAbstract):

View File

@ -5,7 +5,7 @@ from typing import Any, Self, Sequence
from re import Pattern as REPattern
from os.path import isfile as is_file
from json import loads as json_decode
from Utils.Patterns import RE
from AnP.Utils.Patterns import RE
class Check:
@ -74,7 +74,7 @@ class Check:
mark:str
for mark in cls.get_keys(marks):
for mark in marks if Check.is_array(marks) else (marks,):
if key.startswith(mark + "_") and (
key.endswith("_start") or
key.endswith("_end")

View File

@ -11,8 +11,8 @@ from inspect import FrameInfo, stack as get_stack
from json import dumps as json_encode, loads as json_decode
from base64 import b64encode as base64_encode, b64decode as base64_decode
from random import choice as random_choice
from Utils.Checks import Check
from Utils.Patterns import RE
from AnP.Utils.Checks import Check
from AnP.Utils.Patterns import RE
ROOT_PATH:str = absolute_path(directory_name(__file__))
SLASH:str = "/" if "/" in ROOT_PATH else "\\\\"

0
Python/AnP/__init__.py Normal file
View File

39
Python/base.py Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any
from AnP.Controllers.AIController import AIController
from AnP.Drivers.WebSocketServerDriver import WebSocketServerDriver
from AnP.Drivers.HTTPSocketServerDriver import HTTPSocketServerDriver
from AnP.Drivers.HTTPServerDriver import HTTPServerDriver
from AnP.Drivers.OllamaDriver import OllamaDriver
from AnP.Drivers.FilesDriver import FilesDriver
from AnP.Controllers.CloneController import CloneController
from AnP.Controllers.AITranslateController import AITranslateController
inputs:dict[str, dict[str, Any|None]] = {
"default_models" : {
"AIController" : AIController,
"CloneController" : CloneController,
"AITranslateController" : AITranslateController,
"WebSocketServerDriver" : WebSocketServerDriver,
"HTTPSocketServerDriver" : HTTPSocketServerDriver,
"HTTPServerDriver" : HTTPServerDriver,
"OllamaDriver" : OllamaDriver,
"FilesDriver" : FilesDriver
}
}
try:
from secrets import secrets as custom_secrets
for key, value in dict(custom_secrets).items():
if key not in inputs or isinstance(inputs[key], dict):
inputs[key] = value
elif isinstance(value, dict):
for subkey, subvalue in value.items():
inputs[key][subkey] = subvalue
except ImportError:
pass

View File

@ -1,312 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from abc import ABC, abstractmethod
from typing import Any, Callable, Self, Sequence, Optional, ClassVar
from re import Pattern as REPattern
from threading import Thread
class RE:
KEY:ClassVar[REPattern]
STRING_VARIABLES:ClassVar[REPattern]
SLASHES:ClassVar[REPattern]
NEW_LINES:ClassVar[REPattern]
ROUTE:ClassVar[REPattern]
TO_REGULAR_EXPRESSION:ClassVar[REPattern]
ROUTE_KEY:ClassVar[REPattern]
EXCEPTION:ClassVar[REPattern]
NEW_LINE:ClassVar[REPattern]
HTTP_VARIABLE:ClassVar[REPattern]
PARENT_PATH:ClassVar[REPattern]
DOUBLE_NEW_LINE:ClassVar[REPattern]
HTTP_HEADER_PARAMETER:ClassVar[REPattern]
HTTP_REQUEST:ClassVar[REPattern]
class Check(ABC):
@staticmethod
@abstractmethod
def is_string(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_binary(item:Any|None) -> bool:pass
@classmethod
@abstractmethod
def is_key(cls:type[Self], item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_array(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_dictionary(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_boolean(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_integer(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_function(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_regular_expression(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_json_string(item:Any|None, full:bool = False) -> bool:pass
@staticmethod
@abstractmethod
def is_json(item:Any|None) -> bool:pass
@staticmethod
@abstractmethod
def is_json_data(item:Any|None, full:bool = False) -> bool:pass
@classmethod
@abstractmethod
def is_mark_key(cls:type[Self], key:str, marks:str|Sequence[str] = "AnP") -> bool:pass
@staticmethod
@abstractmethod
def is_file(path:str) -> bool:pass
class Common(ABC):
ROOT_PATH:ClassVar[str]
SLASH:ClassVar[str]
ROOTS_PATH:ClassVar[list[str]]
SPECIAL_REGULAR_EXPRESSION_CHARACTERS:ClassVar[dict[str, str]]
@classmethod
@abstractmethod
def get_keys(cls:type[Self], *items:list[Any|None]) -> list[str]:pass
@classmethod
@abstractmethod
def get_texts(cls:type[Self], *items:list[Any|None]) -> list[str]:pass
@classmethod
@abstractmethod
def get_dictionaries(cls:type[Self], *items:list[Any|None]) -> list[dict[str, Any|None]]:pass
@classmethod
@abstractmethod
def get_dictionary(cls:type[Self], inputs:Any|None, overwrite:bool = False) -> dict[str, Any|None]:pass
@classmethod
@abstractmethod
def get_value(cls:type[Self],
keys:str|Sequence[str],
inputs:dict[str, Any|None]|Sequence[Any|None],
default:Optional[Any|None] = None
) -> Any|None:pass
@classmethod
@abstractmethod
def string_variables(cls:type[Self],
string:str,
inputs:dict[str, Any|None]|Sequence[Any|None],
default:Optional[str] = None
) -> str:pass
@classmethod
@abstractmethod
def fix_path(cls:type[Self], path:str) -> str:pass
@classmethod
@abstractmethod
def get_absolute_path(cls:type[Self], path:str) -> str|None:pass
@classmethod
@abstractmethod
def load_file(cls:type[Self], path:str, mode:str = "r") -> str|bytes|None:pass
@classmethod
@abstractmethod
def load_json(cls:type[Self],
data:str|dict[str, Any|None]|Sequence[Any|None],
only_dictionaries:bool = True
) -> list[dict[str, Any|None]|Sequence[Any|None]]:pass
@staticmethod
@abstractmethod
def get_action_data(i:int = 0) -> dict[str, str|int]:pass
@classmethod
@abstractmethod
def to_regular_expression(cls:type[Self], string:str) -> str:pass
@staticmethod
@abstractmethod
def get_mime_from_path(path:str) -> str|None:pass
@staticmethod
@abstractmethod
def json_encode(data:dict[str, Any|None]|Sequence[Any|None]) -> str|None:pass
@staticmethod
@abstractmethod
def json_decode(data:str|bytes) -> dict[str, Any|None]|Sequence[Any|None]|None:pass
@staticmethod
@abstractmethod
def base64_encode(data:bytes) -> str|None:pass
@staticmethod
@abstractmethod
def base64_decode(data:str) -> bytes|None:pass
@classmethod
@abstractmethod
def data_encode(cls:type[Self], data:Any|None) -> str|None:pass
@classmethod
@abstractmethod
def data_decode(cls:type[Self], data:str) -> Any|None:pass
@staticmethod
@abstractmethod
def execute(callback:Callable[..., Any|None], *arguments:Any|None) -> Any|None:pass
@staticmethod
@abstractmethod
def unique(items:str|Sequence[Any|None]) -> str|list[Any|None]:pass
@staticmethod
@abstractmethod
def random(items:str|Sequence[Any|None]) -> Any|None:pass
class AIResponseModel(ABC):
def __init__(self:Self, conversation:str) -> None:
self.conversation:str
self.start:float
self.model:str
self.response:str
self.total:str
self.context:str|list[str]
self.done:bool
self.end:float|None
self.chunks:int
self.ok:bool
self.http_code:int
self.http_message:str
@abstractmethod
def update(self:Self, data:dict[str, Any|None]) -> None:pass
class CommandModel(ABC):
def __init__(self:Self,
names:str|Sequence[str],
callback:Callable[[dict[str, Any|None], Optional[list[Any|None]]], None]
) -> None:
self.names:list[str]
self.callback:Callable[[dict[str, Any|None], Optional[list[Any|None]]], None]
@abstractmethod
def update(self:Self,
names:str|Sequence[str],
callback:Optional[Callable[[dict[str, Any|None], Optional[list[Any|None]]], None]] = None,
overwrite:bool = False
) -> None:pass
class PseudoLoRAModel(ABC):
def __init__(self:Self,
title:str,
content:str|Sequence[Any|None],
keys:Optional[str|Sequence[str]] = None,
cacheable:bool = False
) -> None:
self.title:str
self.path:str|None
self.memory:int
self.cache:str
self.i:int
self.keys:list[str]
self.cacheable:bool
self.nested:list[PseudoLoRAModel]
@abstractmethod
def clean_cache(self:Self) -> None:pass
class QueueItemModel(ABC):
def __init__(self:Self, i:int, callback:Callable[[Callable[[], None]], None], *arguments:list[Any|None]) -> None:
self.i:int
self.callback:Callable[[Callable[[], None]], None]
self.arguments:list[Any|None]
self.executing:bool
self.thread:Thread|None
class QueuesModel(ABC):
def __init__(self:Self, key:str, inputs:Optional[int|dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
self.key:str
self.items:dict[int, QueueItemModel]
self.i:int
self.p:int
self.maximum:int
self.current:int
@abstractmethod
def add(self:Self, callback:Callable[[Callable[[], None]], None], *arguments:list[Any|None]) -> int|None:pass
@abstractmethod
def cancel(self:Self, i:int) -> bool:pass
@abstractmethod
def cancel_all(self:Self) -> None:pass
@abstractmethod
def next(self:Self) -> None:pass
class RequestModel(ABC):
def __init__(self:Self, session:Optional[SessionModel] = None) -> None:
self.post_variables:dict[str, Any|None]
self.get_variables:dict[str, Any|None]
self.url_variables:dict[str, Any|None]
self.hash_variables:dict[str, Any|None]
self.cookies:dict[str, Any|None]
self.variables:dict[str, Any|None]
self.request_headers:dict[str, Any|None]
self.method:str|None
self.route:RouteAbstract|None
self.response:str|bytes|None
self.response_mime:str|None
self.response_charset:str|None
self.response_code:int
self.response_headers:dict[str, Any|None]
self.callback:Callable[[RequestModel, str|bytes|None], None]|None
self.data:Any|None
self.session:SessionModel|None
self.protocol:str|None
self.protocol_version:str|None
self.last_modified:str|None
@abstractmethod
def get(self:Self, key:str|Sequence[str], default:Optional[Any] = None) -> Any|None:pass
@abstractmethod
def set_variables(self:Self, inputs:dict[str, Any|None], on:Optional[str] = None) -> None:pass
@abstractmethod
def set_response(self:Self, data:Any|None) -> None:pass
@abstractmethod
def set_request_headers(self:Self, inputs:Any|None) -> None:pass
@abstractmethod
def set_response_headers(self:Self, inputs:Any|None) -> None:pass

View File

@ -1,38 +1,9 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any
from Application.AnP import AnP
from Controllers.AIController import AIController
from Drivers.WebSocketServerDriver import WebSocketServerDriver
from Drivers.HTTPSocketServerDriver import HTTPSocketServerDriver
from Drivers.HTTPServerDriver import HTTPServerDriver
from Drivers.OllamaDriver import OllamaDriver
from Drivers.FilesDriver import FilesDriver
from AnP.Application.AnP import AnP
from base import inputs
inputs:dict[str, dict[str, Any|None]] = {
"default_models" : {
"AIController" : AIController,
"WebSocketServerDriver" : WebSocketServerDriver,
"HTTPSocketServerDriver" : HTTPSocketServerDriver,
"HTTPServerDriver" : HTTPServerDriver,
"OllamaDriver" : OllamaDriver,
"FilesDriver" : FilesDriver
}
}
anp:AnP = AnP(inputs)
try:
from secrets import secrets as custom_secrets
for key, value in dict(custom_secrets).items():
if key not in inputs or isinstance(inputs[key], dict):
inputs[key] = value
elif isinstance(value, dict):
for subkey, subvalue in value.items():
inputs[key][subkey] = subvalue
except ImportError:
pass
anp:AnP = AnP(inputs)
anp.controllers.execute("clonations_processes", "execute", None)