You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.0 KiB
Python
148 lines
4.0 KiB
Python
import glob
|
|
import math
|
|
import mimetypes
|
|
import os
|
|
import queue
|
|
import subprocess
|
|
import urllib
|
|
import yaml
|
|
from random import choice
|
|
import kode256
|
|
from base64 import b64encode
|
|
|
|
from PIL import Image
|
|
|
|
from bureau import Bureau, add_command, add_api
|
|
|
|
|
|
class Soup(Bureau):
|
|
"""
|
|
This bureau cooks few texts with xpub's python function recipes .
|
|
"""
|
|
|
|
name = "Canteen of the Screenless Office"
|
|
prefix = "SB"
|
|
version = 0
|
|
input_queue = []
|
|
pattern = ''
|
|
|
|
def __init__(self):
|
|
Bureau.__init__(self)
|
|
|
|
@add_command("1sentence", "1 Sentence Game Ideas")
|
|
def print_game(self):
|
|
"""
|
|
Prints one entry from the one sentence game ideas.
|
|
"""
|
|
|
|
onesentencegames = os.path.join(self.mdir, 'onesentenceg.yml')
|
|
with open(onesentencegames, 'r') as f:
|
|
games = yaml.load(f)
|
|
game = choice(games['games'])
|
|
|
|
self.print_small(game)
|
|
|
|
@add_command("pa", 'Set Pattern')
|
|
def print_pattern(self, data):
|
|
"""
|
|
Prints a pattern composed with A and B characters.
|
|
"""
|
|
|
|
pattern = data
|
|
self.pattern = pattern
|
|
self.print_small(pattern)
|
|
|
|
@add_command('list', 'Return a list of contents')
|
|
def list_contents(self):
|
|
|
|
prn = self._get_small_printer()
|
|
contents = []
|
|
|
|
files = glob.glob(os.path.join(self.mdir, 'contents', '*.txt'))
|
|
for file in files:
|
|
filename, ext = os.path.basename(file).split('.')
|
|
|
|
svg = kode256.svg("SBaq." + filename)
|
|
encoded_svg = b64encode(svg.encode()).decode()
|
|
encoded_data = "data:image/svg+xml;charset=utf-8;base64," + encoded_svg
|
|
|
|
with open(os.path.join(self.mdir, 'contents', filename + '.txt'), 'r') as f:
|
|
text = f.read()
|
|
|
|
contents.append({
|
|
"title": filename,
|
|
"barcode": encoded_data,
|
|
"content": text
|
|
})
|
|
|
|
self.print_full('files.html', contents=contents)
|
|
|
|
@add_command('tp', 'Print a short excerpt of a text')
|
|
def print_preview(self, data):
|
|
filename, _ = data.split(".")
|
|
|
|
with open(os.path.join(self.mdir, 'contents', filename + '.txt'), 'r') as f:
|
|
text = f.read()
|
|
|
|
self.print_small(filename + '\n' + text[:200] + '...')
|
|
|
|
@add_command('aq', 'Add a text to the queue')
|
|
def add_to_queue(self, data):
|
|
filename, _ = data.split(".")
|
|
self.input_queue.append(filename)
|
|
|
|
@add_command('cq', 'clear inputs in the queue')
|
|
def clear_q(self):
|
|
self.input_queue = []
|
|
self.print_small("queue cleared!")
|
|
|
|
# @add_command('fx', 'execute the chosen function')
|
|
# def ex_function
|
|
|
|
@add_command('wv', 'veawe 2 texts')
|
|
def weave(self):
|
|
|
|
result = ''
|
|
|
|
with open(os.path.join(self.mdir, 'contents', self.input_queue[0] + '.txt'), 'r') as f:
|
|
list_a = f.read().split(' ')
|
|
|
|
with open(os.path.join(self.mdir, 'contents', self.input_queue[1] + '.txt'), 'r') as f:
|
|
list_b = f.read().split(' ')
|
|
|
|
self.print_small(f'pattern: {self.pattern}')
|
|
self.print_small(
|
|
f'in the queue: {self.input_queue[0]}, {self.input_queue[1]}')
|
|
|
|
text_a_cursor = 0
|
|
text_b_cursor = 0
|
|
|
|
length = len(list_a) + len(list_b)
|
|
|
|
repeated_pattern = (self.pattern * (length // len(self.pattern)))
|
|
|
|
# + self.pattern[:(length % len(self.pattern))]
|
|
for choice in repeated_pattern:
|
|
try:
|
|
if choice == 'A':
|
|
result += list_a[text_a_cursor] + ' '
|
|
text_a_cursor += 1
|
|
if choice == 'B':
|
|
result += list_b[text_b_cursor] + ' '
|
|
text_b_cursor += 1
|
|
except Exception:
|
|
pass
|
|
|
|
self.print_full('output_text.html', content=result,
|
|
title=f'{self.input_queue[0]} ~ {self.input_queue[1]}')
|
|
self.print_small(result)
|
|
|
|
|
|
def main():
|
|
sb = Soup()
|
|
sb.run()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|