Skip to content

Commit

Permalink
chore: clean code
Browse files Browse the repository at this point in the history
  • Loading branch information
png261 committed Jun 18, 2023
1 parent 7ec942b commit 33e4886
Show file tree
Hide file tree
Showing 9 changed files with 122 additions and 113 deletions.
6 changes: 2 additions & 4 deletions pywalc/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
from . import server
from . import colors
from . import theme
from . import system
from . import wallpaper
from . import theme
from . import server

__all__ = [
"server",
"colors",
"system",
"theme",
"wallpaper",
"server",
]
7 changes: 4 additions & 3 deletions pywalc/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ def main():
util.create_dir(WALLPAPER_DIR)
util.copy_dir(WAL_FILE, BACKUP_FILE)

current_wallpaper = util.read_file(os.path.join(PYWALL_CACHE, 'wal'))[0]
util.copy_dir(current_wallpaper, os.path.join(WALLPAPER_DIR,'current'))
current_wallpaper = util.read_file(os.path.join(PYWALL_CACHE, "wal"))[0]
util.copy_dir(current_wallpaper, os.path.join(WALLPAPER_DIR, "current"))

server = Server()
server = Server(2601)
server.run()


if __name__ == "__main__":
main()
14 changes: 11 additions & 3 deletions pywalc/colors.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import pywal
from .settings import WAL
from fastapi import Request

from .settings import BACKUP_FILE, WAL
from . import util


class Color:
def __init__(self):
self.data = WAL["colors"]
Expand All @@ -11,12 +14,17 @@ def get(self):

async def update(self, colors: Request):
self.data.update(await colors.json())
return self.data
return self.get()

def load(self, wallpaper):
colors = [self.data[name] for name in self.data]
data = pywal.colors.colors_to_dict(colors, wallpaper)
pywal.export.every(data)
pywal.sequences.send(data)
pywal.reload.env()
return self.data
return self.get()

def reset(self):
backup = util.read_file_json(BACKUP_FILE)
self.data.clear()
self.data.update(backup["colors"])
104 changes: 54 additions & 50 deletions pywalc/server.py
Original file line number Diff line number Diff line change
@@ -1,55 +1,53 @@
import os
import socket

from fastapi import FastAPI, Request
from fastapi import Request
from fastapi import File, UploadFile
from typing import List
from fastapi import FastAPI, Request, File, UploadFile
from fastapi.responses import HTMLResponse
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

from typing import List
from uvicorn import run

from pycloudflared import try_cloudflare

from .settings import CACHE_DIR
from .settings import CACHE_DIR, OS
from .colors import Color
from .theme import Theme
from .wallpaper import Wallpaper
from .system import System
from . import util


class Server:
def __init__(self):
self.wallpaper = Wallpaper();
self.color = Color();
self.theme = Theme();
self.system = System();

self.api_url = None
self.server = FastAPI(title="Pywalc",
description="Control your pywal",
contact={
"name": "Phuong Nguyen",
"url": "https://png261.github.io",
"email": "[email protected]",
},
openapi_tags=[
{
"name": "wallpaper",
},
{
"name": "theme",
},
{
"name": "color",
},
{
"name": "system",
},
],
redoc_url=None,
docs_url="/api")
def __init__(self, port):
self.port = port
self.wallpaper = Wallpaper()
self.theme = Theme()
self.color = Color()
self.server = FastAPI(
title="Pywalc",
description="Control your pywal",
contact={
"name": "Phuong Nguyen",
"url": "https://png261.github.io",
"email": "[email protected]",
},
openapi_tags=[
{
"name": "wallpaper",
},
{
"name": "theme",
},
{
"name": "color",
},
{
"name": "system",
},
],
redoc_url=None,
docs_url="/api",
)

self.server.add_middleware(
CORSMiddleware,
Expand All @@ -63,20 +61,18 @@ def __init__(self):
static_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "static")
self.server.mount("/static", StaticFiles(directory=static_dir), name="static")

templates_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates")
templates_dir = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "templates"
)
self.templates = Jinja2Templates(directory=templates_dir)

self._setup_routes();
self._setup_routes()

def _setup_routes(self):
@self.server.get("/", response_class=HTMLResponse)
async def home_page(request: Request):
return self.templates.TemplateResponse("index.html", {"request": request})

@self.server.get("/wallpaper/{id}/color", tags=["wallpaper"])
def get_wallpaper_colors(id):
return self.wallpaper.get_colors(id)

@self.server.get("/wallpaper", tags=["wallpaper"])
def get_wallpapers():
return self.wallpaper.get()
Expand All @@ -85,6 +81,10 @@ def get_wallpapers():
def set_wallpaper(id: str):
return self.wallpaper.set(id)

@self.server.get("/wallpaper/{id}/color", tags=["wallpaper"])
def get_wallpaper_colors(id):
return self.wallpaper.get_colors(id)

@self.server.post("/wallpaper", tags=["wallpaper"])
async def upload_wallpaper(files: List[UploadFile] = File(...)):
return await self.wallpaper.upload(files)
Expand Down Expand Up @@ -114,18 +114,22 @@ def set_theme(name, category):
return self.theme.set(name, category)

@self.server.get("/sys", tags=["system"])
def system_get_info():
return self.system.get()
def get_system_info():
return {"os": OS, "name": socket.gethostname()}

@self.server.get("/reset", tags=["system"])
def system_reset():
return self.system.reset(self.color, self. wallpaper)
def reset():
self.color.reset()
self.wallpaper.reset()

def _start_localhost(self):
run(self.server, host='127.0.0.1', port=8080)
print(" * Localhost: http://127.0.0.1:{port}".format(port=self.port))
run(self.server, host="127.0.0.1", port=self.port, log_level="error")

def _start_cloudfare_tunnel(self):
self.api_url = try_cloudflare(port=8080).tunnel
self.online_site = try_cloudflare(port=self.port, verbose=False).tunnel
print(" * Online: {url}".format(url=self.online_site))
util.show_ascii_qrcode(self.online_site)

def run(self):
self._start_cloudfare_tunnel()
Expand Down
16 changes: 0 additions & 16 deletions pywalc/system.py

This file was deleted.

10 changes: 4 additions & 6 deletions pywalc/theme.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import os
import json
import pywal
from .settings import MODULE_DIR
from . import util


class Theme:
def __init__(self):
Expand All @@ -19,9 +20,6 @@ def get(self):
return self.data

def set(self, name, category):
themes_path = os.path.join(
MODULE_DIR, "colorschemes", category, name + ".json"
)
with open(themes_path) as file:
themes = json.loads(file.read())
themes_path = os.path.join(MODULE_DIR, "colorschemes", category, name + ".json")
themes = util.read_file_json(themes_path)
return themes["colors"]
44 changes: 30 additions & 14 deletions pywalc/util.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
"""
Misc helper functions.
"""
import colorsys
import json
import logging
import os
import platform
import re
import shutil
import subprocess
import sys
import qrcode
import io


def read_file(input_file):
"""Read data from a file and trim newlines."""
Expand All @@ -25,7 +24,7 @@ def read_file_json(input_file):

def read_file_raw(input_file):
"""Read data from a file as is, don't strip
newlines or other special characters."""
newlines or other special characters."""
with open(input_file, "r") as file:
return file.readlines()

Expand Down Expand Up @@ -56,14 +55,31 @@ def create_dir(directory):

def setup_logging():
"""Logging config."""
logging.basicConfig(format=("[%(levelname)s\033[0m] "
"\033[1;31m%(module)s\033[0m: "
"%(message)s"),
level=logging.INFO,
stream=sys.stdout)
logging.addLevelName(logging.ERROR, '\033[1;31mE')
logging.addLevelName(logging.INFO, '\033[1;32mI')
logging.addLevelName(logging.WARNING, '\033[1;33mW')
logging.basicConfig(
format=(
"[%(levelname)s\033[0m] " "\033[1;31m%(module)s\033[0m: " "%(message)s"
),
level=logging.INFO,
stream=sys.stdout,
)
logging.addLevelName(logging.ERROR, "\033[1;31mE")
logging.addLevelName(logging.INFO, "\033[1;32mI")
logging.addLevelName(logging.WARNING, "\033[1;33mW")


def copy_dir(source, dest):
shutil.copy(source, dest)
try:
shutil.copyfile(source, dest)
except shutil.SameFileError:
pass


def show_ascii_qrcode(
url,
):
qr = qrcode.QRCode()
qr.add_data(url)
f = io.StringIO()
qr.print_ascii(out=f)
f.seek(0)
print(f.read())
22 changes: 11 additions & 11 deletions pywalc/wallpaper.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,28 @@
from . import util
from fastapi import File, UploadFile


class Wallpaper:
def __init__(self):
self.data = {'current': 'current', 'list': os.listdir(WALLPAPER_DIR)}

def get_info(self):
return self.data
self.data = {"current": "current", "list": os.listdir(WALLPAPER_DIR)}

def update(self,):
self.data.update({'list': os.listdir(WALLPAPER_DIR)})
def update(self):
self.data.update({"list": os.listdir(WALLPAPER_DIR)})

def get(self):
self.update()
return self.data

def get_colors(self,id):
def get_colors(self, id):
img = os.path.join(WALLPAPER_DIR, id)
colors = pywal.colors.get(img)["colors"]
return colors
return pywal.colors.get(img)["colors"]

def get_current(self):
return self.data["current"]

def set(self, id: str):
self.data.update({"current": id})
return self.data
return self.get()

async def upload(self, files: List[UploadFile] = File(...)):
imgs = []
Expand All @@ -45,4 +42,7 @@ async def upload(self, files: List[UploadFile] = File(...)):
def load(self):
image = pywal.image.get(os.path.join(WALLPAPER_DIR, self.data["current"]))
pywal.wallpaper.change(image)
return self.data
return self.get()

def reset(self):
self.data["current"] = "current"
Loading

0 comments on commit 33e4886

Please sign in to comment.