示例#1
0
def edit(lecture_id):
    """Úprava specifické cvičení"""

    lecture = Lecture.get(lecture_id)
    form = LectureForm(request.forms.decode(), lecture)
    user = getUser()

    if not (user.inRole("master") or lecture.lector == user.login):
        return unauthorized()

    if request.method == 'POST' and form.validate():
        try:
            lecture.update(name=form.name.data,
                           nonterminal=form.nonterminal.data)
            msg("Cvičení aktualizováno", "success")
        except Exception as e:
            msg("Chyba při aktualizaci - %s" % e, "error")

        redirect(request.path)

    try:
        text = lecture.generate()
    except Exception as e:
        text = "Došlo k chybě : \n %s      \n %s" % (type(e).__name__, e)

    return template("lectures_edit", {
        "lecture": lecture,
        "form": form_renderer(form),
        "text": text
    })
示例#2
0
def edit(lecture_id):
    """Úprava specifické cvičení"""
    
    lecture = Lecture.get( lecture_id )
    form = LectureForm(request.forms.decode(), lecture)
    user = getUser()

    if not ( user.inRole("master") or lecture.lector == user.login):
        return unauthorized()

    if request.method == 'POST' and form.validate():
        try:
            lecture.update( name = form.name.data, nonterminal = form.nonterminal.data )
            msg("Cvičení aktualizováno","success")
        except Exception as e:
            msg("Chyba při aktualizaci - %s" % e, "error")
        
        redirect(request.path)    
        
    try:
        text =  lecture.generate() 
    except Exception as e:
        text = "Došlo k chybě : \n %s      \n %s" % (type(e).__name__, e)        
         
    return template("lectures_edit", {"lecture" : lecture, "form": form_renderer(form), "text": text } )    
示例#3
0
 def setUp(self):
     self.connection = aws_simpledb.SimpleDB()
     # If the testing domain, already exists, delete it
     if self.connection.has_domain(settings.test_domains[0]):
         helpers.msg(self, 'Test domain already exists - delete it')
         self.connection.delete_domain(settings.test_domains[0])
         helpers.eventualConsistencySleep()
示例#4
0
 def tearDown(self):
     tests_methods = \
         [method for method in dir(self) if
          inspect.ismethod(getattr(self, method)) and method[0:4] == 'test']
     if tests_methods[-1] == self.id().split('.')[-1]:
         for domain in settings.test_domains:
             if self.connection.has_domain(domain):
                 helpers.msg(self, 'Deleting test domain ' + domain)
                 self.connection.delete_domain(domain)
示例#5
0
def on_block_interact(event):
    if (str(event.getAction()) == "RIGHT_CLICK_BLOCK"):
        sender = event.getPlayer()
        block = event.getClickedBlock().getState()
        if (isinstance(block, bukkit.block.Skull) and not event.isCancelled()):
            owner = block.getOwner()
            if (owner):
                msg(sender, "&eThat's %s." % owner)
            else:
                msg(sender, "&cThis skull has no name (Steve)")
            event.setCancelled(True)
示例#6
0
def on_block_interact(event):
    if (str(event.getAction()) == "RIGHT_CLICK_BLOCK"):
        sender = event.getPlayer()
        block  = event.getClickedBlock().getState()
        if (isinstance(block, bukkit.block.Skull) and not event.isCancelled()):
            owner = block.getOwner()
            if (owner):
                msg(sender, "&eThat's %s." % owner)
            else:
                msg(sender, "&cThis skull has no name (Steve)")
            event.setCancelled(True)
 def tearDown(self):
     # For the last check we also, delete the testing domains
     # note that if you run only some of this TestCase's tests it's up to
     # you to delete the test domains.
     tests_methods = \
         [method for method in dir(self) if 
          inspect.ismethod(getattr(self, method)) and method[0:4] == 'test']
     if tests_methods[-1] == self.id().split('.')[-1]:
         print 'Deleting test domains'
         for domain in settings.test_domains:
             if self.connection.has_domain(domain):
                 helpers.msg(self, 'Deleting test domain ' + domain)
                 self.connection.delete_domain(domain)
示例#8
0
def list():
    """Seznam cvičení"""
    
    usr = getUser() 
    
    
    if request.params.get("activate"):
        lec = Lecture.get( request.params.get("activate") )
        lec.activate()
        msg("Cvičení %s bylo zapnuto" % lec.name,"success")
        redirect(request.path)
        
    if request.params.get("deactivate"):
        lec = Lecture.get( request.params.get("deactivate") )
        lec.deactivate()
        msg("Cvičení %s bylo vypnuto" % lec.name,"success")
        redirect(request.path)        
    
    # vložení nového cvičení
    if request.forms.get("add"):
        lec = Lecture.insert( request.forms.decode().get("add"), usr.login )
        if lec:
            msg("Cvičení %s vytvořeno" % lec.name,"success")
            redirect("/lectures/edit/%i" % lec.lecture_id )
        else:
            msg("Chyba při vytváření cvičení","error")
            redirect(request.path)
        
    lectures = Lecture.getAll() if usr.inRole("master") else Lecture.getAll(usr.login) 
    
    return template("lectures", {"lectures" : lectures, "showLector": usr.inRole("master") } )
def assigmentRate(assigment_id):
    """Úprava a obodování zadání"""
    usr = getUser()

    assigment = Assigment.get(assigment_id)
    if not assigment: return HTTPError(404, "Cvičení nebylo nalezeno")
    #todo if ???: return HTTPError(403, "Nemáte oprávnění")

    if request.method == 'POST':
        action = request.forms.get("action")
        if (not action) or (not action in ("lock", "rate", "unlock")):
            HTTPError(400, "Neznámá akce")
        print("----------action", action)
        try:
            if action == "lock":
                assigment.lock()
                msg("Řešení bylo zamčeno", "success")
            elif action == "rate":
                assigment.rate(request.forms.get("points"))
                msg("Řešení bylo ohodnoceno", "success")
            elif action == "unlock":
                assigment.unlock()
                msg("Řešení bylo odemčeno", "success")
        except ModelException as e:
            msg("Chyba při manipulaci: %s" % s, "error")
        redirect('/assigments-lector')
        return

    return template("assigments_rate", {"assigment": assigment})
示例#10
0
def assigmentRate(assigment_id):
    """Úprava a obodování zadání"""
    usr = getUser() 

    assigment = Assigment.get( assigment_id ) 
    if not assigment: return HTTPError(404, "Cvičení nebylo nalezeno")
    #todo if ???: return HTTPError(403, "Nemáte oprávnění")

        

    if request.method == 'POST':
        action = request.forms.get("action")
        if (not action) or  (not action in ("lock", "rate", "unlock")): HTTPError(400, "Neznámá akce")
        print("----------action", action)
        try:
            if action == "lock":
                assigment.lock()
                msg("Řešení bylo zamčeno", "success")
            elif action == "rate":
                assigment.rate(  request.forms.get("points") )
                msg("Řešení bylo ohodnoceno", "success")
            elif action == "unlock":
                assigment.unlock()
                msg("Řešení bylo odemčeno", "success")            
        except ModelException as e:
            msg("Chyba při manipulaci: %s" %s, "error")             
        redirect('/assigments-lector')
        return

    return template("assigments_rate", {"assigment" : assigment } )
示例#11
0
def list():
    """Seznam cvičení"""

    usr = getUser()

    if request.params.get("activate"):
        lec = Lecture.get(request.params.get("activate"))
        lec.activate()
        msg("Cvičení %s bylo zapnuto" % lec.name, "success")
        redirect(request.path)

    if request.params.get("deactivate"):
        lec = Lecture.get(request.params.get("deactivate"))
        lec.deactivate()
        msg("Cvičení %s bylo vypnuto" % lec.name, "success")
        redirect(request.path)

    # vložení nového cvičení
    if request.forms.get("add"):
        lec = Lecture.insert(request.forms.decode().get("add"), usr.login)
        if lec:
            msg("Cvičení %s vytvořeno" % lec.name, "success")
            redirect("/lectures/edit/%i" % lec.lecture_id)
        else:
            msg("Chyba při vytváření cvičení", "error")
            redirect(request.path)

    lectures = Lecture.getAll() if usr.inRole("master") else Lecture.getAll(
        usr.login)

    return template("lectures", {
        "lectures": lectures,
        "showLector": usr.inRole("master")
    })
示例#12
0
def add(target, d):
    message = h.msg()
    val = d[u'value']
    db_path = './bb/{}.sqlite'.format(d[u'board'])
    if target == 'board':
        if re.match(r'^[\w-]{4,20}$', val):
            finished = 0
            filepath = './bb/{}.sqlite'.format(val)
            now = time.time()
            query1 = "CREATE TABLE bb (type text NOT NULL, headline text NOT NULL, body text NOT NULL,creator text NOT NULL, parent_id, creation_time integer NOT NULL)"
            if h.db_do(query1, '', filepath):
                finished += 1
            query2 = "INSERT INTO boards (name,creator,time,description) VALUES (?,?,?,?)"
            qvals2 = (val, d[u'user'], now, d[u'body'])
            if h.db_do(query2, qvals2, sys_db):
                finished += 1
            if finished > 1:
                message['success'] = True
            else:
                message['errors'].append(1003)
        else:
            message['errors'].append(1005)
    elif target == 'topic':
        if not re.match(r'^[-\w ]{1,50}$', d[u'headline']):
            message['errors'].append(1005)
        elif not os.path.isfile(db_path):
            message['errors'].append(1001)
        else:
            now = time.time()
            query = "INSERT INTO bb (type, headline, body, creator,creation_time) VALUES (?, ?, ?, ?, ?)"
            qvals = ('topic', d[u'headline'], d[u'body'], d[u'user'], now)
            if h.db_do(query, qvals, db_path):
                message['success'] = True
            else:
                message['errors'].append(1003)
    elif target == 'post' or target == 'reply':
        if target == 'reply' and not d[u'post']:
            message['errors'].append(1005)
            return message
        if d[u'topic'] and d[u'board']:
            query1 = "SELECT * FROM bb WHERE type = 'topic' and rowid = ?"
            qvals1 = (d[u'topic'], )
            if h.db_do(query1, qvals1, db_path) and d[u'body']:
                headline = d[u'headline'] if d[u'headline'] else ''
                now = time.time()
                parent = d[u'topic'] if target == 'post' else d[u'post']
                print parent
                query2 = "INSERT INTO bb (type, headline, body, creator, parent_id, creation_time) VALUES (?, ?, ?, ?, ?, ?)"
                qvals2 = (target, headline, d[u'body'], d[u'user'], parent,
                          now)
                if h.db_do(query2, qvals2, db_path):
                    message['success'] = True
                else:
                    message['errors'].append(1003)
            else:
                message['errors'].append(1004)
        else:
            message['errors'].append(1005)

    return message
示例#13
0
def view(target, d):
    message = h.msg()
    board_db = False
    if d[u'board']:
        if os.path.isfile('./bb/{}.sqlite'.format(d[u'board'])):
            board_db = './bb/{}.sqlite'.format(d[u'board'])

    if target == 'topic' and board_db:
        value = d[u'value'] if d[u'value'] else d[u'topic']
        query = "SELECT rowid, headline, body, creator, creation_time FROM bb WHERE rowid = ? and type = 'topic'"
        qvals = (value, )
        rows = h.db_do(query, qvals, board_db, False)
        if len(rows):
            message['headline'] = rows[0][1]
            message['body'] = rows[0][2]
            message['creator'] = rows[0][3]
            message['time'] = rows[0][4]
            message['success'] = True
        else:
            message['errors'].append(1007)
    elif target == 'post' and board_db:
        value = d[u'value'] if d[u'value'] else d[u'post']
        p_query = "SELECT rowid, headline, body, creator, creation_time FROM bb WHERE rowid = ?"
        p_qvals = (value, )
        r_query = "SELECT headline, body, creator, creation_time FROM bb WHERE parent_id = ? ORDER BY creation_time ASC"
        r_qvals = (value, )
        p_rows = h.db_do(p_query, p_qvals, board_db, False)
        r_rows = h.db_do(r_query, p_qvals, board_db, False)
        if p_rows:
            message['headline'] = p_rows[0][1]
            message['body'] = p_rows[0][2]
            message['creator'] = p_rows[0][3]
            message['time'] = p_rows[0][4]
            message['success'] = True

            if r_rows:
                for x in r_rows:
                    row = {
                        'headline': x[0],
                        'body': x[1],
                        'creator': x[2],
                        'time': x[3]
                    }
                    message['rows'].append(row)
            else:
                message['rows'].append({
                    'headline': '',
                    'body': 'No replies yet...',
                    'creator': '',
                    'time': ''
                })
        else:
            message['errors'].append(1007)
    else:
        message['errors'].append(1001)

    return message
示例#14
0
def logoff(username, token):
    message = h.msg()
    query = "UPDATE users SET time = ? WHERE name = ? and token = ?"
    qvals = (28800, username, token)
    if h.db_do(query, qvals, sys_db):
        message['success'] = True
    else:
        message['errors'].append(1002)
    return message
示例#15
0
def delete(lecture_id):
    """Smaže cvičení"""

    lecture = Lecture.get( lecture_id )
    user = getUser()

    if not ( user.inRole("master") or lecture.lector == user.login):
        return unauthorized()


    answer = request.forms.get("answer") 
    if answer:
        if answer == "Ne": redirect("/lectures")
        if answer == "Ano":
            lecture.remove()
            msg("Cvičení smazáno","success")
            redirect("/lectures")
            
    return template("question", {"question":"Skutečně chcete smazat cvičení '%s'" % lecture.name } )    
示例#16
0
def delete(lecture_id):
    """Smaže cvičení"""

    lecture = Lecture.get(lecture_id)
    user = getUser()

    if not (user.inRole("master") or lecture.lector == user.login):
        return unauthorized()

    answer = request.forms.get("answer")
    if answer:
        if answer == "Ne": redirect("/lectures")
        if answer == "Ano":
            lecture.remove()
            msg("Cvičení smazáno", "success")
            redirect("/lectures")

    return template(
        "question",
        {"question": "Skutečně chcete smazat cvičení '%s'" % lecture.name})
示例#17
0
def join(username, d):
    message = h.msg()
    pw = auth.create_password_hash(d[u'password'])
    now = int(time.time())
    query = 'INSERT INTO users (name, password, time, bio, contact, url) VALUES(?, ?, ?, ?, ?, ?)'
    qvals = (username, pw, now, d[u'bio'], d[u'contact'], d[u'url'])
    if h.db_do(query, qvals, sys_db):
        message['success'] = True
        message['user'] = username
    else:
        message['errors'].append(1002)
    return message
示例#18
0
def edit(filename):

    from ita import Loader
    l = Loader("sablony")

    allowed = (path for path, content in l.getPathsOnly())

    if not filename in allowed:
        msg("Integrita narušena", "error")
        redirect("/templates")

    content = request.forms.get("content")
    if content:
        try:
            save = l.save
        except AttributeError:
            msg("Současný Loader nepodporuje ukládání", "error")
            redirect(request.path)
        save(filename, content)

        msg("Změny uloženy", "success")
        redirect(request.path)

    with open(filename, "rb") as f:
        content = b"".join(f.readlines())

    return template("templates_edit", content=content)
示例#19
0
def list(target, d):
    message = h.msg()
    val = d[u'value'] * 10
    board_db = False
    if d[u'board']:
        if os.path.isfile('./bb/{}.sqlite'.format(d[u'board'])):
            board_db = './bb/{}.sqlite'.format(d[u'board'])

    if target == 'board':
        db_conn = sqlite3.connect(sys_db)
        c = db_conn.cursor()
        query = "SELECT * FROM boards ORDER BY name ASC LIMIT 10 OFFSET 0"
        rows = h.db_do(query, '', sys_db, False)
        for x in rows:
            row = {'headline': x[0], 'body': x[3], 'id': 0}
            message['rows'].append(row)
        if len(rows):
            message['success'] = True
        else:
            message['errors'].append(1007)
    elif d[u'board'] and board_db:
        if target == 'topic':
            query = 'SELECT rowid, headline, body, creator, creation_time FROM bb WHERE type = ? ORDER BY rowid ASC'
            qvals = ('topic', )
        elif target == 'post':
            if d[u'topic']:
                query = 'SELECT rowid, headline, body, creator, creation_time FROM bb WHERE type = ? and parent_id = ? ORDER BY creation_time DESC'
                qvals = ('post', d[u'topic'])
            else:
                query = False
                qvals = False
                message['errors'].append(1005)

        if query and qvals:
            rows = h.db_do(query, qvals, board_db, False)
            for x in rows:
                row = {
                    'id': x[0],
                    'headline': x[1],
                    'body': x[2],
                    'creator': x[3],
                    'time': x[4]
                }
                message['rows'].append(row)
            if len(rows):
                message['success'] = True
            else:
                message['errors'].append(1007)
    else:
        message['errors'].append(1001)

    return message
示例#20
0
def delete_user(username, password):
    message = h.msg()
    if auth.verify_password(username, password):
        password = auth.create_password_hash(password)
        query = "DELETE FROM users WHERE name = ? and password = ?"
        qvals = (username, password)
        if h.db_do(query, qvals, sys_db):
            message['success'] = True
        else:
            message['errors'].append(1003)
    else:
        message['errors'].append(1002)
    return message
示例#21
0
def show(lecture_id):
    """Zobrazení a odevzdávání zadání """

    usr = getUser()
    lec = Lecture.get(lecture_id)

    if not lec: return HTTPError(404, "Cvičení nebylo nalezeno")

    if not lec.isActive():
        msg("Cvičení není aktivní", "error")
        redirect("/assigments")

    assigment = Assigment.getUnique(lecture_id, usr.login)

    if not assigment:
        assigment = Assigment.create(lec.lecture_id, lec.generate(), usr.login)
        msg("Cvičení bylo vygenerováno", "success")

    if request.method == 'POST' and request.files.response:
        try:
            assigment.respond(request.files.response.file.read())
            msgTxt = "Řešení bylo úspěšně odesláno"

            if request.is_xhr:
                return HTTPResponse({
                    "type": "success",
                    "msg": msgTxt
                })
            msg(msgTxt, "success")

        except Exception as e:
            msgTxt = "Chyba při odesílání řešení - %s" % e

            if request.is_xhr:
                return HTTPResponse({
                    "type": "error",
                    "msg": msgTxt
                })

            msg(msgTxt, "error")

        redirect(request.path)

    return template("assigments_show", {
        "assigment": assigment,
        "lecture": lec
    })
示例#22
0
def logon(username, d):
    message = h.msg()
    valid = auth.verify_password(username, d[u'password'])
    if valid:
        new_token = auth.create_session_token(username)
        current = int(time.time())
        query = "UPDATE users SET token = ?, time = ? WHERE name = ?"
        qvals = (new_token, current, username)
        if h.db_do(query, qvals, sys_db):
            message['success'] = True
            message['token'] = new_token
        else:
            message['errors'].append(1003)
    else:
        message['errors'].append(1002)
    return message
示例#23
0
def show(lecture_id):
    """Zobrazení a odevzdávání zadání """
                  
    usr = getUser()
    lec = Lecture.get( lecture_id );
    
    if not lec: return HTTPError(404, "Cvičení nebylo nalezeno")

    if not lec.isActive():
        msg("Cvičení není aktivní", "error")
        redirect("/assigments");
                      
    assigment = Assigment.getUnique( lecture_id, usr.login ) 
    
    if not assigment:
        assigment = Assigment.create( lec.lecture_id, lec.generate(), usr.login )
        msg("Cvičení bylo vygenerováno", "success")
        
    if request.method == 'POST' and request.files.response:
        try:        
            assigment.respond( request.files.response.file.read() )
            msgTxt = "Řešení bylo úspěšně odesláno";

            if request.is_xhr:
                 return HTTPResponse({"type": "success", "msg": msgTxt});
            msg(msgTxt ,"success")
            
        except Exception as e:
           msgTxt = "Chyba při odesílání řešení - %s" % e 
           
           if request.is_xhr:
                 return HTTPResponse({"type": "error", "msg": msgTxt});
                 
           msg(msgTxt, "error")
        
        redirect(request.path)
            
    return template("assigments_show", {"assigment" : assigment, "lecture": lec } )    
示例#24
0
    def runTest(self):
        self.connection.create_domain(settings.test_domains[0])
        helpers.msg(self, 'Test Domain created')
        helpers.eventualConsistencySleep()

        self.assertTrue(self.connection.has_domain(settings.test_domains[0]))
示例#25
0
 def setUp(self):
     self.connection = aws_simpledb.SimpleDB()
     if not self.connection.has_domain(settings.test_domains[0]):
         helpers.msg(self, 'Create test domain')
         self.connection.create_domain(settings.test_domains[0])
         helpers.eventualConsistencySleep()