Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
ardublockly
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
ardublockly
Commits
af716146
Commit
af716146
authored
Apr 25, 2017
by
carlosperate
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update formatting of server std output
parent
dc9b6563
Changes
2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
92 deletions
+84
-92
ardublocklyserver/compilersettings.py
ardublocklyserver/compilersettings.py
+48
-55
start.py
start.py
+36
-37
No files found.
ardublocklyserver/compilersettings.py
View file @
af716146
This diff is collapsed.
Click to expand it.
start.py
View file @
af716146
#!/usr/bin/env python
2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Entry point for the ArdublocklyServer application.
#
# Copyright (c) 201
5
carlosperate https://github.com/carlosperate/
# Copyright (c) 201
7
carlosperate https://github.com/carlosperate/
# Licensed under the Apache License, Version 2.0 (the "License"):
# http://www.apache.org/licenses/LICENSE-2.0
#
from
__future__
import
unicode_literals
,
absolute_import
from
__future__
import
unicode_literals
,
absolute_import
,
print_function
import
os
import
re
import
sys
...
...
@@ -22,8 +22,9 @@ import ardublocklyserver.compilersettings
def
open_browser
(
open_file
):
"""
Start a browser in a separate thread after waiting for half a second.
"""Start a browser in a separate thread after waiting for half a second.
:param open_file: URL for the browser to open.
"""
def
_open_browser
():
webbrowser
.
get
().
open
(
'http://localhost:%s/%s'
%
...
...
@@ -34,40 +35,37 @@ def open_browser(open_file):
def
find_ardublockly_dir
(
search_path
):
"""
Navigates within each node of a given path and tries to find the Ardublockly
project root directory. It assumes that the project root with have an folder
"""Find the Ardublockly project directory absolute path.
Navigates within each node of given path and tries to find the Ardublockly
project root directory. Assumes that the project root will have an folder
name ardublockly with an index.html file inside.
This function is required because this script can end up in executable form
in different locations of the project folder, and a literal relative path
should not be assumed.
in different locations of the project folder depending on the platform.
:param search_path: Path in which to find the Ardublockly root project
folder.
:return: Path to the Ardublockly root folder.
If not found returns None.
:param search_path: Path starting point to search the Ardublockly project
root folder.
:return: Path to the Ardublockly root folder. If not found returns None.
"""
path_to_navigate
=
os
.
path
.
normpath
(
search_path
)
# Navigate through each path node starting at the bottom until there are
# no folders left
# Navigate through each path node from the bottom up
while
path_to_navigate
:
# Check if file
/ardublo
kly/index.html exists within current path
# Check if file
ardubloc
kly/index.html exists within current path
if
os
.
path
.
isfile
(
os
.
path
.
join
(
path_to_navigate
,
'ardublockly'
,
'index.html'
)):
# Found the right folder
, return it
# Found the right folder
return
path_to_navigate
path_to_navigate
=
os
.
path
.
dirname
(
path_to_navigate
)
# The right folder wasn't found, so return input path
# The right folder wasn't found, so return None to indicate failure
return
None
def
parsing_cl_args
():
"""
Processes the command line arguments. Arguments supported:
"""Process the command line arguments.
Arguments supported:
-h / --help
-s / --serverroot <working directory>
:return: Dictionary with available options(keys) and value(value).
"""
# Set option defaults
...
...
@@ -100,41 +98,42 @@ def parsing_cl_args():
# fails silently maintaining the current working directory.
# Use regular expressions to catch this corner case.
if
re
.
match
(
"^[a-zA-Z]:$"
,
arg
):
print
(
'The windows drive letter needs to end in a slash, '
+
print
(
'The windows drive letter needs to end in a slash, '
'eg. %s
\\
'
%
arg
)
sys
.
exit
(
1
)
# Check if the value is a valid directory
arg
=
os
.
path
.
normpath
(
arg
)
if
os
.
path
.
isdir
(
arg
):
server_root
=
arg
print
(
'Parsed "%s" flag with "%s" value.'
%
(
opt
,
arg
))
print
(
'Parsed "%s" flag with "%s" value.'
%
(
opt
,
arg
))
else
:
print
(
'Invalid directory "'
+
arg
+
'".'
)
sys
.
exit
(
1
)
elif
opt
in
(
'-b'
,
'--nobrowser'
):
launch_browser
=
False
print
(
'Parsed "%s" flag. No browser will be opened.'
%
opt
)
print
(
'Parsed "%s" flag. No browser will be opened.'
%
opt
)
elif
opt
in
(
'-f'
,
'--findprojectroot'
):
find_project_root
=
True
print
(
'Parsed "%s" flag. The ardublockly project root will be '
print
(
'Parsed "%s" flag. The ardublockly project root will be '
'set as the server root directory.'
%
opt
)
else
:
print
(
'Flag
'
+
opt
+
' not recognised.'
)
print
(
'Flag
"%s" not recognised.'
%
opt
)
return
find_project_root
,
launch_browser
,
server_root
def
main
():
"""
"""Main entry point for the application.
Initialises the Settings singleton, resolves paths, and starts the server.
"""
print
(
'Running Python %s (%s bit) on %s'
%
(
platform
.
python_version
(),
(
struct
.
calcsize
(
'P'
)
*
8
),
platform
.
platform
()))
print
(
'
\n
\n
======= Parsing Command line arguments =======
\n
'
)
print
(
'
\n
======= Parsing Command line arguments =======
'
)
find_project_root
,
launch_browser
,
server_root
=
parsing_cl_args
()
print
(
'
\n
\n
======= Resolving server and project paths =======
\n
'
)
print
(
'
\n
======= Resolving server and project paths =======
'
)
# Based on command line options, set the server root to the ardublockly
# project root directory, a directory specified in the arguments, or by
# default to the project root directory.
...
...
@@ -144,7 +143,7 @@ def main():
print
(
'The Ardublockly project root folder could not be found within '
'the %s directory !'
%
this_file_dir
)
sys
.
exit
(
1
)
print
(
"Ardublockly root directory: %s"
%
ardublockly_root_dir
)
print
(
'Ardublockly root directory: %s'
%
ardublockly_root_dir
)
if
find_project_root
is
True
or
server_root
is
None
:
server_root
=
ardublockly_root_dir
...
...
@@ -153,19 +152,19 @@ def main():
if
not
os
.
path
.
commonprefix
([
server_root
,
ardublockly_root_dir
]):
print
(
'The Ardublockly project folder needs to be accessible from '
'the server root directory !'
)
print
(
"Selected server root: %s"
%
server_root
)
print
(
'Selected server root: %s'
%
server_root
)
print
(
'
\n
\n
======= Loading Settings ======='
)
print
(
'
\n
======= Loading Settings ======='
)
# ServerCompilerSettings is a singleton, no need to save instance
ardublocklyserver
.
compilersettings
.
ServerCompilerSettings
(
ardublockly_root_dir
)
print
(
'
\n
\n
======= Starting Server =======
\n
'
)
print
(
'
\n
======= Starting Server =======
'
)
if
launch_browser
:
# Find the relative path from server root to ardublockly html
ardublockly_html_dir
=
os
.
path
.
join
(
ardublockly_root_dir
,
'ardublockly'
)
relative_path
=
os
.
path
.
relpath
(
ardublockly_html_dir
,
server_root
)
print
(
"Ardublockly page relative path from server root: %s"
%
print
(
'Ardublockly page relative path from server root:
\n\t
/%s/'
%
relative_path
)
open_browser
(
relative_path
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment