Skip to content

Commit 982d950

Browse files
author
Lucas Rebscher
authored
Merge pull request #365 from MetaCell/feature/201_fix_filename_export
Feature/201 fix filename export
2 parents 6dddc03 + fca916d commit 982d950

4 files changed

Lines changed: 43 additions & 32 deletions

File tree

netpyne_ui/netpyne_geppetto.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import subprocess
1010
import logging
1111
import re
12+
import base64
1213

1314
from netpyne import specs, sim, analysis
1415
from netpyne.specs.utils import validateFunction
@@ -593,42 +594,51 @@ def header(title, spacer='-'):
593594
params = ['popParams', 'cellParams', 'synMechParams']
594595
params += ['connParams', 'stimSourceParams', 'stimTargetParams']
595596

596-
fname = args['fileName'] if args['fileName'][-3:] == '.py' else args['fileName'] + '.py'
597+
fname = args['fileName']
598+
if not fname:
599+
# default option
600+
fname = 'output.py'
601+
602+
if not fname[-3:] == '.py':
603+
fname = f"{fname}.py"
597604

605+
# TODO: use methods offered by netpyne to create this script!
598606
with open(fname, 'w') as script:
599-
script.write('from netpyne import specs, sim\n')
600-
script.write(header('documentation'))
601-
script.write("''' Script generated with NetPyNE-UI. Please visit:\n")
602-
script.write(" - https://www.netpyne.org\n - https://github.com/MetaCell/NetPyNE-UI\n'''\n")
603-
script.write(header('script', spacer='='))
604-
script.write('netParams = specs.NetParams()\n')
605-
script.write('simConfig = specs.SimConfig()\n')
606-
script.write(header('single value attributes'))
607+
script.write("from netpyne import specs, sim\n")
608+
script.write(header("documentation"))
609+
script.write("Script generated with NetPyNE-UI. Please visit:\n")
610+
script.write(" - https://www.netpyne.org\n - https://github.com/MetaCell/NetPyNE-UI\n\n")
611+
script.write(header("script", spacer="="))
612+
script.write("netParams = specs.NetParams()\n")
613+
script.write("simConfig = specs.SimConfig()\n")
614+
script.write(header("single value attributes"))
607615
for attr, value in list(self.netParams.__dict__.items()):
608616
if attr not in params:
609617
if value != getattr(specs.NetParams(), attr):
610-
script.write('netParams.' + attr + ' = ')
611-
script.write(convert2bool(json.dumps(value, indent=4)) + '\n')
618+
script.write("netParams." + attr + " = ")
619+
script.write(convert2bool(json.dumps(value, indent=4)) + "\n")
612620

613-
script.write(header('network attributes'))
621+
script.write(header("network attributes"))
614622
for param in params:
615623
for key, value in list(getattr(self.netParams, param).items()):
616-
script.write("netParams." + param + "['" + key + "'] = ")
617-
script.write(convert2bool(json.dumps(value, indent=4)) + '\n')
624+
script.write("netParams." + param + "[" + key + "] = ")
625+
script.write(convert2bool(json.dumps(value, indent=4)) + "\n")
618626

619-
script.write(header('network configuration'))
627+
script.write(header("network configuration"))
620628
for attr, value in list(self.simConfig.__dict__.items()):
621629
if value != getattr(specs.SimConfig(), attr):
622-
script.write('simConfig.' + attr + ' = ')
623-
script.write(convert2bool(json.dumps(value, indent=4)) + '\n')
630+
script.write("simConfig." + attr + " = ")
631+
script.write(convert2bool(json.dumps(value, indent=4)) + "\n")
624632

625-
script.write(header('create simulate analyze network'))
626-
script.write('# sim.createSimulateAnalyze(netParams=netParams, simConfig=simConfig)\n')
633+
script.write(header("create simulate analyze network"))
634+
script.write("# sim.createSimulateAnalyze(netParams=netParams, simConfig=simConfig)\n")
627635

628-
script.write(header('end script', spacer='='))
636+
script.write(header("end script", spacer="="))
629637

630638
with open(fname) as f:
631-
return f.read()
639+
file_b64 = base64.b64encode(bytes(f.read(), 'utf-8')).decode()
640+
export_info = {"fileContent": file_b64, "fileName": fname}
641+
return export_info
632642

633643
except:
634644
return utils.getJSONError("Error while importing the NetPyNE model", sys.exc_info())

webapp/package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webapp/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"@material-ui/icons": "^4.9.1",
2020
"@material-ui/lab": "^4.0.0-alpha.51",
2121
"jquery": "^3.6.0",
22+
"js-base64": "^3.6.1",
2223
"less-vars-to-js": "^1.3.0",
2324
"react": "^17.0.1",
2425
"react-dom": "^16.4.0",

webapp/redux/middleware/utils.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
1-
const createFileName = (name) => name + getTimeStamp();
1+
import { Base64 } from 'js-base64';
22

33
const getTimeStamp = () => new Date().toGMTString().replace(',', '').replace(/[ ,:]/g, '_');
44

5-
const unescapeText = (text) => {
6-
const unescaped = text.replace(/\\\\/g, '\\').replace(/\\'/g, "'").replace(/\\"/g, '"').split('\\n')
7-
.join('\n')
8-
.substring(1);
9-
return unescaped.substring(0, unescaped.length - 1);
10-
};
5+
const createFileName = (name) => name + getTimeStamp();
116

127
const forceBlobDownload = (blob, filename) => {
138
const url = window.URL.createObjectURL(blob);
@@ -32,8 +27,8 @@ export const downloadJsonResponse = (jsonData) => {
3227
forceBlobDownload(blob, filename);
3328
};
3429

35-
export const downloadPythonResponse = (textData) => {
36-
const filename = `${createFileName('NetPyNE_init_')}.py`;
37-
const blob = new Blob([unescapeText(textData)], { type: 'text/plain;charset=utf-8' });
38-
forceBlobDownload(blob, filename);
30+
export const downloadPythonResponse = (exportInfo) => {
31+
const content = Base64.decode(exportInfo.fileContent);
32+
const blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
33+
forceBlobDownload(blob, exportInfo.fileName);
3934
};

0 commit comments

Comments
 (0)