示例#1
0
def hit():
    if request.vars.testing:
        request.task = request.vars.task

    load_hit()

    if not request.testing:
        if is_preview():
            response.view = "preview.html"
            log_action("preview")
            log("Preview %s!" % request.task)
            return {}

        if (
            db(
                (db.actions.workerid == request.workerid)
                & (db.actions.study == request.study)
                & (db.actions.action == "finished")
            ).count()
            > work_limit
        ):
            response.view = "done.html"
            log_action("work quota reached")
            log("Too many for %s" % request.workerid)
            try:
                turk.expire_hit(request.hitid)
            except TurkAPIError as e:
                logger.error(str(e.value))
            return {}

    if "/" in request.task:
        request.task_controller, request.task_function = request.task.split("/")
    else:
        request.task_controller = "hits"
        request.task_function = request.task

    response.view = "%s/%s.%s" % (request.task_controller, request.task_function, request.extension)

    if not os.path.exists(request.folder + "/views/" + response.view):
        response.view = "generic.html"

    if request.task_controller == "hits":
        result = globals()[request.task_function]()
    else:
        from gluon.shell import exec_environment

        # from gluon.compileapp import run_models_in
        controller = exec_environment(
            "%s/controllers/%s.py" % (request.folder, request.task_controller),
            request=request,
            response=response,
            session=session,
        )
        # run_models_in(controller)
        controller.is_preview = is_preview
        result = controller[request.task_function]()

    return result
示例#2
0
def hit():
    if request.vars.testing:
        request.task = request.vars.task

    load_hit()
    

    if not request.testing:
        if is_preview():
            response.view = 'preview.html'
            log_action('preview')
            log('Preview %s!' % request.task)
            return {}

        if db((db.actions.workerid == request.workerid)
              & (db.actions.study == request.study)
              & (db.actions.action == 'finished')).count() > work_limit:
            response.view = 'done.html'
            log_action('work quota reached')
            log('Too many for %s' % request.workerid)
            try:
                turk.expire_hit(request.hitid)
            except TurkAPIError as e:
                logger.error(str(e.value))
            return {}

    if '/' in request.task:
        request.task_controller, request.task_function = request.task.split('/')
    else:
        request.task_controller = 'hits'
        request.task_function = request.task

    response.view = '%s/%s.%s' % (request.task_controller,
                                  request.task_function,
                                  request.extension)
    
    if not os.path.exists(request.folder + '/views/' + response.view):
        response.view = 'generic.html'

    if request.task_controller == 'hits':
        result = globals()[request.task_function]()
    else:
        from gluon.shell import exec_environment 
        #from gluon.compileapp import run_models_in
        controller = exec_environment('%s/controllers/%s.py'
                                      % (request.folder,
                                         request.task_controller),
                                      request=request,
                                      response=response,
                                      session=session)
        #run_models_in(controller)
        controller.is_preview = is_preview
        result = controller[request.task_function]()

    return result
示例#3
0
def hit():
    if request.vars.testing:
        request.task = request.vars.task

    load_hit()
    

    if not request.testing:
        if is_preview():
            response.view = 'preview.html'
            log_action('preview')
            log('Preview %s!' % request.task)
            return {}

        if db((db.actions.workerid == request.workerid)
              & (db.actions.study == request.study)
              & (db.actions.action == 'finished')).count() > work_limit:
            response.view = 'done.html'
            log_action('work quota reached')
            log('Too many for %s' % request.workerid)
            try:
                turk.expire_hit(request.hitid)
            except TurkAPIError as e:
                logger.error(str(e.value))
            return {}

    if '/' in request.task:
        request.task_controller, request.task_function = request.task.split('/')
    else:
        request.task_controller = 'hits'
        request.task_function = request.task

    response.view = '%s/%s.%s' % (request.task_controller,
                                  request.task_function,
                                  request.extension)
    
    if not os.path.exists(request.folder + '/views/' + response.view):
        response.view = 'generic.html'

    if request.task_controller == 'hits':
        result = globals()[request.task_function]()
    else:
        from gluon.shell import exec_environment 
        #from gluon.compileapp import run_models_in
        controller = exec_environment('%s/controllers/%s.py'
                                      % (request.folder,
                                         request.task_controller),
                                      request=request,
                                      response=response,
                                      session=session)
        #run_models_in(controller)
        controller.is_preview = is_preview
        result = controller[request.task_function]()

    return result
示例#4
0
 def setUp(self):
     self.env, self.db = setup('init', 'default', db_name='db', db_link='sqlite:memory:')
     self.request = Request()
     self.session = Session()
     self.controller = exec_environment('applications/projs/controllers/registro.py', request=self.request)
     self.controller.response.view = 'unittest.html'
     self.session.funcionario = {
         "CPF": "1330675755",
         "ID_FUNCIONARIO": 11414,
         "ID_PESSOA": 33694,
         "ID_USUARIO": 21771
     }
示例#5
0
#from gluon import *
import datetime
import time
from decimal import Decimal  # тут преимущественно все в Decimal

import shops_lib
from common import rnd_8
import db_common
import rates_lib
import crypto_client
from gluon.shell import exec_environment
try:
    import applications.test.modules.common
    TEST_SHOP_ID = applications.test.modules.common.SHOP_ID
    test_DB = exec_environment('applications/test/models/db.py')
except:
    try:
        import applications.test_shop.modules.common
        TEST_SHOP_ID = applications.test_shop.modules.common.SHOP_ID
        test_DB = exec_environment('applications/test_shop/models/db.py')
    except:
        TEST_SHOP_ID = test_DB = None


def log(db, l2, mess='>'):
    m = 'orders_lib'
    print m, l2, mess
    db.logs.insert(label123456789=m, label1234567890=l2, mess='%s' % mess)

示例#6
0
def invokeBuild(mode, buildId, main, userId, language='Python', project=None, course=None):

	env = exec_environment('applications/PythonCheck/models/db.py')
	config = exec_environment('applications/PythonCheck/models/config.py')

	if config.RATE_LIMIT_ENABLED and rate_limit_exeeded(env, userId=userId, maxConcurrentBuilds=1):
		raise StandardError('Rate Limit Exeeded!')

	# import the build system
	buildModulePath = config.APPLICATION_PATH + '/modules/build/'
	build = imp.load_source('buildsystem.module', buildModulePath + language.lower() + '.py')

	ass = ''
	extendedBuildArgs = ''

	if env.EXERCISE_CONTAINS_SINGLE_FILE:
		main = env.EXERCISE_MAIN_FILE

	# check if we are developing for an exercise or just so
	if (project != None) & (course != None) & (mode=='submit'):	

		# check if exercise exists
		enrollment = env.db((env.db.enrollment.student==userId) & (env.db.enrollment.course==course)).select().first()
		if not(enrollment):
			raise StandardError('Exercise does not exist')

		# check if the date is valid
		course_exercise = env.db((env.db.course_exercise.exercise == project) & (env.db.course_exercise.course == course)).select().first()
		if (course_exercise.start_date > datetime.now()) or (course_exercise.end_date < datetime.now()):
			raise StandardError('Start or Enddate dont match')

		# check if the exercise was graded before
		if len(env.db((env.db.grading.enrollment==enrollment.id) & (env.db.grading.exercise==course_exercise.id)).select()) != 0:
			raise StandardError('Exercise was graded before')

		pointCode = []
		for pointSet in env.db((env.db.points.exercise == project)).select():
			assertionCode = []
			for assertion in env.db((env.db.assertion.points == pointSet.id)).select():
				assertionCode.append(build.buildAssertion(function_name=assertion.function_name, arguments=assertion.arguments, expected_result=assertion.expected_result))
				#print buildAssertion(function_name=assertion.function_name, arguments=assertion.arguments, expected_result=assertion.expected_result)

			pointCode.append(build.buildPointSet(id=pointSet.id, assertions=assertionCode))
		
		ass = build.buildTests(pointCode)

		extendedBuildArgs += str(course) + ' ' + str(project) + ' ' + str(userId)
	else:
		mode='run'


	filePath=config.SRC_DIR + buildId[:config.BUILD_ID_SHORT_LENGTH]

	# ensure that the dirs are there
	if not os.path.exists(filePath):
		os.makedirs(filePath)

	fileQuery = (env.db.files.project == project) & (env.db.files.course == course)

	for codeFile in env.db(fileQuery).select():
		# write src code into file
		file=None
		
		if codeFile.filename == main:
			file = open(filePath + build.mainFile(), 'w')
			codeFile.content = (codeFile.content or '') + '\r\n' + ass
		else:
			file = open(filePath + '/' + codeFile.filename, 'w')
		file.write(codeFile.content or '')
		file.close()

	# lock files
	if mode == 'submit':
		env.db(fileQuery).update(writeable=False)

	buildArgs = buildId + ' ' + filePath + ' ' + buildModulePath + ' ' + language.lower() + ' ' + mode + ' ' + extendedBuildArgs

	# write into database before creating the jail
	env.db.current_builds.insert(PID=None, BuildId=buildId, start_time=datetime.today(), user=userId)
	env.db.commit()

	p = subprocess.Popen(['python', config.WEB2PY_BIN, '-S', 'PythonCheck', '-M', '-R', config.BUILD_SCRIPT, '-A', buildArgs])