Skip to content

Commit 4c24330

Browse files
committed
Removed web code editor and git autocommit
This is too much complication for now.
1 parent e6fcef6 commit 4c24330

File tree

11 files changed

+115
-322
lines changed

11 files changed

+115
-322
lines changed

solid_node/core/broker.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,53 @@ async def get(self, key):
114114
async with httpx.AsyncClient() as client:
115115
response = await client.get((f'{BROKER_URL}/{key}'))
116116
return response.json()
117+
118+
class AsyncLock:
119+
120+
def __init__(self, source):
121+
self.source = source
122+
self.locked = False
123+
124+
async def __aenter__(self):
125+
await self.acquire_lock()
126+
self.locked = True
127+
128+
async def __aexit__(self, exc_type, exc_val, exc_tb):
129+
await self.release_lock()
130+
self.locked = False
131+
132+
async def acquire_lock(self):
133+
async with websockets.connect(LOCK_URL) as websocket:
134+
await websocket.send("acquire")
135+
await websocket.recv()
136+
logger.info(f'LOCK from {self.source} ')
137+
138+
async def release_lock(self):
139+
async with websockets.connect(LOCK_URL) as websocket:
140+
await websocket.send("release")
141+
await websocket.recv()
142+
logger.info(f'RELEASE from {self.source} ')
143+
144+
145+
class SyncLock:
146+
147+
def __init__(self, source):
148+
self.source = source
149+
self.locked = False
150+
151+
def __enter__(self):
152+
self.acquire_lock()
153+
self.locked = True
154+
return self
155+
156+
def __exit__(self, exc_type, exc_val, exc_tb):
157+
self.release_lock()
158+
self.locked = False
159+
160+
def acquire_lock(self):
161+
# Synchronous code to acquire lock
162+
logger.info(f'SYNC LOCK from {self.source}')
163+
164+
def release_lock(self):
165+
# Synchronous code to release lock
166+
logger.info(f'SYNC RELEASE from {self.source}')

solid_node/core/builder.py

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from watchdog.observers import Observer
88
from watchdog.events import FileSystemEventHandler
99
from .loader import load_node
10-
from .git import GitRepo
1110
from .broker import BrokerClient
1211
from solid_node.core.refactor import RefactorRequest
1312
from solid_node.node.base import StlRenderStart
@@ -22,7 +21,6 @@ def __init__(self, path):
2221
super().__init__()
2322
self.path = path
2423

25-
self.repo = GitRepo(path)
2624
self.file_changed = Future()
2725
self.observer = Observer()
2826

@@ -35,39 +33,38 @@ async def _start(self):
3533
logger.info('START')
3634
self.broker = BrokerClient()
3735

38-
async with self.repo.async_lock('BUILDER'):
39-
try:
40-
self.node = load_node(self.path)
41-
except Exception as e:
42-
error_message = traceback.format_exc()
43-
logger.error(error_message)
44-
await self.rollback(error_message)
45-
sys.exit(0)
46-
47-
try:
48-
self.node.assemble()
49-
except RefactorRequest as request:
50-
await self.execute_refactor(request)
51-
except Exception as e:
52-
error_message = traceback.format_exc()
53-
logger.error(error_message)
54-
await self.rollback(error_message)
55-
sys.exit(0)
56-
57-
for path in self.node.files:
58-
self.observer.schedule(self, path, recursive=False)
59-
60-
self.observer.start()
61-
62-
try:
63-
await self.generate_stl()
64-
except RefactorRequest as request:
65-
await self.execute_refactor(request)
66-
except Exception as e:
67-
error_message = traceback.format_exc()
68-
logger.error(error_message)
69-
await self.rollback(error_message)
70-
sys.exit(0)
36+
try:
37+
self.node = load_node(self.path)
38+
except Exception as e:
39+
error_message = traceback.format_exc()
40+
logger.error(error_message)
41+
await self.report_error(error_message)
42+
sys.exit(0)
43+
44+
try:
45+
self.node.assemble()
46+
except RefactorRequest as request:
47+
await self.execute_refactor(request)
48+
except Exception as e:
49+
error_message = traceback.format_exc()
50+
logger.error(error_message)
51+
await self.report_error(error_message)
52+
sys.exit(0)
53+
54+
for path in self.node.files:
55+
self.observer.schedule(self, path, recursive=False)
56+
57+
self.observer.start()
58+
59+
try:
60+
await self.generate_stl()
61+
except RefactorRequest as request:
62+
await self.execute_refactor(request)
63+
except Exception as e:
64+
error_message = traceback.format_exc()
65+
logger.error(error_message)
66+
await self.report_error(error_message)
67+
sys.exit(0)
7168

7269
await self.file_changed
7370
sys.exit(0)
@@ -79,7 +76,7 @@ async def execute_refactor(self, request):
7976
except Exception as e:
8077
error_message = traceback.format_exc()
8178
logger.error(error_message)
82-
await self.rollback(f"Could not execute refactor\n\n{error_message}")
79+
await self.report_error(f"Could not execute refactor\n\n{error_message}")
8380

8481
async def generate_stl(self):
8582
try:
@@ -91,12 +88,12 @@ async def generate_stl(self):
9188
logger.info(f"{job.stl_file} done!")
9289
sys.exit(0)
9390

94-
async def rollback(self, error_message):
91+
async def report_error(self, error_message):
9592
await self.broker.put('build_error', {
9693
'error': error_message,
9794
'tstamp': time.time(),
9895
})
99-
self.repo.revert_last_commit()
96+
await self.file_changed
10097
sys.exit(0)
10198

10299
def on_modified(self, event):

solid_node/core/git.py

Lines changed: 7 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,26 @@
33
import logging
44
import websockets
55
from git import Repo, InvalidGitRepositoryError, NoSuchPathError, GitCommandError
6-
from solid_node.core.broker import LOCK_URL
6+
from solid_node.core.broker import AsyncLock, SyncLock
77

88
logger = logging.getLogger('core.git')
99

1010

1111
class GitRepo:
12-
"""Manages a git repository for user's project. Every time
13-
user saves a file, the repository is commited, and if the
14-
build fails, it's rolled back."""
12+
"""Manages a git repository for user's project.
13+
It was used for browser's code editor, now it's
14+
not in use.
15+
"""
1516
def __init__(self, file_path):
1617
self.repo = _find_repo_root(file_path)
1718
self._lock = None
1819

1920
def async_lock(self, source):
20-
self._lock = RepoAsyncLock(source)
21+
self._lock = AsyncLock(source)
2122
return self._lock
2223

2324
def sync_lock(self, source):
24-
self._lock = RepoSyncLock(source)
25+
self._lock = SyncLock(source)
2526
return self._lock
2627

2728
@property
@@ -49,57 +50,6 @@ def _assert_lock(self, operation):
4950
logger.debug(f'{operation} by {self._lock.source}')
5051

5152

52-
class RepoAsyncLock:
53-
54-
def __init__(self, source):
55-
self.source = source
56-
self.locked = False
57-
58-
async def __aenter__(self):
59-
await self.acquire_lock()
60-
self.locked = True
61-
62-
async def __aexit__(self, exc_type, exc_val, exc_tb):
63-
await self.release_lock()
64-
self.locked = False
65-
66-
async def acquire_lock(self):
67-
async with websockets.connect(LOCK_URL) as websocket:
68-
await websocket.send("acquire")
69-
await websocket.recv()
70-
logger.info(f'LOCK from {self.source} ')
71-
72-
async def release_lock(self):
73-
async with websockets.connect(LOCK_URL) as websocket:
74-
await websocket.send("release")
75-
await websocket.recv()
76-
logger.info(f'RELEASE from {self.source} ')
77-
78-
79-
class RepoSyncLock:
80-
81-
def __init__(self, source):
82-
self.source = source
83-
self.locked = False
84-
85-
def __enter__(self):
86-
self.acquire_lock()
87-
self.locked = True
88-
return self
89-
90-
def __exit__(self, exc_type, exc_val, exc_tb):
91-
self.release_lock()
92-
self.locked = False
93-
94-
def acquire_lock(self):
95-
# Synchronous code to acquire lock
96-
logger.info(f'SYNC LOCK from {self.source}')
97-
98-
def release_lock(self):
99-
# Synchronous code to release lock
100-
logger.info(f'SYNC RELEASE from {self.source}')
101-
102-
10353
def _find_repo_root(file_path):
10454
"""
10555
Find the root of the Git repository starting from the given file path.

solid_node/core/loader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010

1111
def load_node(path):
1212
if not path.endswith('.py'):
13-
raise Exception("Can only load .py files")
13+
raise Exception(f"Can only load .py files, not {path}")
1414
return load_instance(path, AbstractBaseNode)
1515

1616
def load_test(path):
1717
if not path.endswith('.py'):
18-
raise Exception("Can only load .py files")
18+
raise Exception(f"Can only load .py files, not {path}")
1919

2020
parts = path.split('/')
2121
parts[-1] = f'test_{parts[-1]}'

solid_node/viewers/web/app/public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
work correctly both with client-side routing and a non-root public URL.
2525
Learn how to configure a non-root public URL by running `npm run build`.
2626
-->
27-
<title>React App</title>
27+
<title>Solid Node</title>
2828
</head>
2929
<body>
3030
<noscript>You need to enable JavaScript to run this app.</noscript>

solid_node/viewers/web/app/src/App.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
}
99

1010
.top {
11+
width: 100%;
12+
height: 50px;
13+
}
14+
15+
.body {
1116
display: flex;
1217
flex: 1;
1318
}

solid_node/viewers/web/app/src/App.tsx

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ import * as THREE from 'three';
33
import './App.css';
44
import { Resizable } from 're-resizable';
55
import { STLViewer, STLViewerHandles } from './viewer/STLViewer';
6-
//import { ControlCube } from './viewer/ControlCube';
6+
import { ControlCube } from './viewer/ControlCube';
77
//import { NodeProvider } from './context';
88
import { RotationControl } from './viewer/viewer.d';
99
import { BrowserRouter as Router } from 'react-router-dom';
1010
import { Node, Context, loadNode } from './node';
1111
import { Reloader } from './reloader';
1212
import { Animator } from './animator';
13-
import CodeEditor from './CodeEditor';
1413
import NavigationTree from './NavigationTree';
1514

1615

@@ -71,34 +70,15 @@ const App = () => {
7170
};
7271
*/
7372

74-
const fontSize = 15;
75-
7673
return (
7774
<Router>
7875
<div className="app">
7976
<div className="top">
77+
</div>
78+
<div className="body">
8079
<Resizable
81-
defaultSize={{ width: '12%', height: '100%' }}
8280
className="pane left"
83-
enable={{ right: true }}
84-
>
85-
<NavigationTree />
86-
</Resizable>
87-
88-
<Resizable
89-
className="pane center"
90-
defaultSize={{ width: '46.4%', height: '100%' }}
91-
enable={{ right: true }}
92-
>
93-
<CodeEditor
94-
node={node}
95-
fontSize={fontSize}
96-
/>
97-
</Resizable>
98-
99-
<Resizable
100-
className="pane right"
101-
defaultSize={{ width: '41.6%', height: '100%' }}
81+
defaultSize={{ width: '80%', height: '100%' }}
10282
enable={{ right: true }}
10383
>
10484
{!error &&
@@ -123,11 +103,14 @@ const App = () => {
123103
*/}
124104
</div>
125105
</Resizable>
106+
<Resizable
107+
defaultSize={{ width: '20%', height: '100%' }}
108+
className="pane right"
109+
enable={{ right: true }}
110+
>
111+
<NavigationTree />
112+
</Resizable>
126113
</div>
127-
128-
<Resizable defaultSize={{ width: '100%', height: '30%' }} className="pane bottom">
129-
<h3>Console</h3>
130-
</Resizable>
131114
</div>
132115
</Router>
133116
);

0 commit comments

Comments
 (0)