api: Remove wal.py

This commit is contained in:
Dylan Araps 2017-07-22 22:26:49 +10:00
parent a4ea6a4f7a
commit de47c1beaa
13 changed files with 123 additions and 140 deletions

View File

@ -1,15 +1,22 @@
""" """
wal - Generate and change colorschemes on the fly. '||
... ... .... ... ... ... ... .... ||
||' || '|. | || || | '' .|| ||
|| | '|.| ||| ||| .|' || ||
||...' '| | | '|..'|' .||.
|| .. |
'''' ''
Created by Dylan Araps. Created by Dylan Araps.
""" """
from pywal.wal import __version__
from pywal.wal import create_palette from .settings import __version__
from pywal.wal import export_all_templates from .colors import get as create_palette
from pywal.wal import get_image from .image import get as get_image
from pywal.wal import reload_colors from .reload import colors as reload_colors
from pywal.wal import reload_env from .reload import env as reload_env
from pywal.wal import send_sequences from .sequences import send as send_sequences
from pywal.wal import set_wallpaper from .template import export_all as export_all_templates
from .wallpaper import change as set_wallpaper
__all__ = [ __all__ = [
"__version__", "__version__",

View File

@ -1,14 +1,27 @@
""" """
wal - Generate and change colorschemes on the fly. '||
... ... .... ... ... ... ... .... ||
||' || '|. | || || | '' .|| ||
|| | '|.| ||| ||| .|' || ||
||...' '| | | '|..'|' .||.
|| .. |
'''' ''
Created by Dylan Araps. Created by Dylan Araps.
""" """
import argparse import argparse
import os import os
import shutil import shutil
import sys import sys
from pywal import wal from .settings import __version__, __cache_dir__
from pywal import util from . import colors
from . import image
from . import reload
from . import sequences
from . import template
from . import util
from . import wallpaper
def get_args(): def get_args():
@ -61,33 +74,33 @@ def process_args(args):
exit(1) exit(1)
if args.v: if args.v:
print(f"wal {wal.__version__}") print(f"wal {__version__}")
exit(0) exit(0)
if args.q: if args.q:
sys.stdout = sys.stderr = open(os.devnull, "w") sys.stdout = sys.stderr = open(os.devnull, "w")
if args.c: if args.c:
shutil.rmtree(wal.CACHE_DIR / "schemes", ignore_errors=True) shutil.rmtree(__cache_dir__ / "schemes", ignore_errors=True)
if args.r: if args.r:
wal.reload_colors(args.t) reload.colors(args.t)
if args.i: if args.i:
image_file = wal.get_image(args.i) image_file = image.get(args.i)
colors_plain = wal.create_palette(img=image_file, notify=not args.q) colors_plain = colors.get(image_file, notify=not args.q)
elif args.f: if args.f:
colors_plain = util.read_file_json(args.f) colors_plain = util.read_file_json(args.f)
if args.i or args.f: if args.i or args.f:
wal.send_sequences(colors_plain, args.t) sequences.send(colors_plain, args.t)
if not args.n: if not args.n:
wal.set_wallpaper(colors_plain["wallpaper"]) wallpaper.change(colors_plain["wallpaper"])
wal.export_all_templates(colors_plain) template.export_all(colors_plain)
wal.reload_env() reload.env()
if args.o: if args.o:
util.disown(args.o) util.disown(args.o)

View File

@ -5,7 +5,8 @@ import re
import shutil import shutil
import subprocess import subprocess
from pywal import util from .settings import __cache_dir__, __color_count__
from . import util
def imagemagick(color_count, img): def imagemagick(color_count, img):
@ -47,29 +48,6 @@ def gen_colors(img, color_count):
return [re.search("#.{6}", str(col)).group(0) for col in raw_colors] return [re.search("#.{6}", str(col)).group(0) for col in raw_colors]
def get_colors(img, cache_dir, color_count, quiet):
"""Get the colorscheme."""
# _home_dylan_img_jpg.json
cache_file = cache_dir / "schemes" / \
img.replace("/", "_").replace(".", "_")
cache_file = cache_file.with_suffix(".json")
if cache_file.is_file():
colors = util.read_file_json(cache_file)
print("colors: Found cached colorscheme.")
else:
util.msg("wal: Generating a colorscheme...", quiet)
colors = gen_colors(img, color_count)
colors = sort_colors(img, colors)
util.save_file_json(colors, cache_file)
util.msg("wal: Generation complete.", quiet)
return colors
def sort_colors(img, colors): def sort_colors(img, colors):
"""Sort the generated colors and store them in a dict that """Sort the generated colors and store them in a dict that
we will later save in json format.""" we will later save in json format."""
@ -91,3 +69,27 @@ def sort_colors(img, colors):
colors["colors"] = colors_hex colors["colors"] = colors_hex
return colors return colors
def get(img, cache_dir=__cache_dir__,
color_count=__color_count__, notify=False):
"""Get the colorscheme."""
# _home_dylan_img_jpg.json
cache_file = cache_dir / "schemes" / \
img.replace("/", "_").replace(".", "_")
cache_file = cache_file.with_suffix(".json")
if cache_file.is_file():
colors = util.read_file_json(cache_file)
print("colors: Found cached colorscheme.")
else:
util.msg("wal: Generating a colorscheme...", notify)
colors = gen_colors(img, color_count)
colors = sort_colors(img, colors)
util.save_file_json(colors, cache_file)
util.msg("wal: Generation complete.", notify)
return colors

View File

@ -5,7 +5,8 @@ import os
import pathlib import pathlib
import random import random
from pywal import util from .settings import __cache_dir__
from . import util
def get_random_image(img_dir, cache_dir): def get_random_image(img_dir, cache_dir):
@ -27,7 +28,7 @@ def get_random_image(img_dir, cache_dir):
return str(img_dir / random.choice(images).name) return str(img_dir / random.choice(images).name)
def get_image(img, cache_dir): def get(img, cache_dir=__cache_dir__):
"""Validate image input.""" """Validate image input."""
image = pathlib.Path(img) image = pathlib.Path(img)

View File

@ -1,10 +1,12 @@
""" """
Reload programs. Reload programs.
""" """
import re
import shutil import shutil
import subprocess import subprocess
from pywal import util from .settings import __cache_dir__
from . import util
def reload_xrdb(cache_dir): def reload_xrdb(cache_dir):
@ -27,9 +29,25 @@ def reload_polybar():
util.disown("pkill", "-USR1", "polybar") util.disown("pkill", "-USR1", "polybar")
def reload_env(cache_dir): def env(cache_dir=__cache_dir__):
"""Reload environment.""" """Reload environment."""
reload_xrdb(cache_dir) reload_xrdb(cache_dir)
reload_i3() reload_i3()
reload_polybar() reload_polybar()
print("reload: Reloaded environment.") print("reload: Reloaded environment.")
def colors(vte, cache_dir=__cache_dir__):
"""Reload the current scheme."""
sequence_file = cache_dir / "sequences"
if sequence_file.is_file():
sequences = "".join(util.read_file(sequence_file))
# If vte mode was used, remove the unsupported sequence.
if vte:
sequences = re.sub(r"\]708;\#.{6}", "", sequences)
print(sequences, end="")
exit(0)

View File

@ -2,9 +2,9 @@
Send sequences to all open terminals. Send sequences to all open terminals.
""" """
import os import os
import re
from pywal import util from .settings import __cache_dir__
from . import util
def set_special(index, color): def set_special(index, color):
@ -17,14 +17,14 @@ def set_color(index, color):
return f"\033]4;{index};{color}\007" return f"\033]4;{index};{color}\007"
def send_sequences(colors, vte, cache_dir): def send(colors, vte, cache_dir=__cache_dir__):
"""Send colors to all open terminals.""" """Send colors to all open terminals."""
# Colors 0-15. # Colors 0-15.
sequences = [set_color(num, color) sequences = [set_color(num, color)
for num, color in enumerate(colors["colors"].values())] for num, color in enumerate(colors["colors"].values())]
# Special colors. # Special colors.
# http://pod.tst.eu/http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.pod#XTerm_Operating_System_Commands # Source: https://goo.gl/KcoQgP
# 10 = foreground, 11 = background, 12 = cursor foregound # 10 = foreground, 11 = background, 12 = cursor foregound
# 13 = mouse foreground # 13 = mouse foreground
sequences.append(set_special(10, colors["special"]["foreground"])) sequences.append(set_special(10, colors["special"]["foreground"]))
@ -32,7 +32,7 @@ def send_sequences(colors, vte, cache_dir):
sequences.append(set_special(12, colors["special"]["cursor"])) sequences.append(set_special(12, colors["special"]["cursor"]))
sequences.append(set_special(13, colors["special"]["cursor"])) sequences.append(set_special(13, colors["special"]["cursor"]))
# Set a blank color that isn"t affected by bold highlighting. # Set a blank color that isn't affected by bold highlighting.
# Used in wal.vim's airline theme. # Used in wal.vim's airline theme.
sequences.append(set_color(66, colors["special"]["background"])) sequences.append(set_color(66, colors["special"]["background"]))
@ -49,19 +49,3 @@ def send_sequences(colors, vte, cache_dir):
util.save_file("".join(sequences), term) util.save_file("".join(sequences), term)
print("colors: Set terminal colors") print("colors: Set terminal colors")
def reload_colors(vte, cache_dir):
"""Reload the current scheme."""
sequence_file = cache_dir / "sequences"
if sequence_file.is_file():
sequences = "".join(util.read_file(sequence_file))
# If vte mode was used, remove the unsupported sequence.
if vte:
sequences = re.sub(r"\]708;\#.{6}", "", sequences)
print(sequences, end="")
exit(0)

16
pywal/settings.py Normal file
View File

@ -0,0 +1,16 @@
"""
'||
... ... .... ... ... ... ... .... ||
||' || '|. | || || | '' .|| ||
|| | '|.| ||| ||| .|' || ||
||...' '| | | '|..'|' .||.
|| .. |
'''' ''
Created by Dylan Araps.
"""
import pathlib
__version__ = "0.4.0"
__cache_dir__ = pathlib.Path.home() / ".cache/wal/"
__color_count__ = 16

View File

@ -3,7 +3,8 @@ Export colors in various formats.
""" """
import os import os
from pywal import util from .settings import __cache_dir__
from . import util
def template(colors, input_file, output_dir): def template(colors, input_file, output_dir):
@ -16,7 +17,7 @@ def template(colors, input_file, output_dir):
print(f"export: Exported {template_name}.") print(f"export: Exported {template_name}.")
def export_all_templates(colors, output_dir, template_dir=None): def export_all(colors, output_dir=__cache_dir__, template_dir=None):
"""Export all template files.""" """Export all template files."""
template_dir = template_dir or \ template_dir = template_dir or \
os.path.join(os.path.dirname(__file__), "templates") os.path.join(os.path.dirname(__file__), "templates")

View File

@ -1,55 +0,0 @@
"""
wal - Generate and change colorschemes on the fly.
Created by Dylan Araps.
"""
import pathlib
from pywal import image
from pywal import magic
from pywal import reload
from pywal import sequences
from pywal import template
from pywal import wallpaper
__version__ = "0.4.0"
COLOR_COUNT = 16
CACHE_DIR = pathlib.Path.home() / ".cache/wal/"
def get_image(img, cache_dir=CACHE_DIR):
"""Validate image input."""
return image.get_image(img, cache_dir)
def create_palette(img, cache_dir=CACHE_DIR,
color_count=COLOR_COUNT, notify=False):
"""Create a palette and return it as a dict."""
return magic.get_colors(img, cache_dir, color_count, notify)
def send_sequences(colors, vte, cache_dir=CACHE_DIR):
"""Send the sequences."""
sequences.send_sequences(colors, vte, cache_dir)
def reload_env(cache_dir=CACHE_DIR):
"""Reload the environment."""
reload.reload_env(cache_dir)
def export_all_templates(colors, output_dir=CACHE_DIR, template_dir=None):
"""Export all templates."""
template.export_all_templates(colors, output_dir, template_dir)
def set_wallpaper(img):
"""Set the wallpaper."""
wallpaper.set_wallpaper(img)
def reload_colors(vte, cache_dir=CACHE_DIR):
"""Reload the colors."""
sequences.reload_colors(vte, cache_dir)

View File

@ -80,7 +80,7 @@ def set_desktop_wallpaper(desktop, img):
set_wm_wallpaper(img) set_wm_wallpaper(img)
def set_wallpaper(img): def change(img):
"""Set the wallpaper.""" """Set the wallpaper."""
if not os.path.isfile(img): if not os.path.isfile(img):
return return

View File

@ -1,7 +1,7 @@
"""Test imagemagick functions.""" """Test imagemagick functions."""
import unittest import unittest
from pywal import wal from pywal import colors
class TestGenColors(unittest.TestCase): class TestGenColors(unittest.TestCase):
@ -9,7 +9,7 @@ class TestGenColors(unittest.TestCase):
def test_gen_colors(self): def test_gen_colors(self):
"""> Generate a colorscheme.""" """> Generate a colorscheme."""
result = wal.create_palette("tests/test_files/test.jpg") result = colors.get("tests/test_files/test.jpg")
self.assertEqual(result["colors"]["color0"], "#0F191A") self.assertEqual(result["colors"]["color0"], "#0F191A")

View File

@ -1,23 +1,19 @@
"""Test image functions.""" """Test image functions."""
import pathlib
import unittest import unittest
from pywal import wal from pywal import image
CACHE_DIR = pathlib.Path("/tmp/wal")
class TestImage(unittest.TestCase): class TestImage(unittest.TestCase):
"""Test image functions.""" """Test image functions."""
def test_get_img(self): def test_get_img(self):
"""> Validate image file.""" """> Validate image file."""
result = wal.get_image("tests/test_files/test.jpg", CACHE_DIR) result = image.get("tests/test_files/test.jpg")
self.assertEqual(result, "tests/test_files/test.jpg") self.assertEqual(result, "tests/test_files/test.jpg")
def test_get_img_dir(self): def test_get_img_dir(self):
"""> Validate image directory.""" """> Validate image directory."""
result = wal.get_image("tests/test_files", CACHE_DIR) result = image.get("tests/test_files")
self.assertEqual(result, "tests/test_files/test2.jpg") self.assertEqual(result, "tests/test_files/test2.jpg")

View File

@ -2,7 +2,7 @@
import unittest import unittest
import pathlib import pathlib
from pywal import wal from pywal import template
from pywal import util from pywal import util
@ -21,7 +21,7 @@ class TestExportColors(unittest.TestCase):
output_dir = pathlib.Path("/tmp") output_dir = pathlib.Path("/tmp")
template_dir = pathlib.Path("tests/test_files/templates") template_dir = pathlib.Path("tests/test_files/templates")
wal.export_all_templates(COLORS, output_dir, template_dir) template.export_all(COLORS, output_dir, template_dir)
result = pathlib.Path("/tmp/test_template").is_file() result = pathlib.Path("/tmp/test_template").is_file()
self.assertTrue(result) self.assertTrue(result)