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

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()