Skip to content

Commit

Permalink
split flask app into separate files
Browse files Browse the repository at this point in the history
  • Loading branch information
Warwick Stone committed Oct 22, 2018
1 parent ba74d89 commit 6e8f2c2
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 32 deletions.
14 changes: 14 additions & 0 deletions flask_pixel_server/arg_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import argparse

class ArgParser:
def __init__(self, description):
self.description = description

def parse_args(self):
arg_parser = argparse.ArgumentParser(description=self.description)
arg_parser.add_argument('--host', help='set the host address of the server, ' +
'eg. 0.0.0.0 to accept external requests')
arg_parser.add_argument('--device', help='set the display device (default: %(default)s)',
choices=['pygame', 'arduino'],
default='pygame')
return arg_parser.parse_args()
40 changes: 8 additions & 32 deletions flask_pixel_server/flask-app.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
import argparse
from arg_parser import ArgParser
from flask import Flask, request
import sys
from threading import Thread

sys.path.append('..')

from pixel_generator_slave import PixelGeneratorSlave
from pixel_service import PixelService


DESCRIPTION = """
Expand All @@ -14,9 +10,10 @@

NUM_PIXELS = 43


app = Flask(__name__, static_url_path='')
app.config.from_object(__name__)
pixelgen = PixelGeneratorSlave(NUM_PIXELS)
pixelservice = None


@app.route('/')
Expand All @@ -41,33 +38,12 @@ def set_all():
return "OK"

def set_all_rgb(r, g, b):
pixelgen.set_all(r, g, b)

def parse_args():
arg_parser = argparse.ArgumentParser(description=DESCRIPTION)
arg_parser.add_argument('--host', help='set the host address of the server, ' +
'eg. 0.0.0.0 to accept external requests')
arg_parser.add_argument('--device', help='set the display device (default: %(default)s)',
choices=['pygame', 'arduino'],
default='pygame')
return arg_parser.parse_args()

def start_displayer(device):
if device == 'pygame':
from pygame_pixels.pygame_pixels import PygamePixelDisplayer
pixeldisp = PygamePixelDisplayer(pixelgen.generate)
elif device == 'arduino':
from arduino_pixels.py_serial_pixels.serial_pixel_displayer import SerialPixelDisplayer
pixeldisp = SerialPixelDisplayer(pixelgen.generate)
else:
raise Exception('unknown displayer device: ' + device)
pixelservice.set_all(r, g, b)

# run the displayer in a background thread, since it runs a blocking loop
dispthread = Thread(target=pixeldisp.run)
dispthread.start()

if __name__ == '__main__':
args = parse_args()
args = ArgParser(DESCRIPTION).parse_args()
host = args.host if args.host else None
start_displayer(args.device)
pixelservice = PixelService(NUM_PIXELS)
pixelservice.start_displayer(args.device)
app.run(host)
3 changes: 3 additions & 0 deletions flask_pixel_server/pixel_generator_slave.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ class PixelGeneratorSlave:
def __init__(self, num_pixels):
self.pixels = [Pixel() for i in range(num_pixels)]

def set_generator(self, generator):
self.generator = generator

def generate(self):
return self.pixels

Expand Down
26 changes: 26 additions & 0 deletions flask_pixel_server/pixel_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from threading import Thread

from pixel_generator_slave import PixelGeneratorSlave


class PixelService:
""" Deals with all pixel stuff required by the flask app """
def __init__(self, num_pixels):
self.pixelgen = PixelGeneratorSlave(num_pixels)

def start_displayer(self, device):
if device == 'pygame':
from pygame_pixels.pygame_pixels import PygamePixelDisplayer
pixeldisp = PygamePixelDisplayer(self.pixelgen.generate)
elif device == 'arduino':
from arduino_pixels.py_serial_pixels.serial_pixel_displayer import SerialPixelDisplayer
pixeldisp = SerialPixelDisplayer(self.pixelgen.generate)
else:
raise Exception('unknown displayer device: ' + device)

# run the displayer in a background thread, since it runs a blocking loop
dispthread = Thread(target=pixeldisp.run)
dispthread.start()

def set_all(self, r, g, b):
self.pixelgen.set_all(r, g, b)
2 changes: 2 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,7 @@ pygame_pixels/
# todo

- use patterns in flask_pixels
- limit brightness in pi serial displayer
- only send over serial when pixel value changes?
- touch-friendly RGB sliders in flask app
- get more patterns from neogoggles

0 comments on commit 6e8f2c2

Please sign in to comment.