penguin/AstroJS

Javascript framework for my blog

commit 41f1ab4c90ae2fc37a4baee481b5e22cd792e901

author斟酌 鵬兄 <tgckpg@gmail.com>
date2016-05-27T16:20:58Z
subjectRemoved tests, using virtualenv
commit 41f1ab4c90ae2fc37a4baee481b5e22cd792e901
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2016-05-27T16:20:58Z

    Removed tests, using virtualenv
---
 .gitignore                                         |  1 +
 botan-start.py                                     | 80 ++++++++--------------
 botanjs/config.py                                  |  2 +
 .../test/Dandelian.CSSAnimations.MovieClip.html    | 40 -----------
 .../templates/test/System.Net.ClassLoader.html     | 25 -------
 .../service/templates/test/System.utils.IKey.html  | 13 ----
 botanjs/service/templates/test_list.html           | 19 -----
 botanjs/service/webapi.py                          | 37 +++-------
 env/README.md                                      |  1 +
 settings.ini                                       | 12 ++--
 10 files changed, 47 insertions(+), 183 deletions(-)

diff --git a/.gitignore b/.gitignore
index 19f98d7..fff347a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
 __pycache__
 cache/*
 logs/*
+env/*
diff --git a/botan-start.py b/botan-start.py
index ad7b45e..bd0c3e7 100755
--- a/botan-start.py
+++ b/botan-start.py
@@ -1,43 +1,18 @@
 #!/usr/bin/env python3
 
 import os, pwd, grp
-from botanjs.config import Config as config
+from botanjs.config import Config as config, DEBUG
 
-def drop_privileges( uid_name='nobody', gid_name='nogroup' ):
-	# Get the uid/gid from the name
-	running_uid = pwd.getpwnam( uid_name ).pw_uid
-	running_gid = grp.getgrnam( gid_name ).gr_gid
-
-	current_uid = os.getuid()
-
-	if current_uid != 0:
-		if running_uid == current_uid:
-			return True
-		print( "Service must be started by root" )
-		return False
-
-	# Remove group privileges
-	os.setgroups([])
-
-	# Try setting the new uid/gid
-	os.setgid( running_gid )
-	os.setuid( running_uid )
-
-	# Ensure a very conservative umask
-	old_umask = os.umask( 0o022 )
+import shutil
 
-	return True
+SiteRoot = os.path.abspath( "." )
 
-import shutil
+config["Paths"]["SiteRoot"] = SiteRoot;
 
 # Create the lock folder for celery
-lockDir = "/var/run/celery"
-os.makedirs( lockDir, exist_ok=True )
-shutil.chown( lockDir, config["Service"]["user"] )
+lockDir = SiteRoot + "env/var/run/celery"
 
-# Imediately drop the root privilege
-if drop_privileges( config["Service"]["user"], config["Service"]["group"] ) != True:
-	exit()
+os.makedirs( lockDir, exist_ok=True )
 
 import sys
 from subprocess import Popen
@@ -51,31 +26,32 @@ if __name__ == "__main__":
 	jwork = "botanjs.service.jwork"
 	nodeName = "botanNode1"
 
-	Popen([
-		"celery"
-		, "multi"
-		, "restart"
-		, nodeName
-		, "-A"
-		, jwork
-		, "worker"
-		, "--pidfile=/var/run/celery/" + jwork + ".pid"
-		, "--logfile=" + os.path.join( config["Paths"]["Log"], jwork + ".log" )
-		, "--workdir=" + config["Paths"]["Runtime"]
-		, "beat"
-		, "-l"
-		, "info"
-	])
-
-	import logging
-	logging.basicConfig(
-		filename = os.path.join( config["Paths"]["Log"], "access.log" )
-		, level = logging.DEBUG
+	celOut = open( os.path.join( config["Paths"]["Log"], jwork + "-err.log" ), "a+" )
+	cel = Popen(
+		[
+			"celery", "multi", "restart", nodeName
+			, "-A", jwork, "worker"
+			, "--pidfile=" + lockDir + jwork + ".pid"
+			, "--logfile=" + os.path.join( config["Paths"]["Log"], jwork + ".log" )
+			, "--workdir=" + config["Paths"]["Runtime"]
+			, "beat", "-l", "info"
+		]
+		, stdout = celOut
+		, stderr = celOut
 	)
 
+	celOut.close()
+
+	if not DEBUG and os.fork():
+		import logging
+		logging.basicConfig(
+			filename = os.path.join( config["Paths"]["Log"], "access.log" )
+			, level = logging.DEBUG
+		)
+		sys.exit()
+
 	WebAPI(
 		jsCache = config["Paths"]["Cache"]
 		, jsRoot = config["BotanJS"]["SrcDir"]
 		, brokerURL = config["BotanJS"]["CeleryBroker"]
 	)
-
diff --git a/botanjs/config.py b/botanjs/config.py
index 31eaaa7..2117351 100755
--- a/botanjs/config.py
+++ b/botanjs/config.py
@@ -3,3 +3,5 @@ import configparser
 
 Config = configparser.ConfigParser( interpolation = configparser.ExtendedInterpolation() )
 Config.read( "settings.ini" )
+
+DEBUG = Config[ "Env" ][ "Debug" ]
diff --git a/botanjs/service/templates/test/Dandelian.CSSAnimations.MovieClip.html b/botanjs/service/templates/test/Dandelian.CSSAnimations.MovieClip.html
deleted file mode 100644
index 12bc6be..0000000
--- a/botanjs/service/templates/test/Dandelian.CSSAnimations.MovieClip.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-<head>
-<title>Botan JS - Test</title>
-<script>
-var debugEnv = true;
-</script>
-
-<link href="/ocss/Dandelion.CSSAnimations.MovieClip" rel="stylesheet" type="text/css" />
-<script src="/ojs/Dandelion.CSSAnimations.MovieClip"></script>
-<script>
-function load ()
-{
-    var CSSAnimations = BotanJS.import( "Dandelion.CSSAnimations.*" );
-    var mc = new CSSAnimations.MovieClip(
-        "http://file.astropenguin.net/blog/Gothic/__A.png"
-        // Row, Col
-        , 6   , 7
-        // wh
-        , 125 , 125
-        // Frame, start
-        , 42  , 0
-    );
-
-    // CSSAnimations.MouseOverMovie( mc );
-
-    document.body.appendChild( mc.stage );
-    mc.nextFrame();
-    mc.nextFrame();
-    mc.nextFrame();
-    mc.nextFrame();
-    mc.nextFrame();
-
-    mc.prevFrame();
-
-};
-</script>
-
-<body onload="load()">
-</body>
-</html>
diff --git a/botanjs/service/templates/test/System.Net.ClassLoader.html b/botanjs/service/templates/test/System.Net.ClassLoader.html
deleted file mode 100644
index 398e9b1..0000000
--- a/botanjs/service/templates/test/System.Net.ClassLoader.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>
-<head>
-<title>Botan JS - Test</title>
-<script>
-var debugEnv = true;
-var _AstConf_ = { };
-</script>
-
-<link href="/ocss/System.Net.ClassLoader" rel="stylesheet" type="text/css" />
-<script src="/ojs/System.Net.ClassLoader"></script>
-<script>
-var Loader = BotanJS.import( "System.Net.ClassLoader" );
-
-var makeMessagebox = function()
-{
-    var MessageBox = BotanJS.import( "Components.MessageBox" );
-    new MessageBox( "Title", "Message" ).show();
-};
-
-var ldr = new Loader( "/" );
-ldr.load( "Components.MessageBox", makeMessagebox );
-</script>
-<body>
-</body>
-</html>
diff --git a/botanjs/service/templates/test/System.utils.IKey.html b/botanjs/service/templates/test/System.utils.IKey.html
deleted file mode 100644
index bedef20..0000000
--- a/botanjs/service/templates/test/System.utils.IKey.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head>
-<title>Botan JS - Test</title>
-<script>
-var debugEnv = true;
-var _AstConf_ = { };
-</script>
-
-<link href="/ocss/System.utils.IKey" rel="stylesheet" type="text/css" />
-<script src="/ojs/System.utils.IKey"></script>
-<body>
-</body>
-</html>
diff --git a/botanjs/service/templates/test_list.html b/botanjs/service/templates/test_list.html
deleted file mode 100644
index 4732e8b..0000000
--- a/botanjs/service/templates/test_list.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html>
-<head>
-<title>Botan JS - List of Tests</title>
-<style>
-<!--
-body {
-    font-size: 1.2em;
-}
--->
-</style>
-<body>
-<pre>
-{% for d in data %}
-    <a href="/test/{{ d }}">{{ d }}</a>
-    <br>
-{% endfor %}
-</pre>
-</body>
-</html>
diff --git a/botanjs/service/webapi.py b/botanjs/service/webapi.py
index db3ef88..4626a0c 100755
--- a/botanjs/service/webapi.py
+++ b/botanjs/service/webapi.py
@@ -4,6 +4,8 @@ from flask import Response
 from flask import render_template
 from botanjs.service.jclassresv import BotanClassResolver as JCResv
 from botanjs.service.jwork import app as CeleryApp, JWork
+from botanjs.config import DEBUG
+
 import os
 
 class WebAPI:
@@ -16,12 +18,6 @@ class WebAPI:
 
 	def __init__( self, jsRoot = "../src", jsCache = "/tmp", brokerURL = None ):
 
-		self.test_templates = os.path.join(
-			os.path.dirname( os.path.realpath( __file__ ) )
-			, "templates"
-			, "test"
-		)
-
 		self.BRoot = os.path.abspath( jsRoot )
 		self.BCache = os.path.join( jsCache, "botanjs" )
 		self.BMap = os.path.join( self.BCache, "bmap.xml" )
@@ -29,27 +25,17 @@ class WebAPI:
 		if brokerURL != None:
 			CeleryApp.conf.update( BROKER_URL = brokerURL )
 
-		self.app = Flask( __name__, static_url_path = '', static_folder = self.BCache )
+		print( __name__ )
+		self.app = Flask( __name__, static_url_path = self.BCache, static_folder = self.BCache )
 		self.app.jinja_env.add_extension( "compressinja.html.HtmlCompressor" )
 
-		self.app.add_url_rule( "/test" , view_func = self.r_test_list )
-		self.app.add_url_rule( "/test/<string:test_file>" , view_func = self.r_test )
-		self.app.add_url_rule( "/<path:mode>/<path:code>"          , view_func = self.api_request )
-
-		self.app.run( host="0.0.0.0" )
-
-	def r_test_list( self ):
-		for root, dirs, files in os.walk( self.test_templates ):
-			break
+		self.app.add_url_rule( "/" , view_func = self.index )
+		self.app.add_url_rule( "/<path:mode>/<path:code>" , view_func = self.api_request )
 
-		files.sort()
-		files = ( os.path.splitext( x )[0] for x in files )
-
-		return render_template( "test_list.html", data = files )
-
-	def r_test( self, test_file ):
-		return render_template( os.path.join( "test", test_file + ".html" ) )
+		self.app.run( host = "0.0.0.0", debug = DEBUG )
 
+	def index( self ):
+		return "Hello, this is the BotanJS Service API.", 200
 
 	def api_request( self, mode, code ):
 		try:
@@ -61,10 +47,9 @@ class WebAPI:
 
 			srvHandler = JCResv( JWork, self.BRoot, self.BMap, self.BCache )
 			return Response( srvHandler.getAPI( code, mode = mode ), mimetype = t )
-		except LookupError as e:
+		except Exception as e:
 			return str(e), 404
-		# except Exception as e:
-			# return str(e), 404
+
 
 		return "Invalid request", 404
 
diff --git a/env/README.md b/env/README.md
new file mode 100644
index 0000000..1834eef
--- /dev/null
+++ b/env/README.md
@@ -0,0 +1 @@
+virtualenv here
diff --git a/settings.ini b/settings.ini
index 65c8da3..559e1da 100644
--- a/settings.ini
+++ b/settings.ini
@@ -1,17 +1,13 @@
+[Env]
+Debug = True
+
 [Paths]
-SiteRoot = /var/www/botanjs
 Runtime = ${SiteRoot}
 Log = ${SiteRoot}/logs
 Cache = ${SiteRoot}/cache
 
 [BotanJS]
 SrcDir = ${Paths:Runtime}/botanjs/src
-
-REDIS_PASS = PASSWORD_FOR_REDIS_DB
-
 CeleryBroker = redis://:${REDIS_PASS}@123.123.123.123:1234/9
 
-
-[Service]
-user = www-data
-group = www-data
+REDIS_PASS = PASSWORD_FOR_REDIS_DB