Began refactoring django_nova into django_openstack and submodules
This commit is contained in:
parent
03dce1929d
commit
9ff4f407d1
14
.bzrignore
14
.bzrignore
@ -1,10 +1,10 @@
|
||||
django-nova/.installed.cfg
|
||||
django-nova/bin
|
||||
django-nova/develop-eggs/
|
||||
django-nova/downloads/
|
||||
django-nova/eggs/
|
||||
django-nova/parts/
|
||||
django-nova/src/django_nova.egg-info
|
||||
django-openstack/.installed.cfg
|
||||
django-openstack/bin
|
||||
django-openstack/develop-eggs/
|
||||
django-openstack/downloads/
|
||||
django-openstack/eggs/
|
||||
django-openstack/parts/
|
||||
django-openstack/src/django_nova.egg-info
|
||||
django-nova-syspanel/src/django_nova_syspanel.egg-info
|
||||
openstack-dashboard/.dashboard-venv
|
||||
openstack-dashboard/local/dashboard_openstack.sqlite3
|
||||
|
@ -1,7 +1,7 @@
|
||||
[buildout]
|
||||
parts = python django
|
||||
develop = .
|
||||
eggs = django-nova
|
||||
eggs = django-openstack
|
||||
|
||||
[python]
|
||||
recipe = zc.recipe.egg
|
||||
@ -11,9 +11,9 @@ eggs = ${buildout:eggs}
|
||||
[django]
|
||||
recipe = djangorecipe
|
||||
version = 1.2.4
|
||||
project = django_nova
|
||||
projectegg = django_nova
|
||||
project = django_openstack
|
||||
projectegg = django_openstack
|
||||
settings = testsettings
|
||||
test = django_nova
|
||||
test = django_openstack
|
||||
eggs = ${buildout:eggs}
|
||||
|
@ -5,11 +5,11 @@ def read(fname):
|
||||
return open(os.path.join(os.path.dirname(__file__), fname)).read()
|
||||
|
||||
setup(
|
||||
name = "django-nova",
|
||||
version = "0.1",
|
||||
url = 'https://launchpad.net/django-nova/',
|
||||
name = "django-openstack",
|
||||
version = "0.2",
|
||||
url = 'https://launchpad.net/django-openstack/',
|
||||
license = 'Apache 2.0',
|
||||
description = "A Django interface for OpenStack Nova.",
|
||||
description = "A Django interface for OpenStack.",
|
||||
long_description = read('README'),
|
||||
author = 'Devin Carlen',
|
||||
author_email = 'devin.carlen@gmail.com',
|
@ -24,8 +24,8 @@ import re
|
||||
|
||||
from django import forms
|
||||
from django.contrib.auth import models as auth_models
|
||||
from django_nova.connection import get_nova_admin_connection
|
||||
from django_nova.exceptions import wrap_nova_error
|
||||
from django_openstack.connection import get_nova_admin_connection
|
||||
from django_openstack.exceptions import wrap_nova_error
|
||||
|
||||
|
||||
# TODO: Store this in settings.
|
@ -24,8 +24,8 @@ import boto.ec2.volume
|
||||
import boto.exception
|
||||
import boto.s3
|
||||
from django.conf import settings
|
||||
from django_nova.connection import get_nova_admin_connection
|
||||
from django_nova.exceptions import wrap_nova_error
|
||||
from django_openstack.connection import get_nova_admin_connection
|
||||
from django_openstack.exceptions import wrap_nova_error
|
||||
|
||||
|
||||
class ProjectManager(object):
|
||||
@ -35,12 +35,12 @@ class ProjectManager(object):
|
||||
self.projectManagerId = project.projectManagerId
|
||||
self.region = region
|
||||
|
||||
def get_nova_connection(self):
|
||||
def get_openstack_connection(self):
|
||||
"""
|
||||
Returns a boto connection for a user's project.
|
||||
"""
|
||||
nova = get_nova_admin_connection()
|
||||
return nova.connection_for(self.username,
|
||||
openstack = get_nova_admin_connection()
|
||||
return openstack.connection_for(self.username,
|
||||
self.projectname,
|
||||
clc_url=self.region['endpoint'],
|
||||
region=self.region['name'])
|
||||
@ -50,16 +50,16 @@ class ProjectManager(object):
|
||||
Returns a buffer of a zip file containing signed credentials
|
||||
for the project's Nova user.
|
||||
"""
|
||||
nova = get_nova_admin_connection()
|
||||
return nova.get_zip(self.username, self.projectname)
|
||||
openstack = get_nova_admin_connection()
|
||||
return openstack.get_zip(self.username, self.projectname)
|
||||
|
||||
def get_images(self, image_ids=None):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
images = conn.get_all_images(image_ids=image_ids)
|
||||
sorted_images = [i for i in images if i.ownerId == self.username] + \
|
||||
[i for i in images if i.ownerId != self.username]
|
||||
|
||||
return [i for i in sorted_images if i.type == 'machine' and i.location.split('/')[0] != 'nova']
|
||||
return [i for i in sorted_images if i.type == 'machine' and i.location.split('/')[0] != 'openstack']
|
||||
|
||||
def get_image(self, image_id):
|
||||
try:
|
||||
@ -73,12 +73,12 @@ class ProjectManager(object):
|
||||
Removes the image's listing but leaves the image
|
||||
and manifest in the object store in tact.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.deregister_image(image_id)
|
||||
|
||||
@wrap_nova_error
|
||||
def update_image(self, image_id, display_name=None, description=None):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
params = {
|
||||
'ImageId': image_id,
|
||||
'DisplayName': display_name,
|
||||
@ -89,7 +89,7 @@ class ProjectManager(object):
|
||||
@wrap_nova_error
|
||||
def modify_image_attribute(self, image_id, attribute=None, operation=None,
|
||||
groups='all'):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.modify_image_attribute(image_id,
|
||||
attribute=attribute,
|
||||
operation=operation,
|
||||
@ -101,7 +101,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Runs instances of the specified image id.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.run_instances(image_id, **kwargs)
|
||||
|
||||
def get_instance_count(self):
|
||||
@ -118,7 +118,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns all instances in this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
reservations = conn.get_all_instances()
|
||||
instances = []
|
||||
for reservation in reservations:
|
||||
@ -131,8 +131,8 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns detail about the specified instance.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
# TODO: Refactor this once nova's describe_instances filters by instance_id.
|
||||
conn = self.get_openstack_connection()
|
||||
# TODO: Refactor this once openstack's describe_instances filters by instance_id.
|
||||
reservations = conn.get_all_instances()
|
||||
for reservation in reservations:
|
||||
for instance in reservation.instances:
|
||||
@ -142,7 +142,7 @@ class ProjectManager(object):
|
||||
|
||||
@wrap_nova_error
|
||||
def update_instance(self, instance_id, updates):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
params = {'InstanceId': instance_id, 'DisplayName': updates['nickname'],
|
||||
'DisplayDescription': updates['description']}
|
||||
return conn.get_object('UpdateInstance', params,
|
||||
@ -176,7 +176,7 @@ class ProjectManager(object):
|
||||
@wrap_nova_error
|
||||
def terminate_instance(self, instance_id):
|
||||
""" Terminates the specified instance within this project. """
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
conn.terminate_instances([instance_id])
|
||||
|
||||
@wrap_nova_error
|
||||
@ -184,7 +184,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns all security groups associated with this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
groups = []
|
||||
|
||||
for g in conn.get_all_security_groups():
|
||||
@ -199,7 +199,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns the specified security group for this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
|
||||
try:
|
||||
return conn.get_all_security_groups(groupnames=name.encode('ASCII'))[0]
|
||||
@ -218,7 +218,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Creates a new security group in this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.create_security_group(name, description)
|
||||
|
||||
@wrap_nova_error
|
||||
@ -226,7 +226,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Deletes a security group from the project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.delete_security_group(name = name)
|
||||
|
||||
@wrap_nova_error
|
||||
@ -234,7 +234,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Authorizes a rule for the specified security group.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.authorize_security_group (
|
||||
group_name = group_name,
|
||||
ip_protocol = ip_protocol,
|
||||
@ -248,7 +248,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Revokes a rule for the specified security group.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.revoke_security_group (
|
||||
group_name = group_name,
|
||||
ip_protocol = ip_protocol,
|
||||
@ -262,7 +262,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns all key pairs associated with this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
keys = []
|
||||
|
||||
for k in conn.get_all_key_pairs():
|
||||
@ -277,7 +277,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns the specified security group for this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
|
||||
try:
|
||||
return conn.get_all_key_pairs(keynames=name.encode('ASCII'))[0]
|
||||
@ -296,7 +296,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Creates a new key pair for this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.create_key_pair(name)
|
||||
|
||||
@wrap_nova_error
|
||||
@ -304,7 +304,7 @@ class ProjectManager(object):
|
||||
"""
|
||||
Deletes a new key pair from this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
conn.delete_key_pair(name)
|
||||
|
||||
@wrap_nova_error
|
||||
@ -312,29 +312,29 @@ class ProjectManager(object):
|
||||
"""
|
||||
Returns all volumes in this project.
|
||||
"""
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.get_all_volumes()
|
||||
|
||||
@wrap_nova_error
|
||||
def create_volume(self, size, display_name=None, display_description=None,
|
||||
snapshot=None):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
params = {'Size': size, 'DisplayName': display_name,
|
||||
'DisplayDescription': display_description}
|
||||
return conn.get_object('CreateVolume', params, boto.ec2.volume.Volume)
|
||||
|
||||
@wrap_nova_error
|
||||
def delete_volume(self, volume_id):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.delete_volume(volume_id)
|
||||
|
||||
@wrap_nova_error
|
||||
def attach_volume(self, volume_id, instance_id, device):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.attach_volume(volume_id, instance_id, device)
|
||||
|
||||
@wrap_nova_error
|
||||
def detach_volume(self, volume_id):
|
||||
conn = self.get_nova_connection()
|
||||
conn = self.get_openstack_connection()
|
||||
return conn.detach_volume(volume_id)
|
||||
|
@ -30,7 +30,7 @@ from django.core import mail
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.template.loader import render_to_string
|
||||
from django_nova.connection import get_nova_admin_connection
|
||||
from django_openstack.connection import get_nova_admin_connection
|
||||
|
||||
|
||||
SHA1_RE=re.compile('^[a-f0-9]{40}$')
|
||||
@ -102,7 +102,7 @@ def credentials_post_save(sender, instance, created, *args, **kwargs):
|
||||
message.send(fail_silently=False)
|
||||
post_save.connect(credentials_post_save,
|
||||
CredentialsAuthorization,
|
||||
dispatch_uid='django_nova.CredentialsAuthorization.post_save')
|
||||
dispatch_uid='django_openstack.CredentialsAuthorization.post_save')
|
||||
|
||||
|
||||
def user_post_save(sender, instance, created, *args, **kwargs):
|
||||
@ -120,4 +120,4 @@ def user_post_save(sender, instance, created, *args, **kwargs):
|
||||
nova.create_user(instance.username)
|
||||
post_save.connect(user_post_save,
|
||||
auth_models.User,
|
||||
dispatch_uid='django_nova.User.post_save')
|
||||
dispatch_uid='django_openstack.User.post_save')
|
@ -24,9 +24,9 @@ from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.http import Http404
|
||||
from django_nova import manager
|
||||
from django_nova.connection import get_nova_admin_connection
|
||||
from django_nova.exceptions import wrap_nova_error
|
||||
from django_openstack import manager
|
||||
from django_openstack.connection import get_nova_admin_connection
|
||||
from django_openstack.exceptions import wrap_nova_error
|
||||
|
||||
|
||||
@wrap_nova_error
|
@ -26,8 +26,8 @@ import nova_adminclient as adminclient
|
||||
from django import test
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import models as auth_models
|
||||
from django_nova import manager
|
||||
from django_nova import shortcuts
|
||||
from django_openstack import manager
|
||||
from django_openstack import shortcuts
|
||||
|
||||
|
||||
TEST_PROJECT = 'test'
|
@ -23,8 +23,8 @@ Unit tests for credential views.
|
||||
import mox
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_nova import models
|
||||
from django_nova.tests.view_tests.base import BaseViewTests
|
||||
from django_openstack import models
|
||||
from django_openstack.tests.view_tests.base import BaseViewTests
|
||||
|
||||
|
||||
class CredentialViewTests(BaseViewTests):
|
||||
@ -36,9 +36,9 @@ class CredentialViewTests(BaseViewTests):
|
||||
.AndReturn(None)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.get(reverse('nova_credentials_authorize',
|
||||
res = self.client.get(reverse('openstack_credentials_authorize',
|
||||
args=[auth_token]))
|
||||
self.assertTemplateUsed(res, 'django_nova/credentials/expired.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/credentials/expired.html')
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
@ -59,7 +59,7 @@ class CredentialViewTests(BaseViewTests):
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.get(reverse('nova_credentials_authorize',
|
||||
res = self.client.get(reverse('openstack_credentials_authorize',
|
||||
args=[auth_token]))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertEqual(res['Content-Disposition'],
|
@ -25,9 +25,9 @@ import boto.ec2.instance
|
||||
import mox
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_nova import forms
|
||||
from django_nova import shortcuts
|
||||
from django_nova.tests.view_tests.base import BaseProjectViewTests, TEST_PROJECT
|
||||
from django_openstack import forms
|
||||
from django_openstack import shortcuts
|
||||
from django_openstack.tests.view_tests.base import BaseProjectViewTests, TEST_PROJECT
|
||||
|
||||
|
||||
TEST_IMAGE_ID = 'ami_test'
|
||||
@ -56,7 +56,7 @@ class ImageViewTests(BaseProjectViewTests):
|
||||
|
||||
res = self.client.get(reverse('nova_images', args=[TEST_PROJECT]))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'django_nova/images/index.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/images/index.html')
|
||||
self.assertEqual(len(res.context['image_lists']), 3)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
@ -75,7 +75,7 @@ class ImageViewTests(BaseProjectViewTests):
|
||||
args = [TEST_PROJECT, TEST_IMAGE_ID]
|
||||
res = self.client.get(reverse('nova_images_launch', args=args))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'django_nova/images/launch.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/images/launch.html')
|
||||
self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
@ -133,7 +133,7 @@ class ImageViewTests(BaseProjectViewTests):
|
||||
res = self.client.get(reverse('nova_images_detail',
|
||||
args=[TEST_PROJECT, TEST_IMAGE_ID]))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'django_nova/images/index.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/images/index.html')
|
||||
self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
@ -202,7 +202,7 @@ class ImageViewTests(BaseProjectViewTests):
|
||||
args = [TEST_PROJECT, TEST_IMAGE_ID]
|
||||
res = self.client.get(reverse('nova_images_update', args=args))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'django_nova/images/edit.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/images/edit.html')
|
||||
self.assertEqual(res.context['ami'].id, TEST_IMAGE_ID)
|
||||
|
||||
self.mox.VerifyAll()
|
@ -24,7 +24,8 @@ import boto.ec2.instance
|
||||
import mox
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_nova.tests.view_tests.base import BaseProjectViewTests, TEST_PROJECT
|
||||
from django_openstack.tests.view_tests.base import (BaseProjectViewTests,
|
||||
TEST_PROJECT)
|
||||
|
||||
|
||||
TEST_INSTANCE_ID = 'i-abcdefgh'
|
||||
@ -39,7 +40,7 @@ class InstanceViewTests(BaseProjectViewTests):
|
||||
|
||||
res = self.client.get(reverse('nova_instances', args=[TEST_PROJECT]))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'django_nova/instances/index.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/instances/index.html')
|
||||
self.assertEqual(len(res.context['instances']), 0)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
@ -60,7 +61,7 @@ class InstanceViewTests(BaseProjectViewTests):
|
||||
res = self.client.get(reverse('nova_instances_detail',
|
||||
args=[TEST_PROJECT, TEST_INSTANCE_ID]))
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'django_nova/instances/index.html')
|
||||
self.assertTemplateUsed(res, 'django_openstack/instances/index.html')
|
||||
self.assertEqual(res.context['selected_instance'].id, instance.id)
|
||||
|
||||
self.mox.VerifyAll()
|
@ -24,8 +24,8 @@ import boto.ec2.keypair
|
||||
import mox
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_nova.tests.view_tests.base import (BaseProjectViewTests,
|
||||
TEST_PROJECT)
|
||||
from django_openstack.tests.view_tests.base import (BaseProjectViewTests,
|
||||
TEST_PROJECT)
|
||||
|
||||
|
||||
TEST_KEY = 'test_key'
|
||||
@ -41,7 +41,7 @@ class KeyPairViewTests(BaseProjectViewTests):
|
||||
response = self.client.get(reverse('nova_keypairs',
|
||||
args=[TEST_PROJECT]))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'django_nova/keypairs/index.html')
|
||||
self.assertTemplateUsed(response, 'django_openstack/keypairs/index.html')
|
||||
self.assertEqual(len(response.context['keypairs']), 0)
|
||||
|
||||
self.mox.VerifyAll()
|
@ -21,8 +21,8 @@ Unit tests for region views.
|
||||
"""
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_nova.tests.view_tests.base import BaseViewTests
|
||||
from django_nova import shortcuts
|
||||
from django_openstack.tests.view_tests.base import BaseViewTests
|
||||
from django_openstack import shortcuts
|
||||
|
||||
|
||||
TEST_REGION = 'one'
|
@ -24,9 +24,9 @@ import boto.ec2.volume
|
||||
import mox
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django_nova import forms
|
||||
from django_nova.tests.view_tests.base import (BaseProjectViewTests,
|
||||
TEST_PROJECT)
|
||||
from django_openstack import forms
|
||||
from django_openstack.tests.view_tests.base import (BaseProjectViewTests,
|
||||
TEST_PROJECT)
|
||||
|
||||
|
||||
TEST_VOLUME = 'vol-0000001'
|
||||
@ -55,7 +55,7 @@ class VolumeTests(BaseProjectViewTests):
|
||||
response = self.client.get(reverse('nova_volumes',
|
||||
args=[TEST_PROJECT]))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'django_nova/volumes/index.html')
|
||||
self.assertTemplateUsed(response, 'django_openstack/volumes/index.html')
|
||||
self.assertEqual(len(response.context['volumes']), 0)
|
||||
|
||||
self.mox.VerifyAll()
|
@ -4,12 +4,12 @@ ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||
DEBUG = True
|
||||
TESTSERVER = 'http://testserver'
|
||||
DATABASE_ENGINE = 'sqlite3'
|
||||
DATABASE_NAME = '/tmp/django-nova.db'
|
||||
DATABASE_NAME = '/tmp/django-openstack.db'
|
||||
INSTALLED_APPS = ['django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django_nova']
|
||||
ROOT_URLCONF = 'django_nova.tests.urls'
|
||||
'django_openstack']
|
||||
ROOT_URLCONF = 'django_openstack.tests.urls'
|
||||
TEMPLATE_DIRS = (
|
||||
os.path.join(ROOT_PATH, 'tests', 'templates')
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user