do automate things on Linux
Project description
auto_everything
Linux automation
Help Wanted
I lost my job for almost a year. If you wish to see me alive, please buy me some food:
Installation (For Python >= 3.10)
curl -sSL https://install.python-poetry.org | python3
poetry add "git+https://github.com/yingshaoxo/auto_everything.git@dev"
or
sudo pip3 install "git+https://github.com/yingshaoxo/auto_everything.git@dev"
Full Installation:
poetry add auto_everything --extras all
Installation (For 3.5 <= Python < 3.10)
poetry add auto_everything==3.9
or
sudo pip3 install auto_everything==3.9
Magic
python3 -m auto_everything
or
curl -sSL https://github.com/yingshaoxo/auto_everything/raw/master/env_setup.sh | bash
wget -O - https://github.com/yingshaoxo/auto_everything/raw/master/example/install_YouCompleteMe.py | python3
Docs
https://yingshaoxo.github.io/auto_everything
Basic API
Import
from auto_everything.terminal import Terminal
t = Terminal()
Run a command and get reply
reply = t.run_command('uname -a')
print(reply)
Run commands and get direct screen output
commands = """
sudo apt update
uname -a
"""
t.run(commands)
Run a program
t.run_program('firefox')
Run a python script
t.run_py('your_file.py')
Run a bash script
t.run_sh('your_file.sh')
Detect if a program or script is running
status = t.is_running('terminal')
print(status)
Kill it
t.kill('terminal')
For simplifying python development
Import
from auto_everything.python import Python
py = Python()
Turn Python Class
into a Command Line Program
py.fire(your_class_name)
Make it global executable
:
py.make_it_global_runnable(executable_name="Tools")
Example
Let's assume you have a file named Tools.py
:
from auto_everything.base import Python
py = Python()
class Tools():
def push(self, comment):
t.run('git add .')
t.run('git commit -m "{}"'.format(comment))
t.run('git push origin')
def pull(self):
t.run("""
git fetch --all
git reset --hard origin/master
""")
def undo(self):
t.run("""
git reset --mixed HEAD~1
""")
def reset(self):
t.run("""
git reset --hard HEAD^
""")
def hi(self):
print("Hi, Python!")
py.fire(Tools)
py.make_it_global_runnable(executable_name="MyTools")
After the first running of this script by python3 Tools.py hi
, you would be able to use MyTools
to run this script at anywhere within your machine:
yingshaoxo@pop-os:~$ MyTools hi
Hi, Python!
For simplifying general server and client
development
Define YRPC Protocols
service Greeter {
rpc say_hello (hello_request) returns (HelloReply);
}
enum UserStatus {
OFFLINE = 0;
ONLINE = 1;
}
message hello_request {
string name = 1;
UserStatus user_status = 2;
repeated UserStatus user_status_list = 3;
}
message HelloReply {
string message = 1;
}
Generate Python, Flutter, Typescript
code
from auto_everything.develop import YRPC
yrpc = YRPC()
for language in ["python", "dart", "typescript"]:
yrpc.generate_code(
which_language=language,
input_folder="/home/yingshaoxo/CS/protocol_test/protocols",
input_files=["english.proto"],
output_folder="/Users/yingshaoxo/CS/protocol_test/generated_yrpc"
)
Here, we only use python to do the server part job.
Then, you can use it like this:
from generated_yrpc.english_rpc import *
class NewService(Service_english):
async def say_hello(self, item: hello_request) -> HelloReply:
reply = HelloReply()
reply.message = item.name
return reply
service_instance = NewService()
run(service_instance, port="6060")
void main() async {
var client = Client_english(
service_url: "http://127.0.0.1:6060",
error_handle_function: (error_message) {
print(error_message);
},
);
var result = await client.say_hello(
item: hello_request(name: "yingshaoxo")
);
if (result != null) {
print(result);
}
}
Others
Simpler IO
from auto_everything.base import IO
io = IO()
io.write("hi.txt", "Hello, world!")
print(io.read("hi.txt"))
io.append("hi.txt", "\n\nI'm yingshaoxo.")
print(io.read("hi.txt"))
Quick File Operation
from auto_everything.disk import Disk
from pprint import pprint
disk = Disk()
files = disk.get_files(folder=".", type_limiter=[".mp4"])
files = disk.sort_files_by_time(files)
pprint(files)
Easy Store
from auto_everything.disk import Store
store = Store("test")
store.set("author", "yingshaoxo")
store.delete("author")
store.set("author", {"email": "yingshaoxo@gmail.com", "name": "yingshaoxo"})
print(store.get_items())
print(store.has_key("author"))
print(store.get("author", default_value=""))
print(store.get("whatever", default_value="alsjdasdfasdfsakfla"))
store.reset()
print(store.get_items())
Encryption and Decryption
encryption_and_decryption = EncryptionAndDecryption()
a_dict = encryption_and_decryption.get_secret_alphabet_dict("hello, world")
a_sentence = "I'm yingshaoxo."
encrypted_sentence = encryption_and_decryption.encode_message(a_secret_dict=a_dict, message=a_sentence)
print()
print(encrypted_sentence)
> B'i ybjdqahkxk.
decrypted_sentence = encryption_and_decryption.decode_message(a_secret_dict=a_dict, message=encrypted_sentence)
print(decrypted_sentence)
> I'm yingshaoxo.
JWT Tool (Json-Web-Token Tool)
jwt_tool = JWT_Tool()
secret = "I'm going to tell you a secret: yingshaoxo is the best."
a_jwt_string = jwt_tool.my_jwt_encode(data={"name": "yingshaoxo"}, a_secret_string_for_integrity_verifying=secret)
print(a_jwt_string)
> eyJhbGciOiAiTUQ1IiwgInR5cCI6ICJKV1QifQ==.eyJuYW1lIjogInlpbmdzaGFveG8ifQ==.583085987ba46636662dc71ca6227c0a
original_dict = jwt_tool.my_jwt_decode(jwt_string=a_jwt_string, a_secret_string_for_integrity_verifying=secret)
print(original_dict)
> {'name': 'yingshaoxo'}
fake_jwt_string = "aaaaaa.bbbbbb.abcdefg"
original_dict = jwt_tool.my_jwt_decode(jwt_string=fake_jwt_string, a_secret_string_for_integrity_verifying=secret)
print(original_dict)
> None
Web automation
from auto_everything.web import Selenium
my_selenium = Selenium("https://www.google.com", headless=False)
d = my_selenium.driver
# get input box
xpath = '//*[@id="lst-ib"]'
elements = my_selenium.wait_until_elements_exists(xpath)
if len(elements) == 0:
exit()
# text inputing
elements[0].send_keys('\b' * 20, "yingshaoxo")
# click search button
elements = my_selenium.wait_until_elements_exists('//input[@value="Google Search"]')
if len(elements):
elements[0].click()
# exit
my_selenium.sleep(30)
d.quit()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
auto_everything-3.21.tar.gz
(86.2 kB
view hashes)
Built Distribution
Close
Hashes for auto_everything-3.21-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca6b200ea0a80f866ee58d37ea08346257c6934f2e6ca7c21879b51336eea678 |
|
MD5 | 6a0cebb53cf8a913f8cbcaa7c43dba96 |
|
BLAKE2b-256 | 915331640a7c4984813b1c0d915812143d628f081506e567e40cd74127410a3e |