Skip to content

Commit 91e4d7f

Browse files
committed
Implement ADR-018: Lean framework separation
Remove platform features and simplify IPC: - Remove WebSocket broker, replace with file-based error communication - Delete dead code (exceptions.py, node/spatial.py) - Remove git.py and refactor/ modules (moved to solid-studio) - Simplify develop.py from 3 processes to 2 - Remove websockets and GitPython dependencies
1 parent cd8c158 commit 91e4d7f

12 files changed

Lines changed: 44 additions & 733 deletions

File tree

setup.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ def run(self):
5959
"httpx==0.27.*",
6060
"fastapi==0.111.*",
6161
"termcolor==2.4.*",
62-
"websockets==12.*",
63-
"GitPython==3.1.*",
6462
"asgiref==3.8.*",
6563
"uvicorn==0.30.*",
6664
"numpy==2.2.*",

solid_node/core/broker.py

Lines changed: 0 additions & 182 deletions
This file was deleted.

solid_node/core/builder.py

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
# You should have received a copy of the GNU Affero General Public License
1515
# along with this program. If not, see <https://www.gnu.org/licenses/>.
1616

17+
import os
1718
import sys
19+
import json
1820
import asyncio
1921
import traceback
2022
import logging
@@ -23,14 +25,40 @@
2325
from watchdog.observers import Observer
2426
from watchdog.events import FileSystemEventHandler
2527
from .loader import load_node
26-
from .broker import BrokerClient
27-
from solid_node.core.refactor import RefactorRequest
2828
from solid_node.node.base import StlRenderStart
2929

3030

3131
logger = logging.getLogger('core.builder')
3232

3333

34+
def get_build_dir():
35+
"""Get the base build directory from environment or default"""
36+
return os.environ.get('SOLID_BUILD_DIR', '_build')
37+
38+
39+
def get_errors_file():
40+
"""Get the path to the errors.json file in the build directory"""
41+
return os.path.join(get_build_dir(), 'errors.json')
42+
43+
44+
def clear_errors():
45+
"""Clear any existing error file"""
46+
errors_file = get_errors_file()
47+
if os.path.exists(errors_file):
48+
os.remove(errors_file)
49+
50+
51+
def write_error(error_message):
52+
"""Write build error to file for WebViewer to read"""
53+
errors_file = get_errors_file()
54+
os.makedirs(os.path.dirname(errors_file), exist_ok=True)
55+
with open(errors_file, 'w') as f:
56+
json.dump({
57+
'error': error_message,
58+
'tstamp': time.time(),
59+
}, f)
60+
61+
3462
class Builder(FileSystemEventHandler):
3563
"""Monitors .py files. On any change, generate STLs and exit"""
3664
def __init__(self, path):
@@ -48,7 +76,6 @@ def start(self):
4876

4977
async def _start(self):
5078
logger.info('START')
51-
self.broker = BrokerClient()
5279

5380
try:
5481
self.node = load_node(self.path)
@@ -58,10 +85,11 @@ async def _start(self):
5885
await self.report_error(error_message)
5986
sys.exit(0)
6087

88+
# Clear any previous errors on successful load
89+
clear_errors()
90+
6191
try:
6292
self.node.assemble()
63-
except RefactorRequest as request:
64-
await self.execute_refactor(request)
6593
except Exception as e:
6694
error_message = traceback.format_exc()
6795
logger.error(error_message)
@@ -75,8 +103,6 @@ async def _start(self):
75103

76104
try:
77105
await self.generate_stl()
78-
except RefactorRequest as request:
79-
await self.execute_refactor(request)
80106
except Exception as e:
81107
error_message = traceback.format_exc()
82108
logger.error(error_message)
@@ -100,10 +126,7 @@ async def generate_stl(self):
100126
sys.exit(0)
101127

102128
async def report_error(self, error_message):
103-
await self.broker.put('build_error', {
104-
'error': error_message,
105-
'tstamp': time.time(),
106-
})
129+
write_error(error_message)
107130
await self.file_changed
108131
sys.exit(0)
109132

@@ -114,15 +137,3 @@ def on_modified(self, event):
114137
return
115138
logging.info(f'{event.src_path} changed, reloading')
116139
self.loop.call_soon_threadsafe(self.file_changed.set_result, True)
117-
118-
async def execute_refactor(self, request):
119-
"""Experimental: refactor requests are special exceptions injected in scope
120-
that trigger the builder to refactor nodes. Make sure you commit your changes
121-
before using it."""
122-
try:
123-
request.refactor()
124-
sys.exit(0)
125-
except Exception as e:
126-
error_message = traceback.format_exc()
127-
logger.error(error_message)
128-
await self.report_error(f"Could not execute refactor\n\n{error_message}")

solid_node/core/git.py

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)