~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/database.py

  • Committer: William Grant
  • Date: 2009-03-05 08:00:42 UTC
  • Revision ID: grantw@unimelb.edu.au-20090305080042-d347eerb5enjtg72
Remove an extra argument to console_response() in console_reset(). Fixes
Google Code issue 121, where the console reset button reset the console
but produced an error dialog.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
from storm.locals import create_database, Store, Int, Unicode, DateTime, \
31
31
                         Reference, ReferenceSet, Bool, Storm, Desc
32
 
from storm.exceptions import NotOneError, IntegrityError
 
32
from storm.exceptions import NotOneError
33
33
 
34
34
import ivle.conf
35
 
from ivle.worksheet.rst import rst
36
35
 
37
36
__all__ = ['get_store',
38
37
            'User',
266
265
 
267
266
    worksheets = ReferenceSet(id, 
268
267
        'Worksheet.offering_id', 
269
 
        order_by="seq_no"
 
268
        order_by="Worksheet.seq_no"
270
269
    )
271
270
 
272
271
    __init__ = _kwarg_init
425
424
    include = Unicode()
426
425
    num_rows = Int()
427
426
 
428
 
    worksheet_exercises =  ReferenceSet(id,
429
 
        'WorksheetExercise.exercise_id')
430
 
 
431
427
    worksheets = ReferenceSet(id,
432
428
        'WorksheetExercise.exercise_id',
433
429
        'WorksheetExercise.worksheet_id',
434
430
        'Worksheet.id'
435
431
    )
436
432
    
437
 
    test_suites = ReferenceSet(id, 
438
 
        'TestSuite.exercise_id',
439
 
        order_by='seq_no')
 
433
    test_suites = ReferenceSet(id, 'TestSuite.exercise_id')
440
434
 
441
435
    __init__ = _kwarg_init
442
436
 
445
439
 
446
440
    def get_permissions(self, user):
447
441
        perms = set()
448
 
        roles = set()
449
442
        if user is not None:
450
443
            if user.admin:
451
444
                perms.add('edit')
452
445
                perms.add('view')
453
 
            elif 'lecturer' in set((e.role for e in user.active_enrolments)):
454
 
                perms.add('edit')
455
 
                perms.add('view')
456
 
            
457
446
        return perms
458
 
    
459
 
    def get_description(self):
460
 
        return rst(self.description)
461
 
 
462
 
    def delete(self):
463
 
        """Deletes the exercise, providing it has no associated worksheets."""
464
 
        if (self.worksheet_exercises.count() > 0):
465
 
            raise IntegrityError()
466
 
        for suite in self.test_suites:
467
 
            suite.delete()
468
 
        Store.of(self).remove(self)
469
447
 
470
448
class Worksheet(Storm):
471
449
    __storm_table__ = "worksheet"
488
466
    # Use worksheet_exercises to get access to the *active* WorksheetExercise
489
467
    # objects binding worksheets to exercises. This is required to access the
490
468
    # "optional" field.
491
 
 
492
469
    @property
493
470
    def worksheet_exercises(self):
494
471
        return self.all_worksheet_exercises.find(active=True)
510
487
        return store.find(cls, cls.subject == unicode(subjectname),
511
488
            cls.name == unicode(worksheetname)).one()
512
489
 
513
 
    def remove_all_exercises(self):
 
490
    def remove_all_exercises(self, store):
514
491
        """
515
492
        Remove all exercises from this worksheet.
516
493
        This does not delete the exercises themselves. It just removes them
517
494
        from the worksheet.
518
495
        """
519
 
        store = Store.of(self)
520
 
        for ws_ex in self.all_worksheet_exercises:
521
 
            if ws_ex.saves.count() > 0 or ws_ex.attempts.count() > 0:
522
 
                raise IntegrityError()
523
496
        store.find(WorksheetExercise,
524
497
            WorksheetExercise.worksheet == self).remove()
525
498
            
526
499
    def get_permissions(self, user):
527
500
        return self.offering.get_permissions(user)
528
 
    
529
 
    def get_xml(self):
530
 
        """Returns the xml of this worksheet, converts from rst if required."""
531
 
        if self.format == u'rst':
532
 
            ws_xml = rst(self.data)
533
 
            return ws_xml
534
 
        else:
535
 
            return self.data
536
 
    
537
 
    def delete(self):
538
 
        """Deletes the worksheet, provided it has no attempts on any exercises.
539
 
        
540
 
        Returns True if delete succeeded, or False if this worksheet has
541
 
        attempts attached."""
542
 
        for ws_ex in self.all_worksheet_exercises:
543
 
            if ws_ex.saves.count() > 0 or ws_ex.attempts.count() > 0:
544
 
                raise IntegrityError()
545
 
        
546
 
        self.remove_all_exercises()
547
 
        Store.of(self).remove(self)
548
 
        
 
501
 
549
502
class WorksheetExercise(Storm):
550
503
    __storm_table__ = "worksheet_exercise"
551
504
    
570
523
 
571
524
    def get_permissions(self, user):
572
525
        return self.worksheet.get_permissions(user)
573
 
    
574
526
 
575
527
class ExerciseSave(Storm):
576
528
    """
635
587
    function = Unicode()
636
588
    stdin = Unicode()
637
589
    exercise = Reference(exercise_id, Exercise.id)
638
 
    test_cases = ReferenceSet(suiteid, 'TestCase.suiteid', order_by="seq_no")
639
 
    variables = ReferenceSet(suiteid, 'TestSuiteVar.suiteid', order_by='arg_no')
640
 
    
641
 
    def delete(self):
642
 
        """Delete this suite, without asking questions."""
643
 
        for vaariable in self.variables:
644
 
            variable.delete()
645
 
        for test_case in self.test_cases:
646
 
            test_case.delete()
647
 
        Store.of(self).remove(self)
 
590
    test_cases = ReferenceSet(suiteid, 'TestCase.suiteid')
 
591
    variables = ReferenceSet(suiteid, 'TestSuiteVar.suiteid')
648
592
 
649
593
class TestCase(Storm):
650
594
    """A TestCase is a member of a TestSuite.
664
608
    parts = ReferenceSet(testid, "TestCasePart.testid")
665
609
    
666
610
    __init__ = _kwarg_init
667
 
    
668
 
    def delete(self):
669
 
        for part in self.parts:
670
 
            part.delete()
671
 
        Store.of(self).remove(self)
672
611
 
673
612
class TestSuiteVar(Storm):
674
613
    """A container for the arguments of a Test Suite"""
686
625
    
687
626
    __init__ = _kwarg_init
688
627
    
689
 
    def delete(self):
690
 
        Store.of(self).remove(self)
691
 
    
692
628
class TestCasePart(Storm):
693
629
    """A container for the test elements of a Test Case"""
694
630
    __storm_table__ = "test_case_part"
705
641
    test = Reference(testid, "TestCase.testid")
706
642
    
707
643
    __init__ = _kwarg_init
708
 
    
709
 
    def delete(self):
710
 
        Store.of(self).remove(self)