Revision 78dec216

b/aquarium/admin.py
1
from django.contrib import admin
2
from django import forms
3
from django.db import models
4
from django.utils.encoding import iri_to_uri
5
from django.utils.translation import gettext_lazy as _
6
from models import  *
7

  
8
class LimitForm(forms.ModelForm):
9
    class Meta:
10
        model = Limit
11

  
12
class LimitAdmin(admin.ModelAdmin):
13
    ""    
14

  
15
    form = LimitForm
16

  
17
class UserForm(forms.ModelForm):
18
    class Meta:
19
        model = OceanUser
20

  
21
class UserAdmin(admin.ModelAdmin):
22
    ""    
23
    form = UserForm
24

  
25

  
26
class UserLimitForm(forms.ModelForm):
27
    class Meta:
28
        model = UserLimit
29

  
30
class UserLimitAdmin(admin.ModelAdmin):
31
    ""    
32

  
33
    form = UserLimitForm
34

  
35
class FlavorForm(forms.ModelForm):
36
    class Meta:
37
        model = Flavor
38

  
39
class FlavorAdmin(admin.ModelAdmin):
40
    ""    
41

  
42
    form = FlavorForm
43

  
44

  
45
class VirtualMachineForm(forms.ModelForm):
46
    class Meta:
47
        model = VirtualMachine
48

  
49
class VirtualMachineAdmin(admin.ModelAdmin):
50
    ""    
51

  
52
    form = VirtualMachineForm
53

  
54

  
55
class ChargingLogForm(forms.ModelForm):
56
    class Meta:
57
        model = ChargingLog
58

  
59
class ChargingLogAdmin(admin.ModelAdmin):
60
    ""    
61

  
62
    form = ChargingLogForm
63

  
64
admin.site.register(Limit, LimitAdmin)
65
admin.site.register(OceanUser, UserAdmin)
66
admin.site.register(UserLimit, UserLimitAdmin)
67
admin.site.register(Flavor, FlavorAdmin)
68
admin.site.register(VirtualMachine, VirtualMachineAdmin)
69
admin.site.register(ChargingLog, ChargingLogAdmin)
70

  
b/aquarium/models.py
1
# vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
2

  
3
from django.db import models
4
from django.contrib.auth.models import User
5

  
6
class Limit(models.Model):
7
    description = models.CharField(max_length=45)
8

  
9
    def __unicode__(self):
10
        return self.description
11

  
12

  
13
class OceanUser(models.Model):
14
    name = models.CharField(max_length=255)
15
    credit = models.IntegerField()
16
    quota = models.IntegerField()
17
    created = models.DateField()
18
    monthly_rate = models.IntegerField()
19
    user = models.ForeignKey(User,  blank=True, null=True)
20
    limits = models.ManyToManyField(Limit, through='UserLimit')
21

  
22
    def __unicode__(self):
23
        return self.name
24

  
25
class UserLimit(models.Model):
26
    user = models.ForeignKey(OceanUser)
27
    limit = models.ForeignKey(Limit)
28
    value = models.IntegerField()
29

  
30
    class Meta:
31
        unique_together = ('user', 'limit')
32

  
33
    def __unicode__(self):
34
        return u'Limit %s for user %s: %d' % (self.limit, self.user, self.value)
35

  
36

  
37
class Flavor(models.Model):
38
    name = models.CharField(max_length=255, unique=True)
39
    description = models.CharField(max_length=1000)
40
    cost_active = models.PositiveIntegerField()
41
    cost_inactive = models.PositiveIntegerField()
42

  
43
    def __unicode__(self):
44
        return self.name
45

  
46
class VirtualMachine(models.Model):
47
    STATES = (
48
            (0, 'down'),
49
            (1, 'up'),
50
            # FIXME
51
    )
52

  
53
    name = models.CharField(max_length=255)
54
    created = models.DateTimeField()
55
    state = models.IntegerField(choices=STATES)
56
    started = models.DateTimeField()
57
    owner = models.ForeignKey(OceanUser)
58
    flavor = models.ForeignKey(Flavor)
59

  
60
    class Meta:
61
        verbose_name = u'Virtual machine'
62
        get_latest_by = 'created'
63

  
64
    def __unicode__(self):
65
        return self.name
66

  
67
class ChargingLog(models.Model):
68
    vm = models.ForeignKey(VirtualMachine)
69
    date = models.DateTimeField()
70
    credit = models.IntegerField()
71
    message = models.CharField(max_length=1000)
72

  
73
    class Meta:
74
        verbose_name = u'Charging log'
b/aquarium/tests.py
1
"""
2
This file demonstrates two different styles of tests (one doctest and one
3
unittest). These will both pass when you run "manage.py test".
4

  
5
Replace these with more appropriate tests for your application.
6
"""
7

  
8
from django.test import TestCase
9

  
10
class SimpleTest(TestCase):
11
    def test_basic_addition(self):
12
        """
13
        Tests that 1 + 1 always equals 2.
14
        """
15
        self.failUnlessEqual(1 + 1, 2)
16

  
17
__test__ = {"doctest": """
18
Another way to test that 1 + 1 is equal to 2.
19

  
20
>>> 1 + 1 == 2
21
True
22
"""}
23

  
b/aquarium/views.py
1
# Create your views here.
/dev/null
1
# vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
2

  
3
from django.db import models
4

  
5
class Limit(models.Model):
6
    description = models.CharField(max_length=45)
7

  
8
    def __unicode__(self):
9
        return self.description
10

  
11

  
12
class OceanUser(models.Model):
13
    name = models.CharField(max_length=255)
14
    credit = models.IntegerField()
15
    quota = models.IntegerField()
16
    created = models.DateField()
17
    monthly_rate = models.IntegerField()
18
    limits = models.ManyToManyField(Limit, through='UserLimit')
19

  
20
    def __unicode__(self):
21
        return self.name
22

  
23
class UserLimit(models.Model):
24
    user = models.ForeignKey(User)
25
    limit = models.ForeignKey(Limit)
26
    value = models.IntegerField()
27

  
28
    class Meta:
29
        unique_together = ('user', 'limit')
30

  
31
    def __unicode__(self):
32
        return u'Limit %s for user %s: %d' % (self.limit, self.user, self.value)
33

  
34

  
35
class Flavor(models.Model):
36
    name = models.CharField(max_length=255, unique=True)
37
    description = models.CharField(max_length=1000)
38
    cost_active = models.PositiveIntegerField()
39
    cost_inactive = models.PositiveIntegerField()
40

  
41
    def __unicode__(self):
42
        return self.name
43

  
44
class VirtualMachine(models.Model):
45
    STATES = (
46
            (0, 'down'),
47
            (1, 'up'),
48
            # FIXME
49
    )
50

  
51
    name = models.CharField(max_length=255)
52
    created = models.DateTimeField()
53
    state = models.IntegerField(choices=STATES)
54
    started = models.DateTimeField()
55
    owner = models.ForeignKey(User)
56
    flavor = models.ForeignKey(Flavor)
57

  
58
    class Meta:
59
        verbose_name = u'Virtual machine'
60
        get_latest_by = 'created'
61

  
62
    def __unicode__(self):
63
        return self.name
64

  
65
class ChargingLog(models.Model):
66
    vm = models.ForeignKey(VirtualMachine)
67
    date = models.DateTimeField()
68
    credit = models.IntegerField()
69
    message = models.CharField(max_length=1000)
70

  
71
    class Meta:
72
        verbose_name = u'Charging log'
b/settings.py.dist
13 13

  
14 14
DATABASES = {
15 15
    'default': {
16
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
17
        'NAME': '',                      # Or path to database file if using sqlite3.
16
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
17
        'NAME': 'aquarium.db',                      # Or path to database file if using sqlite3.
18 18
        'USER': '',                      # Not used with sqlite3.
19 19
        'PASSWORD': '',                  # Not used with sqlite3.
20 20
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
......
77 77
TEMPLATE_CONTEXT_PROCESSORS = (
78 78
    "django.core.context_processors.request",
79 79
    'django.core.context_processors.i18n',
80
    'django.contrib.auth.context_processors.auth'
80 81
)
81 82

  
82 83
MIDDLEWARE_CLASSES = (
......
102 103
    'django.contrib.sessions',
103 104
    'django.contrib.sites',
104 105
    'django.contrib.messages',
105
    # 'django.contrib.admin',
106
    'django.contrib.admin',
106 107
    # 'django.contrib.admindocs',
107 108
    'synnefo.auth',
108 109
    'synnefo.api',
109 110
    'synnefo.ui',
111
	'synnefo.aquarium'
110 112
)
111 113

  
112 114
GANETI_CLUSTER_INFO = None #('ganeti.example.org', 5080)
b/urls.py
4 4
#
5 5

  
6 6
from django.conf.urls.defaults import *
7
from django.contrib import admin
8

  
9
admin.autodiscover()
7 10

  
8 11
urlpatterns = patterns('',
9 12
    (r'^lang/$', 'synnefo.ui.i18n.set_language'),
10 13
    (r'^auth/api/', include('synnefo.auth.urls')),
11 14
    (r'^api/', include('synnefo.api.urls')),
12 15
    (r'^', include('synnefo.ui.urls')),
13
)
16
    (r'^admin/(.*)', admin.site.root)
17
)

Also available in: Unified diff