Skip to content

Commit 0bc43eb

Browse files
committed
Merge pull request #34 in LCL/wolframengineforpython from feature/client_max_size to master
* commit '5c8a04ddca3c29f7a79a24f577d879d3fc69e5b3': changing initfile description adding documentation for --domain adding doc for custom init file automatic code lint bumping version adding maximum amount for client size
2 parents 09766bb + 5c8a04d commit 0bc43eb

File tree

12 files changed

+92
-8
lines changed

12 files changed

+92
-8
lines changed

README.md

+41
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,34 @@ Index index.wl
295295
(Press CTRL+C to quit)
296296
```
297297

298+
#### --domain DOMAIN
299+
300+
Allows you to specify the DOMAIN of the webserver. By default the webserver only listens to localhost, use `0.0.0.0` to listen on all network interfaces.
301+
302+
```
303+
>>> python3 -m wolframwebengine --domain 0.0.0.0
304+
----------------------------------------------------------------------
305+
Address http://0.0.0.0:18000/
306+
Folder /Users/rdv/Desktop
307+
Index index.wl
308+
----------------------------------------------------------------------
309+
(Press CTRL+C to quit)
310+
```
311+
312+
#### --initfile FILE
313+
314+
Allows you to specify a custom file containing code to be run when a new kernel is started
315+
316+
```
317+
>>> python3 -m wolframwebengine --initfile myinit.m
318+
----------------------------------------------------------------------
319+
Address http://localhost:18000/
320+
Folder /Users/rdv/Desktop
321+
Index index.wl
322+
----------------------------------------------------------------------
323+
(Press CTRL+C to quit)
324+
```
325+
298326
#### --kernel KERNEL
299327

300328
Allows you to specify the Kernel path
@@ -345,6 +373,19 @@ Kernel 511 is ready. Startup took 35.43 seconds.
345373
If the option is present the server will wait for the first request to spawn the kernels, instead of spawning them immediately.
346374

347375

376+
#### --client_max_size MB
377+
378+
The maximum amount of megabytes allowed for file upload. Defaults to 10.
379+
```
380+
>>> python3 -m wolframwebengine --client_max_size 150
381+
----------------------------------------------------------------------
382+
Address http://localhost:18000/
383+
Folder /Users/rdv/Desktop
384+
Index index.wl
385+
----------------------------------------------------------------------
386+
(Press CTRL+C to quit)
387+
```
388+
348389
## Integrating an existing application
349390

350391
Wolfram Web Engine for Python can be used to augment an existing python application instead of creating a new one.

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def load_tests():
2222

2323
setup(
2424
name = 'wolframwebengine',
25-
version = '1.0.2',
25+
version = '1.0.3',
2626
description = 'A Python library with various tools to start a wolfram engine a server content.',
2727
keywords=['Wolfram Language', 'Wolfram Desktop', 'Mathematica', 'Web Development', 'Wolfram Web Engine'],
2828
author = 'Wolfram Research, Riccardo Di Virgilio',

wolframwebengine/cli/commands/runserver.py

+41-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from wolframclient.utils.decorators import cached_property, to_dict
1313
from wolframclient.utils.functional import first
1414
from wolframclient.utils.importutils import module_path
15+
1516
from wolframwebengine.server.app import create_session, create_view, is_wl_code
1617

1718

@@ -46,7 +47,7 @@ def add_arguments(self, parser):
4647
default=20,
4748
help="Startup timeout (in seconds) for kernels in the pool.",
4849
type=int,
49-
metavar="SECONDS"
50+
metavar="SECONDS",
5051
)
5152
parser.add_argument(
5253
"--cached",
@@ -72,6 +73,14 @@ def add_arguments(self, parser):
7273
choices=tuple(self.demo_choices.keys()),
7374
)
7475

76+
parser.add_argument(
77+
"--client_max_size",
78+
default=10,
79+
dest="client_max_size",
80+
help="Maximum size of client uploads, in Mb",
81+
type=float,
82+
)
83+
7584
def print_line(self, f="", s=""):
7685
self.print(f.ljust(15), s)
7786

@@ -95,29 +104,55 @@ def demo_choices(self):
95104
def demo_path(self, *args):
96105
return module_path("wolframwebengine", "examples", "demo", *args)
97106

98-
def handle(self, domain, port, path, kernel, poolsize, lazy, index, demo, initfile, startuptimeout, **opts):
107+
def handle(
108+
self,
109+
domain,
110+
port,
111+
path,
112+
kernel,
113+
poolsize,
114+
lazy,
115+
index,
116+
demo,
117+
initfile,
118+
startuptimeout,
119+
client_max_size,
120+
**opts
121+
):
99122

100123
if demo is None or demo:
101124
path = self.demo_path(self.demo_choices[demo])
102125

103126
path = os.path.abspath(os.path.expanduser(path))
104127

128+
client_max_size = int(client_max_size * (1024 ** 2))
129+
105130
try:
106-
session = create_session(kernel,
107-
poolsize=poolsize, initfile=initfile,
108-
STARTUP_TIMEOUT=startuptimeout
131+
session = create_session(
132+
kernel, poolsize=poolsize, initfile=initfile, STARTUP_TIMEOUT=startuptimeout
109133
)
110134

111135
except WolframKernelException as e:
112136
self.print(e)
113137
self.print("Use --help to display all available options.")
114138
sys.exit(1)
115139

140+
loop = asyncio.get_event_loop()
141+
116142
async def main():
117143

118144
view = create_view(session, path, index=index, **opts)
119145

120-
runner = self.ServerRunner(self.Server(view, access_log_class=self.AccessLogger))
146+
def request_factory(*args, **opts):
147+
return web.BaseRequest(
148+
*args, **opts, client_max_size=client_max_size, loop=loop
149+
)
150+
151+
runner = self.ServerRunner(
152+
self.Server(
153+
view, access_log_class=self.AccessLogger, request_factory=request_factory
154+
)
155+
)
121156
await runner.setup()
122157
await self.TCPSite(runner, domain, port).start()
123158

@@ -160,7 +195,6 @@ async def main():
160195
while True:
161196
await asyncio.sleep(3600)
162197

163-
loop = asyncio.get_event_loop()
164198
try:
165199
loop.run_until_complete(main())
166200
except KeyboardInterrupt:

wolframwebengine/examples/aiohttp_application.py

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from aiohttp import web
44
from wolframclient.evaluation import WolframEvaluatorPool
55
from wolframclient.language import wl
6+
67
from wolframwebengine.web import aiohttp_wl_view
78

89
session = WolframEvaluatorPool(poolsize=4)

wolframwebengine/examples/djangoapp/urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.urls import path
55
from wolframclient.evaluation import WolframLanguageSession
66
from wolframclient.language import wl
7+
78
from wolframwebengine.web import django_wl_view
89

910
session = WolframLanguageSession()

wolframwebengine/server/app.py

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from wolframclient.evaluation import WolframEvaluatorPool, WolframLanguageAsyncSession
88
from wolframclient.language import wl
99
from wolframclient.utils.functional import last
10+
1011
from wolframwebengine.server.explorer import get_wl_handler_path_from_folder
1112
from wolframwebengine.web import aiohttp_wl_view
1213

wolframwebengine/tests/application_aiohttp.py

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from wolframclient.language import wl
99
from wolframclient.utils.functional import first
1010
from wolframclient.utils.importutils import module_path
11+
1112
from wolframwebengine.server.app import create_session, create_view
1213
from wolframwebengine.web import aiohttp_wl_view
1314
from wolframwebengine.web.utils import auto_wait

wolframwebengine/tests/application_django.py

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from wolframclient.utils.api import json
66
from wolframclient.utils.functional import first
77
from wolframclient.utils.tests import TestCase as BaseTestCase
8+
89
from wolframwebengine.web.utils import auto_wait
910

1011

wolframwebengine/tests/folder_explorer.py

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from wolframclient.utils.importutils import module_path
66
from wolframclient.utils.tests import TestCase as BaseTestCase
7+
78
from wolframwebengine.server.explorer import get_wl_handler_path_from_folder
89

910

wolframwebengine/web/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from functools import partial
44

55
from wolframclient.utils.importutils import API
6+
67
from wolframwebengine.web.utils import is_coroutine_function
78

89
available_backends = API(

wolframwebengine/web/aiohttp.py

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from wolframclient.utils.api import aiohttp
77
from wolframclient.utils.decorators import to_dict
88
from wolframclient.utils.encoding import force_text
9+
910
from wolframwebengine.web.utils import (
1011
make_generate_httpresponse_expression,
1112
process_generate_httpresponse_expression,

wolframwebengine/web/django.py

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from wolframclient.language import wl
88
from wolframclient.utils.decorators import to_dict
99
from wolframclient.utils.functional import first, iterate, last
10+
1011
from wolframwebengine.web.utils import (
1112
auto_wait,
1213
make_generate_httpresponse_expression,

0 commit comments

Comments
 (0)