new file: main.py
new file: packages/builtin.py new file: packages/nano.py new file: packages/netget.py new file: packages/pakk.conf
This commit is contained in:
commit
cb54be6887
238
main.py
Normal file
238
main.py
Normal file
@ -0,0 +1,238 @@
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import importlib
|
||||
from inspect import isfunction
|
||||
import random
|
||||
import time
|
||||
import ast
|
||||
import readline
|
||||
import threading
|
||||
|
||||
|
||||
|
||||
|
||||
class color:
|
||||
green = "\033[1;32m"
|
||||
blue = "\033[1;34m"
|
||||
white = "\033[0m"
|
||||
green = "\033[1;32m"
|
||||
red = "\033[1;31m"
|
||||
white = "\033[0m"
|
||||
blue = "\033[1;34m"
|
||||
orange = "\033[1;33m"
|
||||
|
||||
|
||||
def clear():
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
|
||||
|
||||
|
||||
def call(full_module_name, func_name, *args, **kwargs):
|
||||
module = importlib.import_module(full_module_name)
|
||||
|
||||
|
||||
if func_name in dir(module):
|
||||
for attribute_name in dir(module):
|
||||
attribute = getattr(module, attribute_name)
|
||||
if isfunction(attribute) and attribute_name == func_name:
|
||||
attribute(*args, **kwargs)
|
||||
else:
|
||||
raise Exception("Command Not Found")
|
||||
|
||||
|
||||
|
||||
|
||||
def getPrompt():
|
||||
path = "USERNAME" if os.name == "nt" else "USER"
|
||||
username = os.environ.get(path)
|
||||
if username is None:
|
||||
username = ""
|
||||
path = os.getcwd()
|
||||
|
||||
# Set up tab completion for file and directory names
|
||||
completer = readline.get_completer()
|
||||
readline.set_completer_delims(' \t\n')
|
||||
readline.parse_and_bind("tab: complete")
|
||||
|
||||
prompt = color.white + "┌ " + color.green + username + color.white + ":" + color.blue + path + color.white + "\n└ $ "
|
||||
return prompt
|
||||
|
||||
|
||||
|
||||
|
||||
def getInput():
|
||||
print(getPrompt(), end="")
|
||||
return input()
|
||||
|
||||
def getIndex( packages:list, package: str) -> str:
|
||||
for key in packages:
|
||||
if packages[key] == package:
|
||||
return key
|
||||
|
||||
|
||||
|
||||
def toList(List: str) -> list:
|
||||
|
||||
newList = ast.literal_eval(List)
|
||||
if isinstance(newList, list):
|
||||
return newList
|
||||
|
||||
class packages:
|
||||
def __init__(self):
|
||||
try:
|
||||
with open(("./packages/pakk.conf"), "r") as f:
|
||||
self.packages = toList(f.readline())
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.packages = [["builtin", "packages.builtin", ["echo", "ls", "rm", "clear", "cd", "ll"]]]
|
||||
self.update(self.packages)
|
||||
|
||||
|
||||
def update(self, packages):
|
||||
with open(("./packages/pakk.conf"), "w") as f:
|
||||
f.write(str(packages))
|
||||
|
||||
|
||||
|
||||
|
||||
Packages = packages()
|
||||
|
||||
class packagemanager:
|
||||
def __init__(self, args):
|
||||
|
||||
if len(args) <= 1:
|
||||
print("Options:\ninstall <package name> | installs package \nlist | lists installed packages\nremove <package name> | uninstall packages\navailable | lists available commands")
|
||||
|
||||
elif args[1] == "install":
|
||||
self.install(args[2])
|
||||
elif args[1] == "list":
|
||||
self.list()
|
||||
elif args[1] == "remove":
|
||||
self.uninstall(args[2])
|
||||
elif args[1] == "available":
|
||||
self.commands("./packages")
|
||||
else:
|
||||
print("Options:\ninstall <package name> | installs package \nlist | lists installed packages\nremove <package name> | uninstall packages\navailable | lists available commands")
|
||||
|
||||
return
|
||||
|
||||
|
||||
def commands(self, directory):
|
||||
with os.scandir(directory) as entries:
|
||||
for entry in entries:
|
||||
if entry.name.endswith(".py"):
|
||||
package_name = entry.name[:-3] # Remove the ".py" extension
|
||||
if package_name not in [row[0] for row in Packages.packages]:
|
||||
print(f"Package '{package_name}' is not installed.")
|
||||
|
||||
|
||||
def install(self, name: str) -> int:
|
||||
try:
|
||||
print("Checking for package source.")
|
||||
with open(("./packages/"+name+".py"), "r") as f:
|
||||
f.close()
|
||||
except FileNotFoundError:
|
||||
raise Exception("Package could not be found, make sure package source is in [ packages ] folder.")
|
||||
|
||||
try:
|
||||
|
||||
if name in [row[0] for row in Packages.packages]:
|
||||
raise Exception("Package already installed")
|
||||
|
||||
with open(("./packages/"+name+".py"), "r") as f:
|
||||
line = f.readline()
|
||||
|
||||
line = line.strip("#")
|
||||
|
||||
# ... (existing code)
|
||||
|
||||
print("Installing Package")
|
||||
|
||||
|
||||
|
||||
|
||||
Packages.packages.append(toList(line))
|
||||
Packages.update(Packages.packages)
|
||||
print(f"\n{color.green}Success:{color.white} Successfully installed {name}.")
|
||||
|
||||
except Exception as e:
|
||||
raise Exception(e)
|
||||
|
||||
|
||||
|
||||
|
||||
def list(self):
|
||||
print("Installed Packages: \n"+ "\n".join([row[0] for row in Packages.packages]))
|
||||
|
||||
def uninstall(self, name:str):
|
||||
#print(Packages.packages)
|
||||
print(f"Uninstalling {name}")
|
||||
for package in Packages.packages:
|
||||
if name in package[0]:
|
||||
Packages.packages.remove(package)
|
||||
Packages.update(Packages.packages)
|
||||
print(f"{color.green}Sucess:{color.white} Uninstalled {name}.")
|
||||
|
||||
|
||||
|
||||
#print(Packages.packages)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def handleCommands(command: list) -> list:
|
||||
|
||||
try:
|
||||
if command[0] == "help":
|
||||
print("Type pakk for more help installing packages" )
|
||||
return [0,None]
|
||||
if command[0] == "pakk":
|
||||
try:
|
||||
PackageManager = packagemanager(command)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
|
||||
return [0,None]
|
||||
|
||||
|
||||
|
||||
except Exception as e:
|
||||
raise Exception(e)
|
||||
|
||||
try:
|
||||
ran = False
|
||||
for package in Packages.packages:
|
||||
if command[0] in package[2]:
|
||||
call(package[1], command[0], command[1:])
|
||||
ran = True
|
||||
return [0,None]
|
||||
return [1, 'Command not Found']
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return [1, "A Faital error has acured while running commmand"]
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
while True:
|
||||
command = getInput()
|
||||
|
||||
if command == "":
|
||||
pass
|
||||
else:
|
||||
command = command.split(" ")
|
||||
error = handleCommands(command)
|
||||
if error[0]==1:
|
||||
|
||||
print(f"{color.red}ERROR{color.white}:{color.red} {error[1]}{color.white}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
BIN
packages/__pycache__/builtin.cpython-310.pyc
Normal file
BIN
packages/__pycache__/builtin.cpython-310.pyc
Normal file
Binary file not shown.
BIN
packages/__pycache__/builtin.cpython-311.pyc
Normal file
BIN
packages/__pycache__/builtin.cpython-311.pyc
Normal file
Binary file not shown.
BIN
packages/__pycache__/echo.cpython-311.pyc
Normal file
BIN
packages/__pycache__/echo.cpython-311.pyc
Normal file
Binary file not shown.
BIN
packages/__pycache__/nano.cpython-310.pyc
Normal file
BIN
packages/__pycache__/nano.cpython-310.pyc
Normal file
Binary file not shown.
BIN
packages/__pycache__/netget.cpython-310.pyc
Normal file
BIN
packages/__pycache__/netget.cpython-310.pyc
Normal file
Binary file not shown.
BIN
packages/__pycache__/netget.cpython-311.pyc
Normal file
BIN
packages/__pycache__/netget.cpython-311.pyc
Normal file
Binary file not shown.
BIN
packages/__pycache__/python.cpython-310.pyc
Normal file
BIN
packages/__pycache__/python.cpython-310.pyc
Normal file
Binary file not shown.
128
packages/builtin.py
Normal file
128
packages/builtin.py
Normal file
@ -0,0 +1,128 @@
|
||||
#["builtin", "packages.builtin", ["echo", "ls", "rm", "clear", "cd", "ll"]]
|
||||
import os
|
||||
import stat
|
||||
import pwd
|
||||
import grp
|
||||
import time
|
||||
|
||||
|
||||
|
||||
|
||||
def echo(message: list) -> int:
|
||||
try:
|
||||
print(" ".join(message))
|
||||
except:
|
||||
return
|
||||
|
||||
def ls(args):
|
||||
del args
|
||||
|
||||
|
||||
pass
|
||||
|
||||
def rm(files: list):
|
||||
for file in files:
|
||||
os.remove(file)
|
||||
|
||||
def clear(args):
|
||||
del args
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
|
||||
|
||||
|
||||
def cd(args):
|
||||
if len(args) == 0 or args[0] == "~":
|
||||
new_path = os.path.expanduser("~") # Get the home directory path
|
||||
elif len(args) == 1:
|
||||
new_path = os.path.abspath(args[0]) # Get the absolute path
|
||||
else:
|
||||
print("Usage: cd <path> or cd ~")
|
||||
return
|
||||
|
||||
try:
|
||||
os.chdir(new_path) # Change the current working directory
|
||||
except FileNotFoundError:
|
||||
print("Directory not found.")
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
|
||||
|
||||
|
||||
def ls(args):
|
||||
del args # You can remove this line if you're not using args
|
||||
|
||||
blue_color = '\033[34m'
|
||||
green_color = '\033[32m'
|
||||
white_color = '\033[37m'
|
||||
reset_color = '\033[0m'
|
||||
|
||||
dir_path = os.getcwd()
|
||||
try:
|
||||
with os.scandir(dir_path) as entries:
|
||||
for entry in entries:
|
||||
if not entry.name.startswith('.'):
|
||||
file_path = os.path.join(dir_path, entry.name)
|
||||
file_stat = os.stat(file_path)
|
||||
if stat.S_ISDIR(file_stat.st_mode):
|
||||
print(blue_color + entry.name + '/' + reset_color, end=' ')
|
||||
elif file_stat.st_mode & stat.S_IXUSR:
|
||||
print(green_color + entry.name + '*' + reset_color, end=' ')
|
||||
else:
|
||||
print(white_color + entry.name + reset_color, end=' ')
|
||||
print() # Newline after listing
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
|
||||
|
||||
def ll(args):
|
||||
del args
|
||||
dir_path = os.getcwd()
|
||||
|
||||
green_color = '\033[32m'
|
||||
blue_color = '\033[34m'
|
||||
whiteColor = '\033[37m'
|
||||
orange_color = '\033[33m'
|
||||
reset_color = '\033[0m'
|
||||
|
||||
try:
|
||||
with os.scandir(dir_path) as entries:
|
||||
for entry in entries:
|
||||
file_stat = entry.stat()
|
||||
file_name = entry.name
|
||||
|
||||
pw = pwd.getpwuid(file_stat.st_uid)
|
||||
gr = grp.getgrgid(file_stat.st_gid)
|
||||
|
||||
is_hidden = (file_name and file_name[0] == '.')
|
||||
|
||||
time_str = time.ctime(file_stat.st_mtime)
|
||||
if time_str.endswith('\n'):
|
||||
time_str = time_str[:-1] # Remove newline character
|
||||
|
||||
permission_str = (
|
||||
(green_color + "r" if file_stat.st_mode & stat.S_IRUSR else whiteColor + "-") +
|
||||
(blue_color + "w" if file_stat.st_mode & stat.S_IWUSR else whiteColor + "-") +
|
||||
((orange_color if is_hidden else green_color) + "x" if file_stat.st_mode & stat.S_IXUSR else whiteColor + "-") +
|
||||
(green_color + "r" if file_stat.st_mode & stat.S_IRGRP else whiteColor + "-") +
|
||||
(blue_color + "w" if file_stat.st_mode & stat.S_IWGRP else whiteColor + "-") +
|
||||
((orange_color if is_hidden else green_color) + "x" if file_stat.st_mode & stat.S_IXGRP else whiteColor + "-") +
|
||||
(green_color + "r" if file_stat.st_mode & stat.S_IROTH else whiteColor + "-") +
|
||||
(blue_color + "w" if file_stat.st_mode & stat.S_IWOTH else whiteColor + "-") +
|
||||
((orange_color if is_hidden else green_color) + "x" if file_stat.st_mode & stat.S_IXOTH else whiteColor + "-")
|
||||
)
|
||||
|
||||
print(
|
||||
"{:<11}{:>4} {:<8} {:<8} {:>8} {} {}{}".format(
|
||||
permission_str,
|
||||
file_stat.st_nlink,
|
||||
pw.pw_name,
|
||||
gr.gr_name,
|
||||
file_stat.st_size,
|
||||
time_str,
|
||||
(blue_color if entry.is_dir() else (orange_color if is_hidden else green_color) if file_stat.st_mode & stat.S_IXUSR else whiteColor),
|
||||
file_name,
|
||||
reset_color
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
71
packages/nano.py
Normal file
71
packages/nano.py
Normal file
@ -0,0 +1,71 @@
|
||||
#["nano", "packages.nano", ["nano"]]
|
||||
|
||||
import os
|
||||
|
||||
class TextEditor:
|
||||
def __init__(self):
|
||||
self.lines = []
|
||||
self.file = ""
|
||||
|
||||
def load_file(self, filename):
|
||||
try:
|
||||
with open(filename, "r") as file:
|
||||
self.lines = file.readlines()
|
||||
except FileNotFoundError:
|
||||
print(f"File '{filename}' not found.")
|
||||
|
||||
def save_file(self, filename):
|
||||
if filename == "":
|
||||
filename = self.file
|
||||
with open(filename, "w") as file:
|
||||
file.writelines(self.lines)
|
||||
|
||||
def edit(self):
|
||||
while True:
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
self.display()
|
||||
|
||||
action = input("\nCommands: [e]dit, [n]ewline, [s]ave, [q]uit: ").lower()
|
||||
|
||||
if action == "e":
|
||||
self.edit_lines()
|
||||
elif action == "n":
|
||||
self.newline()
|
||||
elif action == "s":
|
||||
filename = input("Enter filename to save: ")
|
||||
self.save_file(filename)
|
||||
print(f"File '{filename}' saved.")
|
||||
elif action == "q":
|
||||
print("Exiting the text editor.")
|
||||
break
|
||||
else:
|
||||
print("Invalid command.")
|
||||
|
||||
def display(self):
|
||||
print("Editing: "+self.file)
|
||||
for i, line in enumerate(self.lines):
|
||||
print(f"{i + 1}: {line}", end="")
|
||||
|
||||
def newline(self):
|
||||
self.lines.append("\n")
|
||||
|
||||
def edit_lines(self):
|
||||
line_number = int(input("Enter line number to edit: ")) - 1
|
||||
if 0 <= line_number < len(self.lines):
|
||||
new_line = input("Enter new text: ")
|
||||
self.lines[line_number] = new_line + "\n"
|
||||
else:
|
||||
print("Invalid line number.")
|
||||
|
||||
|
||||
def nano(args):
|
||||
if len(args) != 1:
|
||||
print("Usage: nano <filename>")
|
||||
else:
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
filename = args[0]
|
||||
|
||||
editor = TextEditor()
|
||||
editor.file = filename
|
||||
editor.load_file(filename)
|
||||
editor.edit()
|
23
packages/netget.py
Normal file
23
packages/netget.py
Normal file
@ -0,0 +1,23 @@
|
||||
#["netget", "packages.netget", ["netget"]]
|
||||
# Made By OusmeBlueNinja
|
||||
import os, sys
|
||||
|
||||
|
||||
def netget(command: list):
|
||||
|
||||
print(command, len(command))
|
||||
if len(command) != 2:
|
||||
print("comand requires [ url ] [ path ]")
|
||||
|
||||
url = command[0]
|
||||
location = command[1]
|
||||
try:
|
||||
import wget
|
||||
wget.download(url, location)
|
||||
except ImportError:
|
||||
os.system(f"wget {url} -O {location}")
|
||||
|
||||
except:
|
||||
print("cannot download")
|
||||
|
||||
|
1
packages/pakk.conf
Normal file
1
packages/pakk.conf
Normal file
@ -0,0 +1 @@
|
||||
[['builtin', 'packages.builtin', ['echo', 'ls', 'rm', 'clear', 'cd', 'll']], ['nano', 'packages.nano', ['nano']]]
|
Loading…
Reference in New Issue
Block a user