Commit c3ad77a6 authored by Marco Mariani's avatar Marco Mariani

pylint-ified

parent 29e73bc9
# -*- coding: utf-8 -*-
# vim: set et sts=2:
#pylint: disable-all
import json
......
......@@ -14,7 +14,7 @@ import werkzeug
from slapos.runner.utils import realpath, tail, isText
class fileBrowser(object):
class FileBrowser(object):
"""This class contain all bases function for file browser"""
def __init__(self, config):
......
# -*- coding: utf-8 -*-
# vim: set et sts=2:
# pylint: disable-msg=W0311,C0301,C0103,C0111
import os
import re
......@@ -163,5 +165,5 @@ def gitPull(project):
def safeResult(result):
"""Parse string and remove credential of the user"""
regex=re.compile("(https:\/\/)([\w\d\._-]+:[\w\d\._-]+)\@([\S]+\s)", re.VERBOSE)
regex = re.compile("(https:\/\/)([\w\d\._-]+:[\w\d\._-]+)\@([\S]+\s)", re.VERBOSE)
return regex.sub(r'\1\3', result)
# -*- coding: utf-8 -*-
# vim: set et sts=2:
# pylint: disable-msg=W0311,C0301,C0103,C0111,R0904
import ConfigParser
import datetime
......@@ -12,8 +13,18 @@ from slapos.runner.utils import (getProfilePath, getSession, isInstanceRunning,
recursifKill, startProxy)
from slapos.runner import views
#Helpers
def loadJson(response):
return json.loads(response.data)
class Config:
def __init__(self):
self.runner_workdir = None
self.software_root = None
self.instance_root = None
self.configuration_file_path = None
def setConfig(self):
"""
Set options given by parameters.
......@@ -97,11 +108,6 @@ class SlaprunnerTestCase(unittest.TestCase):
if os.path.exists(self.app.config['instance_root']):
shutil.rmtree(self.app.config['instance_root'])
#Helpers
def loadJson(self, response):
return json.loads(response.data)
def configAccount(self, username, password, email, name, rcode):
"""Helper for configAccount"""
return self.app.post('/configAccount', data=dict(
......@@ -121,9 +127,9 @@ class SlaprunnerTestCase(unittest.TestCase):
def setAccount(self):
"""Initialize user account and log user in"""
response = self.loadJson(self.configAccount(self.users[0], self.users[1],
response = loadJson(self.configAccount(self.users[0], self.users[1],
self.users[2], self.users[3], self.rcode))
response2 = self.loadJson(self.login(self.users[0], self.users[1]))
response2 = loadJson(self.login(self.users[0], self.users[1]))
self.assertEqual(response['result'], "")
self.assertEqual(response2['result'], "")
......@@ -172,22 +178,22 @@ class SlaprunnerTestCase(unittest.TestCase):
"""For the first lauch of slaprunner user need do create first account"""
result = self.configAccount(self.users[0], self.users[1], self.users[2],
self.users[3], self.rcode)
response = self.loadJson(result)
response = loadJson(result)
self.assertEqual(response['code'], 1)
account = getSession(self.app.config)
self.assertEqual(account, self.users)
def test_login_logout(self):
"""test login with good and wrong values, test logout"""
response = self.loadJson(self.configAccount(self.users[0], self.users[1],
response = loadJson(self.configAccount(self.users[0], self.users[1],
self.users[2], self.users[3], self.rcode))
self.assertEqual(response['result'], "")
result = self.loadJson(self.login(self.users[0], "wrongpwd"))
result = loadJson(self.login(self.users[0], "wrongpwd"))
self.assertEqual(result['result'], "Login or password is incorrect, please check it!")
resultwr = self.loadJson(self.login("wronglogin", "wrongpwd"))
resultwr = loadJson(self.login("wronglogin", "wrongpwd"))
self.assertEqual(resultwr['result'], "Login or password is incorrect, please check it!")
#try now with true values
resultlg = self.loadJson(self.login(self.users[0], self.users[1]))
resultlg = loadJson(self.login(self.users[0], self.users[1]))
self.assertEqual(resultlg['result'], "")
#after login test logout
result = self.logout()
......@@ -196,12 +202,12 @@ class SlaprunnerTestCase(unittest.TestCase):
def test_updateAccount(self):
"""test Update accound, this need user to loging in"""
self.setAccount()
response = self.loadJson(self.updateAccount(self.updateUser, self.rcode))
response = loadJson(self.updateAccount(self.updateUser, self.rcode))
self.assertEqual(response['code'], 1)
result = self.logout()
assert "<h2>Login to Slapos Web Runner</h2>" in result.data
#retry login with new values
response = self.loadJson(self.login(self.updateUser[0], self.updateUser[1]))
response = loadJson(self.login(self.updateUser[0], self.updateUser[1]))
self.assertEqual(response['result'], "")
#log out now!
self.logout()
......@@ -218,12 +224,12 @@ class SlaprunnerTestCase(unittest.TestCase):
folder = 'workspace/' + self.project
data = {"repo":self.repo, "user":'Slaprunner test',
"email":'slaprunner@nexedi.com', "name":folder}
response = self.loadJson(self.app.post('/cloneRepository', data=data,
response = loadJson(self.app.post('/cloneRepository', data=data,
follow_redirects=True))
self.assertEqual(response['result'], "")
#Get realpath of create project
path_data = dict(file=folder)
response = self.loadJson(self.app.post('/getPath', data=path_data,
response = loadJson(self.app.post('/getPath', data=path_data,
follow_redirects=True))
self.assertEqual(response['code'], 1)
realFolder = response['result'].split('#')[0]
......@@ -231,7 +237,7 @@ class SlaprunnerTestCase(unittest.TestCase):
config = open(os.path.join(realFolder, '.git/config'), 'r').read()
assert "slaprunner@nexedi.com" in config and "Slaprunner test" in config
#Checkout to slaprunner branch, this supose that branch slaprunner exit
response = self.loadJson(self.app.post('/newBranch', data=dict(
response = loadJson(self.app.post('/newBranch', data=dict(
project=folder,
create='0',
name='slaprunner'),
......@@ -246,7 +252,7 @@ class SlaprunnerTestCase(unittest.TestCase):
self.login(self.users[0], self.users[1])
#test create SR
newSoftware = os.path.join(self.software, 'slaprunner-test')
response = self.loadJson(self.app.post('/createSoftware',
response = loadJson(self.app.post('/createSoftware',
data=dict(folder=newSoftware),
follow_redirects=True))
self.assertEqual(response['result'], "")
......@@ -260,7 +266,7 @@ class SlaprunnerTestCase(unittest.TestCase):
#Login
self.login(self.users[0], self.users[1])
software = os.path.join(self.software, 'drupal') #Drupal SR must exist in SR folder
response = self.loadJson(self.app.post('/setCurrentProject',
response = loadJson(self.app.post('/setCurrentProject',
data=dict(path=software),
follow_redirects=True))
self.assertEqual(response['result'], "")
......
# -*- coding: utf-8 -*-
# vim: set et sts=2:
# pylint: disable-msg=W0311,C0301,C0103,C0111,W0141,W0142
import hashlib
import md5
import logging
import multiprocessing
import re
import signal
import shutil
import string
import os
import subprocess
import time
......@@ -45,7 +46,7 @@ html_escape_table = {
def html_escape(text):
"""Produce entities within text."""
return "".join(html_escape_table.get(c,c) for c in text)
return "".join(html_escape_table.get(c, c) for c in text)
def getSession(config):
"""
......@@ -258,7 +259,6 @@ def startProxy(config):
def stopProxy(config):
"""Stop Slapproxy server"""
killRunningProcess(config,'proxy.pid')
pass
def removeProxyDb(config):
......@@ -431,7 +431,7 @@ def getSlapStatus(config):
if partition_list:
for i in xrange(0, int(config['partition_amount'])):
slappart_id = '%s%s' % ("slappart", i)
if not [x[0] for x in partition_list if slappart_id==x[0]]:
if not [x[0] for x in partition_list if slappart_id == x[0]]:
partition_list.append((slappart_id, []))
return partition_list
......@@ -444,7 +444,7 @@ def removeInstanceRoot(config):
"""Clean instance directory and stop all its running process"""
if os.path.exists(config['instance_root']):
svcStopAll(config)
for root, dirs, files in os.walk(config['instance_root']):
for root, dirs, _ in os.walk(config['instance_root']):
for fname in dirs:
fullPath = os.path.join(root, fname)
if not os.access(fullPath, os.W_OK) :
......@@ -501,11 +501,11 @@ def getFolderContent(config, folder):
Returns:
Html formated string or error message when fail.
"""
r=['<ul class="jqueryFileTree" style="display: none;">']
r = ['<ul class="jqueryFileTree" style="display: none;">']
try:
folder = str(folder)
r=['<ul class="jqueryFileTree" style="display: none;">']
d=urllib.unquote(folder)
r = ['<ul class="jqueryFileTree" style="display: none;">']
d = urllib.unquote(folder)
realdir = realpath(config, d)
if not realdir:
r.append('Could not load directory: Permission denied')
......@@ -515,14 +515,14 @@ def getFolderContent(config, folder):
for f in ldir:
if f.startswith('.'): #do not displays this file/folder
continue
ff=os.path.join(d,f)
if os.path.isdir(os.path.join(realdir,f)):
r.append('<li class="directory collapsed"><a href="#%s" rel="%s/">%s</a></li>' % (ff, ff,f))
ff = os.path.join(d, f)
if os.path.isdir(os.path.join(realdir, f)):
r.append('<li class="directory collapsed"><a href="#%s" rel="%s/">%s</a></li>' % (ff, ff, f))
else:
e=os.path.splitext(f)[1][1:] # get .ext and remove dot
r.append('<li class="file ext_%s"><a href="#%s" rel="%s">%s</a></li>' % (e, ff,ff,f))
e = os.path.splitext(f)[1][1:] # get .ext and remove dot
r.append('<li class="file ext_%s"><a href="#%s" rel="%s">%s</a></li>' % (e, ff, ff, f))
r.append('</ul>')
except Exception,e:
except Exception as e:
r.append('Could not load directory: %s' % str(e))
r.append('</ul>')
return jsonify(result=''.join(r))
......@@ -538,11 +538,11 @@ def getFolder(config, folder):
Returns:
Html formated string or error message when fail.
"""
r=['<ul class="jqueryFileTree" style="display: none;">']
r = ['<ul class="jqueryFileTree" style="display: none;">']
try:
folder = str(folder)
r=['<ul class="jqueryFileTree" style="display: none;">']
d=urllib.unquote(folder)
r = ['<ul class="jqueryFileTree" style="display: none;">']
d = urllib.unquote(folder)
realdir = realpath(config, d)
if not realdir:
r.append('Could not load directory: Permission denied')
......@@ -552,11 +552,11 @@ def getFolder(config, folder):
for f in ldir:
if f.startswith('.'): #do not display this file/folder
continue
ff=os.path.join(d,f)
if os.path.isdir(os.path.join(realdir,f)):
ff = os.path.join(d, f)
if os.path.isdir(os.path.join(realdir, f)):
r.append('<li class="directory collapsed"><a href="#%s" rel="%s/">%s</a></li>' % (ff, ff, f))
r.append('</ul>')
except Exception,e:
except Exception as e:
r.append('Could not load directory: %s' % str(e))
r.append('</ul>')
return jsonify(result=''.join(r))
......@@ -634,7 +634,7 @@ def newSoftware(folder, config, session):
else:
json = "Bad folder or Directory '" + folder + \
"' already exist, please enter a new name for your software"
except Exception, e:
except Exception as e:
json = "Can not create your software, please try again! : " + str(e)
if os.path.exists(folderPath):
shutil.rmtree(folderPath)
......@@ -652,8 +652,8 @@ def getProjectTitle(config):
conf = os.path.join(config['etc_dir'], ".project")
if os.path.exists(conf):
project = open(conf, "r").read().split("/")
software = project[len(project) - 2]
return software + " (" + string.join(project[:(len(project) - 2)], '/') + ")"
software = project[-2]
return '%s (%s)' % (software, '/'.join(project[:-2]))
return "No Profile"
def getSoftwareReleaseName(config):
......@@ -661,7 +661,7 @@ def getSoftwareReleaseName(config):
sr_profile = os.path.join(config['etc_dir'], ".project")
if os.path.exists(sr_profile):
project = open(sr_profile, "r").read().split("/")
software = project[len(project) - 2]
software = project[-2]
return software.replace(' ', '_')
return "No_name"
......@@ -704,14 +704,14 @@ def tail(f, lines=20):
data.insert(0, f.read(BUFSIZ))
else:
# file too small, start from begining
f.seek(0,0)
f.seek(0, 0)
# only read what was not read
data.insert(0, f.read(bytes))
linesFound = data[0].count('\n')
size -= linesFound
bytes -= BUFSIZ
block -= 1
return string.join(''.join(data).splitlines()[-lines:], '\n')
return '\n'.join(''.join(data).splitlines()[-lines:])
def readFileFrom(f, lastPosition):
"""
......@@ -735,7 +735,7 @@ def readFileFrom(f, lastPosition):
else:
margin = abs(block*BUFSIZ) - size
if length < BUFSIZ:
f.seek(0,0)
f.seek(0, 0)
else:
seek = block * BUFSIZ + margin
f.seek(seek, 2)
......@@ -749,7 +749,7 @@ def isText(file):
"""Return True if the mimetype of file is Text"""
if not os.path.exists(file):
return False
text_range = ''.join(map(chr, [7,8,9,10,12,13,27] + range(0x20, 0x100)))
text_range = ''.join(map(chr, [7, 8, 9, 10, 12, 13, 27] + range(0x20, 0x100)))
is_binary_string = lambda bytes: bool(bytes.translate(None, text_range))
try:
return not is_binary_string(open(file).read(1024))
......@@ -762,7 +762,7 @@ def md5sum(file):
return False
try:
fh = open(file, 'rb')
m = hashlib.md5()
m = md5.md5()
while True:
data = fh.read(8192)
if not data:
......@@ -805,14 +805,14 @@ def readParameters(path):
if os.path.exists(path):
try:
xmldoc = xml.dom.minidom.parse(path)
object = {}
obj = {}
for elt in xmldoc.childNodes:
sub_object = {}
sub_obj = {}
for subnode in elt.childNodes:
if subnode.nodeType != subnode.TEXT_NODE:
sub_object[str(subnode.getAttribute('id'))] = subnode.childNodes[0].data #.decode('utf-8').decode('utf-8')
object[str(elt.tagName)] = sub_object
return object
sub_obj[str(subnode.getAttribute('id'))] = subnode.childNodes[0].data #.decode('utf-8').decode('utf-8')
obj[str(elt.tagName)] = sub_obj
return obj
except Exception, e:
return str(e)
else:
......
# -*- coding: utf-8 -*-
# vim: set et sts=2:
# pylint: disable-msg=W0311,C0301,C0103,C0111
import os
import shutil
......@@ -16,7 +18,7 @@ from slapos.runner.utils import (checkSoftwareFolder, configNewSR, getFolder, ge
removeInstanceRoot, removeProxyDb, removeSoftwareByName, runInstanceWithLock,
runSoftwareWithLock, saveSession, svcStartStopProcess, svcStopAll, tail,
updateInstanceParameter)
from slapos.runner.fileBrowser import fileBrowser
from slapos.runner.fileBrowser import FileBrowser
from slapos.runner.gittools import (cloneRepo, gitStatus, switchBranch, addBranch, getDiff,
gitPush, gitPull)
......@@ -25,7 +27,7 @@ app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 20 * 1024 * 1024
auth = Auth(app, login_url_name='login')
auth.user_timeout = 0
file_request = fileBrowser(app.config)
file_request = FileBrowser(app.config)
# Setup default flask (werkzeug) parser
import logging
......@@ -73,7 +75,7 @@ def myAccount():
@app.route("/dologout")
def dologout():
user_data = logout()
_ = logout()
return redirect(url_for('login'))
@login_required()
......@@ -108,6 +110,7 @@ def inspectSoftware():
result = ""
else:
result = app.config['software_root']
# XXX not used??
return render_template('runResult.html', softwareRoot='software_link/',
softwares=loadSoftwareRList(app.config))
......@@ -173,11 +176,11 @@ def supervisordStatus():
html = "<tr><th>Partition and Process name</th><th>Status</th><th>Process PID </th><th> UpTime</th><th></th></tr>"
for item in result:
html += "<tr>"
html +="<td class='first'><b><a href='" + url_for('tailProcess', process=item[0])+"'>"+item[0]+"</a></b></td>"
html +="<td align='center'><a href='"+url_for('startStopProccess', process=item[0], action=item[1])+"'>"+item[1]+"</a></td>"
html +="<td align='center'>"+item[3]+"</td><td>"+item[5]+"</td>"
html +="<td align='center'><a href='"+url_for('startStopProccess', process=item[0], action='RESTART')+"'>Restart</a></td>"
html +="</tr>"
html += "<td class='first'><b><a href='" + url_for('tailProcess', process=item[0]) + "'>" + item[0] + "</a></b></td>"
html += "<td align='center'><a href='" + url_for('startStopProccess', process=item[0], action=item[1]) + "'>" + item[1] + "</a></td>"
html += "<td align='center'>" + item[3] + "</td><td>" + item[5] + "</td>"
html += "<td align='center'><a href='" + url_for('startStopProccess', process=item[0], action='RESTART') + "'>Restart</a></td>"
html += "</tr>"
return jsonify(code=1, result=html)
@login_required()
......@@ -295,7 +298,7 @@ def createFile():
request.form['type'] + ": Permission Denied")
try:
if request.form['type'] == "file":
f = open(path, 'w').write(" ")
open(path, 'w')
else:
os.mkdir(path)
return jsonify(code=1, result="")
......@@ -575,7 +578,7 @@ def fileBrowser():
except:
abort(404)
elif opt == 9:
truncateTo = int(request.form.get('truncate', '0'))
truncateTo = int(request.form.get('truncate', '0')) # XXX not used??
result = file_request.readFile(dir, filename)
elif opt == 11:
#Upload file
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment