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