diff --git a/application/main.py b/application/main.py index 78c3750..e411b11 100644 --- a/application/main.py +++ b/application/main.py @@ -37,6 +37,17 @@ class TodoDate(BaseModel): # date: str = datetime.today().strftime('%Y-%m-%d') +class PrintAction(BaseModel): + date: str = datetime.today().strftime('%Y-%m-%d') + action: str #Options: + # default (pulls current todos from date, needs date) + # sudoku (prints a random sudoku) + # todos (prints only dates todos) + # wordsearch (prints a random wordsearch) + # quote (prints a random quote) + # greeting (prints a greeting) + # + # @app.get("/api/public") # def public(): # """No access token required to access this route""" @@ -107,7 +118,7 @@ def write_todos(todos: TodoList, auth_result: str = Security(auth.verify)): @app.get("/api/todos/print") -def print_todos(date: str = datetime.today().strftime('%Y-%m-%d'), auth_result: str = Security(auth.verify)): +def print_todos(date: PrintAction, auth_result: str = Security(auth.verify)): """A valid access token is required to access this route""" # result = { diff --git a/application/sudoku.png b/application/sudoku.png index 79c96f2..e315a48 100644 Binary files a/application/sudoku.png and b/application/sudoku.png differ diff --git a/application/sudoku_16.png b/application/sudoku_16.png new file mode 100644 index 0000000..5efa509 Binary files /dev/null and b/application/sudoku_16.png differ diff --git a/application/sudoku_4.png b/application/sudoku_4.png new file mode 100644 index 0000000..0562f6d Binary files /dev/null and b/application/sudoku_4.png differ diff --git a/application/sudoku_generator.py b/application/sudoku_generator.py index 6a93df9..aeeb6c4 100644 --- a/application/sudoku_generator.py +++ b/application/sudoku_generator.py @@ -1,6 +1,7 @@ from PIL import Image from PIL import ImageDraw from PIL import ImageFont +import copy def generate_sudoku(): base = 3 @@ -21,7 +22,8 @@ def generate_sudoku(): board = [ [nums[pattern(r,c)] for c in cols] for r in rows ] # for line in board: print(line) - # solution = board + # solution = board[:] + solution = copy.deepcopy(board) # print(solution) @@ -36,6 +38,7 @@ def generate_sudoku(): for p in sample(range(squares),empties): board[p//side][p%side] = 0 + # numSize = len(str(side)) # for line in board: # print(*(f"{n or '.':{numSize}} " for n in line)) @@ -69,35 +72,48 @@ def generate_sudoku(): symbol = " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" nums = [ [""]+[symbol[n] for n in row] for row in board ] + nums_sol = [ [""]+[symbol[n] for n in row] for row in solution ] output = [] + output_sol = [] # print(line0) output.append(line0) + output_sol.append(line0) for r in range(1,side+1): output.append("".join(n+s for n,s in zip(nums[r-1],line1.split(".")))) output.append([line2,line3,line4][(r%side==0)+(r%base==0)]) # print( "".join(n+s for n,s in zip(nums[r-1],line1.split("."))) ) # print([line2,line3,line4][(r%side==0)+(r%base==0)]) + for r in range(1,side+1): + output_sol.append("".join(n+s for n,s in zip(nums_sol[r-1],line1.split(".")))) + output_sol.append([line2,line3,line4][(r%side==0)+(r%base==0)]) + # print('=') # print(output) # for x in output: # print(x) # print('-') - return output + return [output, output_sol] -def convert_to_image(sudoku): +def convert_to_image(sudoku, size=16, flipped=False): # sample text and font # unicode_text = u"Unicode Characters: \u00C6 \u00E6 \u00B2 \u00C4 \u00D1 \u220F" unicode_text = sudoku[0] - verdana_font = ImageFont.truetype("application/IBMPlexMono-Medium.ttf", 16, encoding="unic") + # print(sudoku) + # print(len(sudoku)) + verdana_font = ImageFont.truetype("IBMPlexMono-Medium.ttf", size, encoding="unic") # get the line size - text_width, text_height = verdana_font.getsize(unicode_text) + bx, by, text_width, text_height = verdana_font.getbbox(unicode_text) + # print(verdana_font.getsize(unicode_text)) + # print(verdana_font.getbbox(unicode_text)) + # print(verdana_font.getlength(unicode_text)) + # print(text_height) # create a blank canvas with extra space between lines - canvas = Image.new('RGB', (text_width + 10, (text_height*(len(sudoku)-1))), (255, 255, 255)) + canvas = Image.new('RGB', (text_width + 10, ((text_height-2)*(len(sudoku)))), (255, 255, 255)) # canvas.convert('L') @@ -114,7 +130,9 @@ def convert_to_image(sudoku): # save the blank canvas to a file # fn = lambda x : 255 if x > 200 else 0 # canvas.convert('L').point(fn, mode='1') - canvas.save("sudoku.png", "PNG") + if flipped: + canvas = canvas.transpose(Image.FLIP_TOP_BOTTOM) + canvas.save("sudoku_" + str(size) +".png", "PNG") # img = Image.new('RGB', (200, 100)) # d = ImageDraw.Draw(img) # d.text((30, 20), sudoku[0], fill=(255, 0, 0)) @@ -122,11 +140,17 @@ def convert_to_image(sudoku): # print(text_width, text_height) if __name__ == '__main__': - su = generate_sudoku() + out = generate_sudoku() + su = out[0] + su_sol = out[1] + # print(out) for x in su: print(x) + for y in su_sol: + print(y) convert_to_image(su) - print(su) + convert_to_image(su_sol, size=4, flipped=True) + # print(su) # for x in generate_sudoku(): # print(x) diff --git a/application/thermal_print.py b/application/thermal_print.py index 9dfb35b..047b7f2 100644 --- a/application/thermal_print.py +++ b/application/thermal_print.py @@ -129,9 +129,15 @@ class ThermalPrinter(): # self.p.close() # self.p = Usb(0x0416, 0x5011, None, 4, 0x81, 0x02) # self.p = Usb(idVendor=0x0416, idProduct=0x5011, usb_args=None, timeout=4000 , in_ep=0x81, out_ep=0x02, profile="POS-5890") - convert_to_image(generate_sudoku()) + # convert_to_image(generate_sudoku()) + sudokus = generate_sudoku() + convert_to_image(sudokus[0], size=16, flipped=False) + convert_to_image(sudokus[1], size=4, flipped=True) + self.p.set(align="right") + self.p.image("sudoku_4.png") + self.p.text("\n") self.p.set(align="center") - self.p.image("sudoku.png") + self.p.image("sudoku_16.png") # self.p.close() # self.p = Usb(idVendor=0x0416, idProduct=0x5011, usb_args=None, timeout=4 , in_ep=0x81, out_ep=0x02, profile="POS-5890")