From 415b2007ce0f64cf1f8d159cc82a256bb1aa83ca Mon Sep 17 00:00:00 2001 From: James Pace Date: Sat, 27 Dec 2025 09:08:25 -0500 Subject: [PATCH] Initial front end setup. --- CMakeLists.txt | 20 ++++++++++++++++++++ am_i_up/server.py | 30 ++++++++++++++++++++++++++---- front_end/templates/base.html | 32 ++++++++++++++++++++++++++++++++ package.xml | 5 ++++- resource/am_i_up | 0 scripts/client | 4 ++++ scripts/server | 4 ++++ setup.cfg | 4 ---- setup.py | 25 ------------------------- 9 files changed, 90 insertions(+), 34 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 front_end/templates/base.html delete mode 100644 resource/am_i_up create mode 100755 scripts/client create mode 100755 scripts/server delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..55885f0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.20) +project(am_i_up) + +find_package(ament_cmake REQUIRED) +find_package(ament_cmake_python REQUIRED) + +ament_python_install_package(${PROJECT_NAME}) + +install(DIRECTORY + front_end + DESTINATION share/${PROJECT_NAME}/ +) + +install(DIRECTORY + scripts/ + DESTINATION lib/${PROJECT_NAME}/lib + USE_SOURCE_PERMISSIONS +) + +ament_package() diff --git a/am_i_up/server.py b/am_i_up/server.py index 78f39f9..438a39b 100644 --- a/am_i_up/server.py +++ b/am_i_up/server.py @@ -15,10 +15,13 @@ import yaml import ipaddress import subprocess import os +from jinja2 import Environment, FileSystemLoader, select_autoescape + def main(): facts = Facts() - routes = Routes(facts) + view = View() + routes = Routes(facts, view) app = web.Application() app.add_routes([ @@ -30,6 +33,24 @@ def main(): ]) web.run_app(app) +class View: + def __init__(self): + # TODO: Make global for the script directory. + self._env = Environment( + loader=FileSystemLoader(self._find_template_dirs()), + autoescape=select_autoescape() + ) + + def render_root(self): + return self._env.get_template('base.html').render() + + def _find_template_dirs(self): + package_dir = get_package_share_directory('am_i_up') + template_dir = "{}/front_end/templates".format(package_dir) + if not os.path.exists(template_dir): + raise RuntimeError("Could not find template_dir: {}".format(template_dir)) + return [template_dir] + class Facts: def __init__(self): self._start_time = time.monotonic() @@ -84,12 +105,13 @@ class Facts: return project_state_content class Routes: - def __init__(self, facts): + def __init__(self, facts, view): self._facts = facts + self._view = view async def root(self, request): - text = 'hello!' - return web.Response(text=text) + text = self._view.render_root() + return web.Response(text=text, content_type='text/html') async def ping(self, request): request_dict = await request.json() diff --git a/front_end/templates/base.html b/front_end/templates/base.html new file mode 100644 index 0000000..373f465 --- /dev/null +++ b/front_end/templates/base.html @@ -0,0 +1,32 @@ + + + + + + + + + + + {% block title %}Robot Status UI{% endblock %} + + + + + +
+ + {% block content %} + +
Hello World!
+ + {% endblock %} + +
+ + + + + {% block js %}{% endblock %} + + diff --git a/package.xml b/package.xml index abab68d..82d7fdf 100644 --- a/package.xml +++ b/package.xml @@ -8,11 +8,14 @@ James Pace James Pace + ament_cmake_python python3-aiohttp + python3-jinja2 + rclpy - ament_python + ament_cmake diff --git a/resource/am_i_up b/resource/am_i_up deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/client b/scripts/client new file mode 100755 index 0000000..f5c9363 --- /dev/null +++ b/scripts/client @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 +from am_i_up import client + +client.main() diff --git a/scripts/server b/scripts/server new file mode 100755 index 0000000..0bbe361 --- /dev/null +++ b/scripts/server @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 +from am_i_up import server + +server.main() diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 7c39515..0000000 --- a/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/am_i_up -[install] -install_scripts=$base/lib/am_i_up \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 2c6498e..0000000 --- a/setup.py +++ /dev/null @@ -1,25 +0,0 @@ -from setuptools import setup - -package_name = 'am_i_up' - -setup( - name=package_name, - version='0.0.1', - packages=[package_name], - data_files=[ - ('share/ament_index/resource_index/packages', ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools', 'aiohttp'], - zip_safe=True, - author='James Pace', - author_email='jpace121@gmail.com', - description='TODO', - license='MPL 2.0', - entry_points={ - 'console_scripts': [ - 'server = am_i_up.server:main', - 'client = am_i_up.client:main' - ], - }, -)