Skip to content

Commit 7258f6f

Browse files
committed
Merge branch 'rest_server'
2 parents 9ca434d + 68af39f commit 7258f6f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+10181
-1016
lines changed

.appveyor.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,11 @@ install:
5555
# Install Python packages
5656
- cmd: "%PIP3% install pyinstaller"
5757
- cmd: "%PIP3% install mkdocs"
58+
#- cmd: "%PIP3% install pydocstyle"
5859
- cmd: "%PIP3% install coverage"
60+
- cmd: "%PIP3% install requests"
5961
- cmd: "%PIP% install coverage"
62+
- cmd: "%PIP% install requests"
6063
- cmd: "%PIP% install mock"
6164
- cmd: "%PIP% freeze"
6265
- cmd: "%PIP3% freeze"
@@ -82,6 +85,7 @@ test_script:
8285
- cmd: "%PYTHON%\\python -m coverage report"
8386
- cmd: "%PYTHON3%\\python -m coverage run ardublocklyserver\\tests\\run_all.py"
8487
- cmd: "%PYTHON3%\\python -m coverage report"
88+
#- cmd: pydocstyle ardublocklyserver --match-dir='ardublocklyserver'
8589

8690
# Push artefact to S3 bucket and list all
8791
before_deploy:

.coveragerc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[run]
2+
branch = False
3+
cover_pylib = False
4+
source = ardublocklyserver/
5+
omit =
6+
ardublocklyserver/tests/*
7+
ardublocklyserver/local-packages/*
8+
ardublocklyserver/pyserialports/*
9+
10+
[report]
11+
show_missing = True
12+
skip_covered = False
13+
exclude_lines =
14+
# Don't complain if non-runnable code isn't run:
15+
if 0:
16+
if __name__ == .__main__.:

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,11 @@ before_install:
3636
# Install Python packages (built with Python 3, tests for 2 and 3)
3737
- sudo python -m pip install mock
3838
- sudo python -m pip install coverage
39+
- sudo python -m pip install requests
3940
- pip3 install coverage
41+
- pip3 install requests
4042
- pip3 install coveralls
43+
#- pip3 install pydocstyle
4144
- pip3 install mkdocs
4245
- pip3 install pyinstaller
4346

@@ -77,6 +80,7 @@ script:
7780
- python -m coverage report
7881
- python3 -m coverage run ardublocklyserver/tests/run_all.py
7982
- python3 -m coverage report
83+
#- pydocstyle ardublocklyserver --match-dir='ardublocklyserver'
8084

8185
after_success:
8286
- coveralls

ardublockly/ardublockly.js

Lines changed: 65 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ Ardublockly.init = function() {
2626
Ardublockly.bindActionFunctions();
2727
Ardublockly.bindBlocklyEventListeners();
2828

29-
// Check if not running locally
30-
if (document.location.hostname != 'localhost') {
29+
// Hackish way to check if not running locally
30+
if (document.location.hostname != '127.0.0.1') {
3131
Ardublockly.openNotConnectedModal();
3232
}
3333
};
@@ -92,12 +92,16 @@ Ardublockly.bindActionFunctions = function() {
9292

9393
// Settings modal input field listeners
9494
Ardublockly.bindClick_('settings_compiler_location', function() {
95-
ArdublocklyServer.requestNewCompilerLocation(
96-
Ardublockly.setCompilerLocationHtml);
95+
ArdublocklyServer.requestNewCompilerLocation(function(jsonObj) {
96+
Ardublockly.setCompilerLocationHtml(
97+
ArdublocklyServer.jsonToHtmlTextInput(jsonObj));
98+
});
9799
});
98100
Ardublockly.bindClick_('settings_sketch_location', function() {
99-
ArdublocklyServer.requestNewSketchLocation(
100-
Ardublockly.setSketchLocationHtml);
101+
ArdublocklyServer.requestNewSketchLocation(function(jsonObj) {
102+
Ardublockly.setSketchLocationHtml(
103+
ArdublocklyServer.jsonToHtmlTextInput(jsonObj));
104+
});
101105
});
102106
};
103107

@@ -154,14 +158,9 @@ Ardublockly.initialiseIdeButtons = function() {
154158
Ardublockly.getLocalStr('verifySketch');
155159
document.getElementById('button_ide_large').title =
156160
Ardublockly.getLocalStr('uploadSketch');
157-
ArdublocklyServer.requestIdeOptions(function(jsonResponse) {
158-
if (jsonResponse != null) {
159-
var parsedJson = JSON.parse(jsonResponse);
160-
// "response_type" : "settings_board",
161-
// "element" : "dropdown",
162-
// "options" : [ {"value" : "XXX", "text" : "XXX"}, ...]
163-
// "selected": "selected key"}
164-
Ardublockly.changeIdeButtons(parsedJson.selected);
161+
ArdublocklyServer.requestIdeOptions(function(jsonObj) {
162+
if (jsonObj != null) {
163+
Ardublockly.changeIdeButtons(jsonObj.selected);
165164
} // else Null: Ardublockly server is not running, do nothing
166165
});
167166
};
@@ -325,12 +324,25 @@ Ardublockly.saveTextFileAs = function(fileName, content) {
325324
* and opens the Settings modal dialog.
326325
*/
327326
Ardublockly.openSettings = function() {
328-
ArdublocklyServer.requestCompilerLocation(
329-
Ardublockly.setCompilerLocationHtml);
330-
ArdublocklyServer.requestSketchLocation(Ardublockly.setSketchLocationHtml);
331-
ArdublocklyServer.requestArduinoBoards(Ardublockly.setArduinoBoardsHtml);
332-
ArdublocklyServer.requestSerialPorts(Ardublockly.setSerialPortsHtml);
333-
ArdublocklyServer.requestIdeOptions(Ardublockly.setIdeHtml);
327+
ArdublocklyServer.requestCompilerLocation(function(jsonObj) {
328+
Ardublockly.setCompilerLocationHtml(
329+
ArdublocklyServer.jsonToHtmlTextInput(jsonObj));
330+
});
331+
ArdublocklyServer.requestSketchLocation(function(jsonObj) {
332+
Ardublockly.setSketchLocationHtml(
333+
ArdublocklyServer.jsonToHtmlTextInput(jsonObj));
334+
});
335+
ArdublocklyServer.requestArduinoBoards(function(jsonObj) {
336+
Ardublockly.setArduinoBoardsHtml(
337+
ArdublocklyServer.jsonToHtmlDropdown(jsonObj));
338+
});
339+
ArdublocklyServer.requestSerialPorts(function(jsonObj) {
340+
Ardublockly.setSerialPortsHtml(
341+
ArdublocklyServer.jsonToHtmlDropdown(jsonObj));
342+
});
343+
ArdublocklyServer.requestIdeOptions(function(jsonObj) {
344+
Ardublockly.setIdeHtml(ArdublocklyServer.jsonToHtmlDropdown(jsonObj));
345+
});
334346
// Language menu only set on page load within Ardublockly.initLanguage()
335347
Ardublockly.openSettingsModal();
336348
};
@@ -340,11 +352,11 @@ Ardublockly.openSettings = function() {
340352
* @param {element} jsonResponse JSON data coming back from the server.
341353
* @return {undefined} Might exit early if response is null.
342354
*/
343-
Ardublockly.setCompilerLocationHtml = function(jsonResponse) {
344-
if (jsonResponse === null) return Ardublockly.openNotConnectedModal();
345-
var newEl = ArdublocklyServer.createElementFromJson(jsonResponse);
355+
Ardublockly.setCompilerLocationHtml = function(newEl) {
356+
if (newEl === null) return Ardublockly.openNotConnectedModal();
357+
346358
var compLocIp = document.getElementById('settings_compiler_location');
347-
if (compLocIp != null) {
359+
if (compLocIp != null && newEl.value) {
348360
compLocIp.value = newEl.value;
349361
}
350362
};
@@ -354,9 +366,9 @@ Ardublockly.setCompilerLocationHtml = function(jsonResponse) {
354366
* @param {element} jsonResponse JSON data coming back from the server.
355367
* @return {undefined} Might exit early if response is null.
356368
*/
357-
Ardublockly.setSketchLocationHtml = function(jsonResponse) {
358-
if (jsonResponse === null) return Ardublockly.openNotConnectedModal();
359-
var newEl = ArdublocklyServer.createElementFromJson(jsonResponse);
369+
Ardublockly.setSketchLocationHtml = function(newEl) {
370+
if (newEl === null) return Ardublockly.openNotConnectedModal();
371+
360372
var sketchLocIp = document.getElementById('settings_sketch_location');
361373
if (sketchLocIp != null) {
362374
sketchLocIp.value = newEl.value;
@@ -366,12 +378,12 @@ Ardublockly.setSketchLocationHtml = function(jsonResponse) {
366378
/**
367379
* Replaces the Arduino Boards form data with a new HTMl element.
368380
* Ensures there is a change listener to call 'setSerialPort' function
369-
* @param {element} jsonResponse JSON data coming back from the server.
381+
* @param {element} jsonObj JSON data coming back from the server.
370382
* @return {undefined} Might exit early if response is null.
371383
*/
372-
Ardublockly.setArduinoBoardsHtml = function(jsonResponse) {
373-
if (jsonResponse === null) return Ardublockly.openNotConnectedModal();
374-
var newEl = ArdublocklyServer.createElementFromJson(jsonResponse);
384+
Ardublockly.setArduinoBoardsHtml = function(newEl) {
385+
if (newEl === null) return Ardublockly.openNotConnectedModal();
386+
375387
var boardDropdown = document.getElementById('board');
376388
if (boardDropdown !== null) {
377389
// Restarting the select elements built by materialize
@@ -391,9 +403,10 @@ Ardublockly.setArduinoBoardsHtml = function(jsonResponse) {
391403
Ardublockly.setBoard = function() {
392404
var el = document.getElementById('board');
393405
var boardValue = el.options[el.selectedIndex].value;
394-
//TODO: Check how ArdublocklyServer deals with invalid data and sanitise
395-
ArdublocklyServer.setArduinoBoard(
396-
boardValue, Ardublockly.setArduinoBoardsHtml);
406+
ArdublocklyServer.setArduinoBoard(boardValue, function(jsonObj) {
407+
var newEl = ArdublocklyServer.jsonToHtmlDropdown(jsonObj);
408+
Ardublockly.setArduinoBoardsHtml(newEl);
409+
});
397410
Ardublockly.changeBlocklyArduinoBoard(
398411
boardValue.toLowerCase().replace(/ /g, '_'));
399412
};
@@ -404,9 +417,9 @@ Ardublockly.setBoard = function() {
404417
* @param {element} jsonResponse JSON data coming back from the server.
405418
* @return {undefined} Might exit early if response is null.
406419
*/
407-
Ardublockly.setSerialPortsHtml = function(jsonResponse) {
408-
if (jsonResponse === null) return Ardublockly.openNotConnectedModal();
409-
var newEl = ArdublocklyServer.createElementFromJson(jsonResponse);
420+
Ardublockly.setSerialPortsHtml = function(newEl) {
421+
if (newEl === null) return Ardublockly.openNotConnectedModal();
422+
410423
var serialDropdown = document.getElementById('serial_port');
411424
if (serialDropdown !== null) {
412425
// Restarting the select elements built by materialize
@@ -424,9 +437,10 @@ Ardublockly.setSerialPortsHtml = function(jsonResponse) {
424437
Ardublockly.setSerial = function() {
425438
var el = document.getElementById('serial_port');
426439
var serialValue = el.options[el.selectedIndex].value;
427-
//TODO: check how ArdublocklyServer deals with invalid data and sanitise
428-
ArdublocklyServer.setSerialPort(
429-
serialValue, Ardublockly.setSerialPortsHtml);
440+
ArdublocklyServer.setSerialPort(serialValue, function(jsonObj) {
441+
var newEl = ArdublocklyServer.jsonToHtmlDropdown(jsonObj);
442+
Ardublockly.setSerialPortsHtml(newEl);
443+
});
430444
};
431445

432446
/**
@@ -435,9 +449,9 @@ Ardublockly.setSerial = function() {
435449
* @param {element} jsonResponse JSON data coming back from the server.
436450
* @return {undefined} Might exit early if response is null.
437451
*/
438-
Ardublockly.setIdeHtml = function(jsonResponse) {
439-
if (jsonResponse === null) return Ardublockly.openNotConnectedModal();
440-
var newEl = ArdublocklyServer.createElementFromJson(jsonResponse);
452+
Ardublockly.setIdeHtml = function(newEl) {
453+
if (newEl === null) return Ardublockly.openNotConnectedModal();
454+
441455
var ideDropdown = document.getElementById('ide_settings');
442456
if (ideDropdown !== null) {
443457
// Restarting the select elements built by materialize
@@ -466,8 +480,9 @@ Ardublockly.setIdeSettings = function(e, preset) {
466480
var ideValue = el.options[el.selectedIndex].value;
467481
}
468482
Ardublockly.changeIdeButtons(ideValue);
469-
//TODO: check how ArdublocklyServer deals with invalid data and sanitise here
470-
ArdublocklyServer.setIdeOptions(ideValue, Ardublockly.setIdeHtml);
483+
ArdublocklyServer.setIdeOptions(ideValue, function(jsonObj) {
484+
Ardublockly.setIdeHtml(ArdublocklyServer.jsonToHtmlDropdown(jsonObj));
485+
});
471486
};
472487

473488
/**
@@ -483,10 +498,10 @@ Ardublockly.sendCode = function() {
483498
* @param {element} jsonResponse JSON data coming back from the server.
484499
* @return {undefined} Might exit early if response is null.
485500
*/
486-
var sendCodeReturn = function(jsonResponse) {
501+
var sendCodeReturn = function(jsonObj) {
487502
Ardublockly.largeIdeButtonSpinner(false);
488-
if (jsonResponse === null) return Ardublockly.openNotConnectedModal();
489-
var dataBack = ArdublocklyServer.createElementFromJson(jsonResponse);
503+
if (jsonObj === null) return Ardublockly.openNotConnectedModal();
504+
var dataBack = ArdublocklyServer.jsonToIdeModal(jsonObj);
490505
Ardublockly.arduinoIdeOutput(dataBack);
491506
};
492507

@@ -639,7 +654,7 @@ Ardublockly.importExtraBlocks = function() {
639654
};
640655
// Reads the JSON data containing all block categories from ./blocks directory
641656
// TODO: Now reading a local file, to be replaced by server generated JSON
642-
Ardublockly.getJsonData('../blocks/blocks_data.json', jsonDataCb);
657+
ArdublocklyServer.getJson('../blocks/blocks_data.json', jsonDataCb);
643658
};
644659

645660
/** Opens a modal with a list of categories to add or remove to the toolbox */
@@ -675,7 +690,7 @@ Ardublockly.openExtraCategoriesSelect = function() {
675690
};
676691
// Reads the JSON data containing all block categories from ./blocks directory
677692
// TODO: Now reading a local file, to be replaced by server generated JSON
678-
Ardublockly.getJsonData('../blocks/blocks_data.json', jsonDataCb);
693+
ArdublocklyServer.getJson('../blocks/blocks_data.json', jsonDataCb);
679694
};
680695

681696
/** Informs the user that the selected function is not yet implemented. */

ardublockly/ardublockly_lang.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ Ardublockly.injectLanguageJsSources = function(langKey) {
124124

125125
// Retrieve and inject Ardublockly translations synchronously
126126
var appLangJsLoad = document.createElement('script');
127-
var request = ArdublocklyServer.createAjaxRequest();
127+
var request = ArdublocklyServer.createRequest();
128128
var appLangJdPath = 'msg/' + langKey + '.js';
129129
try {
130130
request.open('GET', appLangJdPath, false);

0 commit comments

Comments
 (0)