resolve conflicts
| 
						 | 
					@ -70,7 +70,7 @@ def letscowork(request):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def blog(request):
 | 
					def blog(request):
 | 
				
			||||||
    tags = ["digitalglarus"]
 | 
					    tags = ["digitalglarus"]
 | 
				
			||||||
    posts = Post.objects.filter_by_language(get_language()).filter(tags__name__in=tags)
 | 
					    posts = Post.objects.filter_by_language(get_language()).filter(tags__name__in=tags, publish=True)
 | 
				
			||||||
    context = {
 | 
					    context = {
 | 
				
			||||||
        'post_list': posts,
 | 
					        'post_list': posts,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,18 +84,18 @@ INSTALLED_APPS = (
 | 
				
			||||||
    'djangocms_file',
 | 
					    'djangocms_file',
 | 
				
			||||||
    'djangocms_picture',
 | 
					    'djangocms_picture',
 | 
				
			||||||
    'djangocms_video',
 | 
					    'djangocms_video',
 | 
				
			||||||
    # 'djangocms_flash',
 | 
					    'djangocms_flash',
 | 
				
			||||||
    # 'djangocms_googlemap',
 | 
					    'djangocms_googlemap',
 | 
				
			||||||
    # 'djangocms_inherit',
 | 
					    'djangocms_inherit',
 | 
				
			||||||
    # 'djangocms_link',
 | 
					    'djangocms_link',
 | 
				
			||||||
    # 'djangocms_teaser',
 | 
					    'djangocms_teaser',
 | 
				
			||||||
    'djangocms_page_meta',
 | 
					    'djangocms_page_meta',
 | 
				
			||||||
    'djangocms_text_ckeditor',
 | 
					    'djangocms_text_ckeditor',
 | 
				
			||||||
    'djangocms_admin_style',
 | 
					    'djangocms_admin_style',
 | 
				
			||||||
    'cmsplugin_filer_file',
 | 
					    'cmsplugin_filer_file',
 | 
				
			||||||
    'cmsplugin_filer_folder',
 | 
					    'cmsplugin_filer_folder',
 | 
				
			||||||
    'cmsplugin_filer_link',
 | 
					    'cmsplugin_filer_link',
 | 
				
			||||||
    # 'cmsplugin_filer_teaser',
 | 
					     'cmsplugin_filer_teaser',
 | 
				
			||||||
    'cmsplugin_filer_video',
 | 
					    'cmsplugin_filer_video',
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # blog
 | 
					    # blog
 | 
				
			||||||
| 
						 | 
					@ -103,7 +103,7 @@ INSTALLED_APPS = (
 | 
				
			||||||
    'reversion',
 | 
					    'reversion',
 | 
				
			||||||
    # ungleich
 | 
					    # ungleich
 | 
				
			||||||
    'ungleich',
 | 
					    'ungleich',
 | 
				
			||||||
    'ungleich_page',
 | 
					#    'ungleich_page',
 | 
				
			||||||
    'hosting',
 | 
					    'hosting',
 | 
				
			||||||
    'digitalglarus',
 | 
					    'digitalglarus',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,7 +176,7 @@ CMS_TEMPLATES = (
 | 
				
			||||||
DATABASES = {
 | 
					DATABASES = {
 | 
				
			||||||
    'default': {
 | 
					    'default': {
 | 
				
			||||||
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
 | 
					        'ENGINE': 'django.db.backends.postgresql_psycopg2',
 | 
				
			||||||
        'NAME': 'app',
 | 
					        'NAME': 'app_new',
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -280,12 +280,12 @@ CACHES = {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if LOGIN_URL is None:
 | 
					#if LOGIN_URL is None:
 | 
				
			||||||
    LOGIN_URL = APP_ROOT_ENDPOINT + 'login/'
 | 
					#    LOGIN_URL = APP_ROOT_ENDPOINT + 'login/'
 | 
				
			||||||
if LOGOUT_URL is None:
 | 
					#if LOGOUT_URL is None:
 | 
				
			||||||
    LOGOUT_URL = APP_ROOT_ENDPOINT + 'logout/'
 | 
					#    LOGOUT_URL = APP_ROOT_ENDPOINT + 'logout/'
 | 
				
			||||||
if LOGIN_REDIRECT_URL is None:
 | 
					#if LOGIN_REDIRECT_URL is None:
 | 
				
			||||||
    LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT
 | 
					#    LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Static files (CSS, JavaScript, Images)
 | 
					# Static files (CSS, JavaScript, Images)
 | 
				
			||||||
# https://docs.djangoproject.com/en/1.7/howto/static-files/
 | 
					# https://docs.djangoproject.com/en/1.7/howto/static-files/
 | 
				
			||||||
| 
						 | 
					@ -337,6 +337,7 @@ STATICFILES_FINDERS = (
 | 
				
			||||||
THUMBNAIL_PROCESSORS = (
 | 
					THUMBNAIL_PROCESSORS = (
 | 
				
			||||||
    'easy_thumbnails.processors.colorspace',
 | 
					    'easy_thumbnails.processors.colorspace',
 | 
				
			||||||
    'easy_thumbnails.processors.autocrop',
 | 
					    'easy_thumbnails.processors.autocrop',
 | 
				
			||||||
 | 
					    #'easy_thumbnails.processors.scale_and_crop',
 | 
				
			||||||
    'filer.thumbnail_processors.scale_and_crop_with_subject_location',
 | 
					    'filer.thumbnail_processors.scale_and_crop_with_subject_location',
 | 
				
			||||||
    'easy_thumbnails.processors.filters',
 | 
					    'easy_thumbnails.processors.filters',
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -442,6 +443,12 @@ PARLER_LANGUAGES = {1: ({'code': 'en-us'}, {'code': 'de'},)}
 | 
				
			||||||
AUTH_USER_MODEL = 'membership.CustomUser'
 | 
					AUTH_USER_MODEL = 'membership.CustomUser'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALLOWED_HOSTS = [
 | 
				
			||||||
 | 
					    "*"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# PAYMENT
 | 
					# PAYMENT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services"
 | 
					STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,12 @@ from .base import *
 | 
				
			||||||
ADMINS = (
 | 
					ADMINS = (
 | 
				
			||||||
    ('Nico Schottelius', 'nico.schottelius@ungleich.ch'),
 | 
					    ('Nico Schottelius', 'nico.schottelius@ungleich.ch'),
 | 
				
			||||||
    ('Raul Ascencio', 'raul.ascencio@yandex.com'),
 | 
					    ('Raul Ascencio', 'raul.ascencio@yandex.com'),
 | 
				
			||||||
 | 
					    ('Tomislav Rupcic','tmslav@gmail.com'),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
#    ('Sanghee Kim', 'sanghee.kim@ungleich.ch'),
 | 
					#    ('Sanghee Kim', 'sanghee.kim@ungleich.ch'),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MANAGERS = ADMINS
 | 
					#MANAGERS = ADMINS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}')
 | 
					REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,5 @@
 | 
				
			||||||
from django.contrib import admin
 | 
					from django.contrib import admin
 | 
				
			||||||
from .models import RailsBetaUser, VirtualMachineType
 | 
					from .models import VirtualMachineType
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
admin.site.register(RailsBetaUser)
 | 
					 | 
				
			||||||
admin.site.register(VirtualMachineType)
 | 
					admin.site.register(VirtualMachineType)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,41 +10,43 @@ class Command(BaseCommand):
 | 
				
			||||||
        hetzner = {
 | 
					        hetzner = {
 | 
				
			||||||
            'base_price': 10,
 | 
					            'base_price': 10,
 | 
				
			||||||
            'core_price': 10,
 | 
					            'core_price': 10,
 | 
				
			||||||
            'memory_price': 10,
 | 
					            'memory_price': 5,
 | 
				
			||||||
            'disk_size_price': 10,
 | 
					            'disk_size_price': 1,
 | 
				
			||||||
            'description': 'VM auf einzelner HW, Raid1, kein HA'
 | 
					            'description': 'VM auf einzelner HW, Raid1, kein HA',
 | 
				
			||||||
 | 
					            'location':'DE'
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
            'hetzner_nug': {
 | 
					            # 'hetzner_nug': {
 | 
				
			||||||
                'base_price': 5,
 | 
					            #     'base_price': 5,
 | 
				
			||||||
                'memory_price': 2,
 | 
					            #     'memory_price': 2,
 | 
				
			||||||
                'core_price': 2,
 | 
					            #     'core_price': 2,
 | 
				
			||||||
                'disk_size_price': 0.5,
 | 
					            #     'disk_size_price': 0.5,
 | 
				
			||||||
                'description': 'VM ohne Uptime Garantie'
 | 
					            #     'description': 'VM ohne Uptime Garantie'
 | 
				
			||||||
            },
 | 
					            # },
 | 
				
			||||||
            'hetzner': hetzner,
 | 
					            'hetzner': hetzner,
 | 
				
			||||||
            'hetzner_raid6': {
 | 
					            # 'hetzner_raid6': {
 | 
				
			||||||
                'base_price': hetzner['base_price']*1.2,
 | 
					            #     'base_price': hetzner['base_price']*1.2,
 | 
				
			||||||
                'core_price': hetzner['core_price']*1.2,
 | 
					            #     'core_price': hetzner['core_price']*1.2,
 | 
				
			||||||
                'memory_price': hetzner['memory_price']*1.2,
 | 
					            #     'memory_price': hetzner['memory_price']*1.2,
 | 
				
			||||||
                'disk_size_price': hetzner['disk_size_price']*1.2,
 | 
					            #     'disk_size_price': hetzner['disk_size_price']*1.2,
 | 
				
			||||||
                'description': 'VM auf einzelner HW, Raid1, kein HA'
 | 
					            #     'description': 'VM auf einzelner HW, Raid1, kein HA'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            },
 | 
					            # },
 | 
				
			||||||
            'hetzner_glusterfs': {
 | 
					            # 'hetzner_glusterfs': {
 | 
				
			||||||
                'base_price': hetzner['base_price']*1.4,
 | 
					            #     'base_price': hetzner['base_price']*1.4,
 | 
				
			||||||
                'core_price': hetzner['core_price']*1.4,
 | 
					            #     'core_price': hetzner['core_price']*1.4,
 | 
				
			||||||
                'memory_price': hetzner['memory_price']*1.4,
 | 
					            #     'memory_price': hetzner['memory_price']*1.4,
 | 
				
			||||||
                'disk_size_price': hetzner['disk_size_price']*1.4,
 | 
					            #     'disk_size_price': hetzner['disk_size_price']*1.4,
 | 
				
			||||||
                'description': 'VM auf einzelner HW, Raid1, kein HA'
 | 
					            #     'description': 'VM auf einzelner HW, Raid1, kein HA'
 | 
				
			||||||
            },
 | 
					            # },
 | 
				
			||||||
            'bern': {
 | 
					            'bern': {
 | 
				
			||||||
                'base_price': 12,
 | 
					                'base_price': 12,
 | 
				
			||||||
                'core_price': 25,
 | 
					                'core_price': 25,
 | 
				
			||||||
                'memory_price': 7,
 | 
					                'memory_price': 7,
 | 
				
			||||||
                'disk_size_price': 0.70,
 | 
					                'disk_size_price': 0.70,
 | 
				
			||||||
                'description': "VM in Bern, HA Setup ohne HA Garantie",
 | 
					                'description': "VM in Bern, HA Setup ohne HA Garantie",
 | 
				
			||||||
 | 
					                'location':'CH',
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								hosting/migrations/0015_auto_20160512_0448.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					# Generated by Django 1.9.4 on 2016-05-12 04:48
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('hosting', '0014_auto_20160505_0541'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.RenameField(
 | 
				
			||||||
 | 
					            model_name='hostingorder',
 | 
				
			||||||
 | 
					            old_name='VMPlan',
 | 
				
			||||||
 | 
					            new_name='vm_plan',
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
							
								
								
									
										18
									
								
								hosting/migrations/0016_delete_railsbetauser.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					# Generated by Django 1.9.4 on 2016-05-14 06:50
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('hosting', '0015_auto_20160512_0448'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.DeleteModel(
 | 
				
			||||||
 | 
					            name='RailsBetaUser',
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
							
								
								
									
										21
									
								
								hosting/migrations/0017_virtualmachinetype_location.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					# Generated by Django 1.9.4 on 2016-05-19 04:14
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('hosting', '0016_delete_railsbetauser'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AddField(
 | 
				
			||||||
 | 
					            model_name='virtualmachinetype',
 | 
				
			||||||
 | 
					            name='location',
 | 
				
			||||||
 | 
					            field=models.CharField(choices=[('DE', 'Germany'), ('CH', 'Switzerland')], default='DE', max_length=3),
 | 
				
			||||||
 | 
					            preserve_default=False,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
| 
						 | 
					@ -10,14 +10,6 @@ from utils.models import BillingAddress
 | 
				
			||||||
from .managers import VMPlansManager
 | 
					from .managers import VMPlansManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RailsBetaUser(models.Model):
 | 
					 | 
				
			||||||
    email = models.EmailField(unique=True)
 | 
					 | 
				
			||||||
    received_date = models.DateTimeField('date received')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __str__(self):
 | 
					 | 
				
			||||||
        return "%s - %s" % (self.email, self.received_date)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class VirtualMachineType(models.Model):
 | 
					class VirtualMachineType(models.Model):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HETZNER_NUG = 'hetzner_nug'
 | 
					    HETZNER_NUG = 'hetzner_nug'
 | 
				
			||||||
| 
						 | 
					@ -25,6 +17,8 @@ class VirtualMachineType(models.Model):
 | 
				
			||||||
    HETZNER_R6 = 'hetzner_raid6'
 | 
					    HETZNER_R6 = 'hetzner_raid6'
 | 
				
			||||||
    HETZNER_G = 'hetzner_glusterfs'
 | 
					    HETZNER_G = 'hetzner_glusterfs'
 | 
				
			||||||
    BERN = 'bern'
 | 
					    BERN = 'bern'
 | 
				
			||||||
 | 
					    DE_LOCATION = 'DE'
 | 
				
			||||||
 | 
					    CH_LOCATION = 'CH'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HOSTING_TYPES = (
 | 
					    HOSTING_TYPES = (
 | 
				
			||||||
        (HETZNER_NUG, 'Hetzner No Uptime Guarantee'),
 | 
					        (HETZNER_NUG, 'Hetzner No Uptime Guarantee'),
 | 
				
			||||||
| 
						 | 
					@ -34,12 +28,17 @@ class VirtualMachineType(models.Model):
 | 
				
			||||||
        (BERN, 'Bern'),
 | 
					        (BERN, 'Bern'),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LOCATIONS_CHOICES = (
 | 
				
			||||||
 | 
					        (DE_LOCATION, 'Germany'),
 | 
				
			||||||
 | 
					        (CH_LOCATION, 'Switzerland'),
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    description = models.TextField()
 | 
					    description = models.TextField()
 | 
				
			||||||
    base_price = models.FloatField()
 | 
					    base_price = models.FloatField()
 | 
				
			||||||
    memory_price = models.FloatField()
 | 
					    memory_price = models.FloatField()
 | 
				
			||||||
    core_price = models.FloatField()
 | 
					    core_price = models.FloatField()
 | 
				
			||||||
    disk_size_price = models.FloatField()
 | 
					    disk_size_price = models.FloatField()
 | 
				
			||||||
    hosting_company = models.CharField(max_length=30, choices=HOSTING_TYPES)
 | 
					    hosting_company = models.CharField(max_length=30, choices=HOSTING_TYPES)
 | 
				
			||||||
 | 
					    location = models.CharField(max_length=3, choices=LOCATIONS_CHOICES)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return "%s" % (self.get_hosting_company_display())
 | 
					        return "%s" % (self.get_hosting_company_display())
 | 
				
			||||||
| 
						 | 
					@ -73,6 +72,8 @@ class VirtualMachineType(models.Model):
 | 
				
			||||||
            'hosting_company_name': self.get_hosting_company_display(),
 | 
					            'hosting_company_name': self.get_hosting_company_display(),
 | 
				
			||||||
            'hosting_company': self.hosting_company,
 | 
					            'hosting_company': self.hosting_company,
 | 
				
			||||||
            'default_price': self.defeault_price(),
 | 
					            'default_price': self.defeault_price(),
 | 
				
			||||||
 | 
					            'location_code': self.location,
 | 
				
			||||||
 | 
					            'location': self.get_location_display(),
 | 
				
			||||||
            'id': self.id,
 | 
					            'id': self.id,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,6 +87,9 @@ class VirtualMachinePlan(models.Model):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    objects = VMPlansManager()
 | 
					    objects = VMPlansManager()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __str__(self):
 | 
				
			||||||
 | 
					        return "%s" % (self.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @cached_property
 | 
					    @cached_property
 | 
				
			||||||
    def hosting_company_name(self):
 | 
					    def hosting_company_name(self):
 | 
				
			||||||
        return self.vm_type.get_hosting_company_display()
 | 
					        return self.vm_type.get_hosting_company_display()
 | 
				
			||||||
| 
						 | 
					@ -106,7 +110,7 @@ class HostingOrder(models.Model):
 | 
				
			||||||
    ORDER_APPROVED_STATUS = 'Approved'
 | 
					    ORDER_APPROVED_STATUS = 'Approved'
 | 
				
			||||||
    ORDER_DECLINED_STATUS = 'Declined'
 | 
					    ORDER_DECLINED_STATUS = 'Declined'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    VMPlan = models.ForeignKey(VirtualMachinePlan, related_name='hosting_orders')
 | 
					    vm_plan = models.ForeignKey(VirtualMachinePlan, related_name='hosting_orders')
 | 
				
			||||||
    customer = models.ForeignKey(StripeCustomer)
 | 
					    customer = models.ForeignKey(StripeCustomer)
 | 
				
			||||||
    billing_address = models.ForeignKey(BillingAddress)
 | 
					    billing_address = models.ForeignKey(BillingAddress)
 | 
				
			||||||
    created_at = models.DateTimeField(auto_now_add=True)
 | 
					    created_at = models.DateTimeField(auto_now_add=True)
 | 
				
			||||||
| 
						 | 
					@ -115,13 +119,16 @@ class HostingOrder(models.Model):
 | 
				
			||||||
    cc_brand = models.CharField(max_length=10)
 | 
					    cc_brand = models.CharField(max_length=10)
 | 
				
			||||||
    stripe_charge_id = models.CharField(max_length=100, null=True)
 | 
					    stripe_charge_id = models.CharField(max_length=100, null=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __str__(self):
 | 
				
			||||||
 | 
					        return "%s" % (self.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @cached_property
 | 
					    @cached_property
 | 
				
			||||||
    def status(self):
 | 
					    def status(self):
 | 
				
			||||||
        return self.ORDER_APPROVED_STATUS if self.approved else self.ORDER_DECLINED_STATUS
 | 
					        return self.ORDER_APPROVED_STATUS if self.approved else self.ORDER_DECLINED_STATUS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def create(cls, VMPlan=None, customer=None, billing_address=None):
 | 
					    def create(cls, vm_plan=None, customer=None, billing_address=None):
 | 
				
			||||||
        instance = cls.objects.create(VMPlan=VMPlan, customer=customer,
 | 
					        instance = cls.objects.create(vm_plan=vm_plan, customer=customer,
 | 
				
			||||||
                                      billing_address=billing_address)
 | 
					                                      billing_address=billing_address)
 | 
				
			||||||
        return instance
 | 
					        return instance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@
 | 
				
			||||||
.pricing li.type {
 | 
					.pricing li.type {
 | 
				
			||||||
	list-style: none;
 | 
						list-style: none;
 | 
				
			||||||
	padding: 13px;
 | 
						padding: 13px;
 | 
				
			||||||
	height: 200px;
 | 
						height: 150px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.pricing big {
 | 
					.pricing big {
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,16 @@
 | 
				
			||||||
	box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1);
 | 
						box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* pricing color */
 | 
					/* pricing color */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.p-black big,
 | 
				
			||||||
 | 
					.p-black h3 {
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.p-black button {
 | 
				
			||||||
 | 
						background: black;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.p-green big,
 | 
					.p-green big,
 | 
				
			||||||
.p-green h3 {
 | 
					.p-green h3 {
 | 
				
			||||||
	color: #4c7737;
 | 
						color: #4c7737;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								hosting/static/hosting/img/CH_flag.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 841 B  | 
							
								
								
									
										
											BIN
										
									
								
								hosting/static/hosting/img/DE_flag.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 376 B  | 
| 
						 | 
					@ -49,5 +49,9 @@ $( document ).ready(function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$('.disk-space-selector').on('change',change_attribute);
 | 
						$('.disk-space-selector').on('change',change_attribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//Disable input
 | 
				
			||||||
 | 
						$('.disk-space-selector').keypress(function(event){
 | 
				
			||||||
 | 
					    	event.preventDefault();
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -81,19 +81,19 @@
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                    {% else %}
 | 
					                    {% else %}
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#how">How it works</a>
 | 
					                            <a href="{{ request.session.hosting_url}}#how">How it works</a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#your">Your infrastructure</a>
 | 
					                            <a href="{{ request.session.hosting_url }}#your">Your infrastructure</a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                       <li>
 | 
					                       <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#our">Our inftrastructure</a>
 | 
					                            <a href="{{ request.session.hosting_url }}#our">Our inftrastructure</a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#price">Pricing</a>
 | 
					                            <a href="{{ request.session.hosting_url }}#price">Pricing</a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#contact">Contact</a>
 | 
					                            <a href="{{ request.session.hosting_url }}#contact">Contact</a>
 | 
				
			||||||
                        </li>  
 | 
					                        </li>  
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{% url 'hosting:login' %}?next={{request.current_path}}">Login</a>
 | 
					                            <a href="{% url 'hosting:login' %}?next={{request.current_path}}">Login</a>
 | 
				
			||||||
| 
						 | 
					@ -123,21 +123,22 @@
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li class="footer-menu-divider">⋅</li>
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#how">How it works</a>
 | 
					                            <a href="{{ request.session.hosting_url}}#how">How it works</a>
 | 
				
			||||||
                        <li class="footer-menu-divider">⋅</li>
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#your">Your infrastructure</a></li>
 | 
					                            <a href="{{ request.session.hosting_url }}#your">Your infrastructure</a></li>
 | 
				
			||||||
                        <li>⋅</li>
 | 
					                        <li>⋅</li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#our">Our infrastructure</a></li>
 | 
					                            <a href="{{ request.session.hosting_url }}#our">Our infrastructure</a></li>
 | 
				
			||||||
                        <li class="footer-menu-divider">⋅</li>
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#services">Pricing</a>
 | 
					                            <a href="{{ request.session.hosting_url }}#services">Pricing</a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li class="footer-menu-divider">⋅</li>
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                            <a href="{{ request.META.HTTP_REFERER }}#contact">Contact</a>
 | 
					                            <a href="{{ request.session.hosting_url }}#contact">Contact</a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    </ul>
 | 
					                    </ul>
 | 
				
			||||||
                    <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
 | 
					                    <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					{% load staticfiles %}
 | 
				
			||||||
<a name="price"></a>
 | 
					<a name="price"></a>
 | 
				
			||||||
<div class="content-section-b">
 | 
					<div class="content-section-b">
 | 
				
			||||||
  <div class="container-fluid pricing-container">
 | 
					  <div class="container-fluid pricing-container">
 | 
				
			||||||
| 
						 | 
					@ -6,7 +7,6 @@
 | 
				
			||||||
          <hr class="section-heading-spacer">
 | 
					          <hr class="section-heading-spacer">
 | 
				
			||||||
          <div class="clearfix"></div>
 | 
					          <div class="clearfix"></div>
 | 
				
			||||||
        <h2 class="section-heading">Hosting Price</h2>
 | 
					        <h2 class="section-heading">Hosting Price</h2>
 | 
				
			||||||
          <p class="lead">Here are samples of our {{ hosting_long }} hosting offers, suited for different projects. Our offer examples come in different size, speed, and storage. </p>
 | 
					 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <!-- Title -->
 | 
					      <!-- Title -->
 | 
				
			||||||
      <div class="row">
 | 
					      <div class="row">
 | 
				
			||||||
| 
						 | 
					@ -17,17 +17,31 @@
 | 
				
			||||||
      <!-- Page Features -->
 | 
					      <!-- Page Features -->
 | 
				
			||||||
      <div class="row text-center">
 | 
					      <div class="row text-center">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="block col-md-offset-1">
 | 
					        <div class="block col-md-offset-3">
 | 
				
			||||||
          {% for vm in vm_types %}
 | 
					          {% for vm in vm_types %}
 | 
				
			||||||
            <div class="col-xs-12 col-sm-6 col-md-2">
 | 
					            <div class="col-xs-12 col-sm-6 col-md-4">
 | 
				
			||||||
              <form class="form-inline" method="POST" action="{{request.path}}">
 | 
					              <form class="form-inline" method="POST" action="{{request.path}}">
 | 
				
			||||||
                {% csrf_token %}
 | 
					                {% csrf_token %}
 | 
				
			||||||
                <input type="hidden" name="hosting_company" value="{{vm.hosting_company}}">
 | 
					                <input type="hidden" name="hosting_company" value="{{vm.hosting_company}}">
 | 
				
			||||||
                <input type="hidden" name="hosting_company_name" value="{{vm.hosting_company_name}}">
 | 
					                <input type="hidden" name="hosting_company_name" value="{{vm.hosting_company_name}}">
 | 
				
			||||||
                <ul class="pricing {% cycle 'p-green' 'p-yel' 'p-red' 'p-blue' %}">
 | 
					                
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                <ul class="pricing {% cycle 'p-red' 'p-black' 'p-red' 'p-yel' %}">
 | 
				
			||||||
                  <li class="type">
 | 
					                  <li class="type">
 | 
				
			||||||
                    <!-- <img src="http://bread.pp.ua/n/settings_g.svg" alt=""> -->
 | 
					                    <!-- <img src="http://bread.pp.ua/n/settings_g.svg" alt=""> -->
 | 
				
			||||||
                    <h3 >{{vm.hosting_company_name}}</h3>
 | 
					                    <h3 >{{vm.hosting_company_name}}</h3>
 | 
				
			||||||
 | 
					                    <br/>
 | 
				
			||||||
 | 
					                    <img class="img-responsive" src="{{ STATIC_URL }}hosting/img/{{vm.location_code}}_flag.png" alt="">
 | 
				
			||||||
 | 
					                   
 | 
				
			||||||
 | 
					                  </li>
 | 
				
			||||||
 | 
					                  <li>
 | 
				
			||||||
 | 
					                    <!-- Single button -->
 | 
				
			||||||
 | 
					                    <div class="btn-group">
 | 
				
			||||||
 | 
					                      <div class="form-group">
 | 
				
			||||||
 | 
					                        <label for="cores">Location: </label>
 | 
				
			||||||
 | 
					                        {{vm.location}}
 | 
				
			||||||
 | 
					                      </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
                  </li>
 | 
					                  </li>
 | 
				
			||||||
                  <li>
 | 
					                  <li>
 | 
				
			||||||
                    <!-- Single button -->
 | 
					                    <!-- Single button -->
 | 
				
			||||||
| 
						 | 
					@ -64,7 +78,7 @@
 | 
				
			||||||
                    <div class="form-group row">
 | 
					                    <div class="form-group row">
 | 
				
			||||||
                      <div class="col-xs-offset-1 col-xs-9 col-sm-12 col-md-12 col-md-offset-0">
 | 
					                      <div class="col-xs-offset-1 col-xs-9 col-sm-12 col-md-12 col-md-offset-0">
 | 
				
			||||||
                        <label for="Disk Size">Disk Size: </label>
 | 
					                        <label for="Disk Size">Disk Size: </label>
 | 
				
			||||||
                        <input class="form-control short-input text-center disk-space-selector" name="disk_space" type="number" id="{{vm.hosting_company}}-disk_space" min="10" value="10" data-vm-type="{{vm.hosting_company}}"/>
 | 
					                        <input class="form-control short-input text-center disk-space-selector" name="disk_space" type="number" id="{{vm.hosting_company}}-disk_space" min="10" value="10" step="10" data-vm-type="{{vm.hosting_company}}"/>
 | 
				
			||||||
                        <span>GiB</span>
 | 
					                        <span>GiB</span>
 | 
				
			||||||
                      </div>
 | 
					                      </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
| 
						 | 
					@ -75,7 +89,7 @@
 | 
				
			||||||
                    <span>per month</span>
 | 
					                    <span>per month</span>
 | 
				
			||||||
                  </li>
 | 
					                  </li>
 | 
				
			||||||
                  <li>
 | 
					                  <li>
 | 
				
			||||||
                    <button>Buy it</button>
 | 
					                    <button>Book it</button>
 | 
				
			||||||
                  </li>
 | 
					                  </li>
 | 
				
			||||||
                </ul>
 | 
					                </ul>
 | 
				
			||||||
              </form>
 | 
					              </form>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,17 @@
 | 
				
			||||||
<div class="intro-auth intro-login">
 | 
					<div class="intro-auth intro-login">
 | 
				
			||||||
    <div class="container">
 | 
					    <div class="container">
 | 
				
			||||||
            <div class="col-md-4 col-md-offset-4">
 | 
					            <div class="col-md-4 col-md-offset-4">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {% block messages %}
 | 
				
			||||||
 | 
					                    {% if request.GET.logged_out %}
 | 
				
			||||||
 | 
					                            <div class="alert alert-warning">  <!-- singular -->
 | 
				
			||||||
 | 
					                                <a class="close" data-dismiss="alert">×</a>
 | 
				
			||||||
 | 
					                                You haven been logged out
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                    {% endif %}
 | 
				
			||||||
 | 
					                {% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div class="intro-message">
 | 
					                <div class="intro-message">
 | 
				
			||||||
                    <h2 class="section-heading">Login</h2>
 | 
					                    <h2 class="section-heading">Login</h2>
 | 
				
			||||||
                    <form action="{% url 'hosting:login' %}" method="post" class="form" novalidate>
 | 
					                    <form action="{% url 'hosting:login' %}" method="post" class="form" novalidate>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
    <div class="row">
 | 
					    <div class="row">
 | 
				
			||||||
        <div class="col-xs-8 col-xs-offset-2">
 | 
					        <div class="col-xs-8 col-xs-offset-2">
 | 
				
			||||||
    		<div class="invoice-title">
 | 
					    		<div class="invoice-title">
 | 
				
			||||||
    			<h2>Invoice</h2><h3 class="pull-right">Order # {{object.id}}</h3>
 | 
					    			<h2>Invoice</h2><h3 class="pull-right">Order # {{order.id}}</h3>
 | 
				
			||||||
    		</div>
 | 
					    		</div>
 | 
				
			||||||
    		<hr>
 | 
					    		<hr>
 | 
				
			||||||
    		<div class="row">
 | 
					    		<div class="row">
 | 
				
			||||||
| 
						 | 
					@ -14,18 +14,18 @@
 | 
				
			||||||
    				<address>
 | 
					    				<address>
 | 
				
			||||||
                    <h3><b>Billed To:</b></h3>
 | 
					                    <h3><b>Billed To:</b></h3>
 | 
				
			||||||
    					{{user.name}}<br>
 | 
					    					{{user.name}}<br>
 | 
				
			||||||
                        {{object.billing_address.street_address}},{{order.billing_address.postal_code}}<br>
 | 
					                        {{order.billing_address.street_address}},{{order.billing_address.postal_code}}<br>
 | 
				
			||||||
                        {{object.billing_address.city}}, {{object.billing_address.country}}.
 | 
					                        {{order.billing_address.city}}, {{order.billing_address.country}}.
 | 
				
			||||||
    				</address>
 | 
					    				</address>
 | 
				
			||||||
    			</div>
 | 
					    			</div>
 | 
				
			||||||
                <div class="col-xs-6 text-right">
 | 
					                <div class="col-xs-6 text-right">
 | 
				
			||||||
                    <address>
 | 
					                    <address>
 | 
				
			||||||
                        <strong>Order Date:</strong><br>
 | 
					                        <strong>Order Date:</strong><br>
 | 
				
			||||||
                        {{object.created_at}}<br><br>
 | 
					                        {{order.created_at}}<br><br>
 | 
				
			||||||
                        <strong>Status:</strong><br>
 | 
					                        <strong>Status:</strong><br>
 | 
				
			||||||
                        <strong class="{% if object.status == 'Approved' %}text-success
 | 
					                        <strong class="{% if order.status == 'Approved' %}text-success
 | 
				
			||||||
                                       {%else%} text-danger
 | 
					                                       {%else%} text-danger
 | 
				
			||||||
                                       {% endif %}">{{object.status}}</strong>
 | 
					                                       {% endif %}">{{order.status}}</strong>
 | 
				
			||||||
                        <br><br>
 | 
					                        <br><br>
 | 
				
			||||||
                    </address>
 | 
					                    </address>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@
 | 
				
			||||||
    			<div class="col-xs-6">
 | 
					    			<div class="col-xs-6">
 | 
				
			||||||
    				<address>
 | 
					    				<address>
 | 
				
			||||||
    					<strong>Payment Method:</strong><br>
 | 
					    					<strong>Payment Method:</strong><br>
 | 
				
			||||||
    					{{object.cc_brand}} ending **** {{object.last4}}<br>
 | 
					    					{{order.cc_brand}} ending **** {{order.last4}}<br>
 | 
				
			||||||
    					{{user.email}}
 | 
					    					{{user.email}}
 | 
				
			||||||
    				</address>
 | 
					    				</address>
 | 
				
			||||||
    			</div>
 | 
					    			</div>
 | 
				
			||||||
| 
						 | 
					@ -48,15 +48,15 @@
 | 
				
			||||||
            <h3><b>Order summary</b></h3>
 | 
					            <h3><b>Order summary</b></h3>
 | 
				
			||||||
            <hr>
 | 
					            <hr>
 | 
				
			||||||
            <div class="content">
 | 
					            <div class="content">
 | 
				
			||||||
                <p><b>Type</b> <span class="pull-right">{{object.VMPlan.hosting_company_name}}</span></p>
 | 
					                <p><b>Type</b> <span class="pull-right">{{order.vm_plan.hosting_company_name}}</span></p>
 | 
				
			||||||
                <hr>
 | 
					                <hr>
 | 
				
			||||||
                <p><b>Cores</b> <span class="pull-right">{{object.VMPlan.cores}}</span></p>
 | 
					                <p><b>Cores</b> <span class="pull-right">{{order.vm_plan.cores}}</span></p>
 | 
				
			||||||
                <hr>
 | 
					                <hr>
 | 
				
			||||||
                <p><b>Memory</b> <span class="pull-right">{{object.VMPlan.memory}} GiB</span></p>
 | 
					                <p><b>Memory</b> <span class="pull-right">{{order.vm_plan.memory}} GiB</span></p>
 | 
				
			||||||
                <hr>
 | 
					                <hr>
 | 
				
			||||||
                <p><b>Disk space</b> <span class="pull-right">{{object.VMPlan.disk_size}} GiB</span></p>
 | 
					                <p><b>Disk space</b> <span class="pull-right">{{order.vm_plan.disk_size}} GiB</span></p>
 | 
				
			||||||
                <hr>
 | 
					                <hr>
 | 
				
			||||||
                <h4>Total<p class="pull-right"><b>{{object.VMPlan.price}} CHF</b></p></h4>
 | 
					                <h4>Total<p class="pull-right"><b>{{order.vm_plan.price}} CHF</b></p></h4>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
                            <tr>
 | 
					                            <tr>
 | 
				
			||||||
                                <td scope="row">{{ order.id }}</td>
 | 
					                                <td scope="row">{{ order.id }}</td>
 | 
				
			||||||
                                <td>{{ order.created_at }}</td>
 | 
					                                <td>{{ order.created_at }}</td>
 | 
				
			||||||
                                <td>{{ order.VMPlan.price }} CHF</td>
 | 
					                                <td>{{ order.vm_plan.price }} CHF</td>
 | 
				
			||||||
                                <td>{% if order.approved %}
 | 
					                                <td>{% if order.approved %}
 | 
				
			||||||
                                    <span class="text-success strong">Approved</span>
 | 
					                                    <span class="text-success strong">Approved</span>
 | 
				
			||||||
                                {% else %}
 | 
					                                {% else %}
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,8 @@
 | 
				
			||||||
                                                Your
 | 
					                                                Your
 | 
				
			||||||
                                                order?</h4>
 | 
					                                                order?</h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                            <form method="post" action="{% url 'hosting:delete_order' order.id %}">
 | 
					                                            <form method="post"
 | 
				
			||||||
 | 
					                                                  action="{% url 'hosting:delete_order' order.id %}">
 | 
				
			||||||
                                                {% csrf_token %}
 | 
					                                                {% csrf_token %}
 | 
				
			||||||
                                                <div class="modal-footer">
 | 
					                                                <div class="modal-footer">
 | 
				
			||||||
                                                    <button type="button" class="btn btn-default"
 | 
					                                                    <button type="button" class="btn btn-default"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,7 +104,7 @@
 | 
				
			||||||
											<tr> 
 | 
																<tr> 
 | 
				
			||||||
												<td scope="row">{{order.id}}</td> 
 | 
																	<td scope="row">{{order.id}}</td> 
 | 
				
			||||||
												<td>{{order.created_at}}</td> 
 | 
																	<td>{{order.created_at}}</td> 
 | 
				
			||||||
												<td>{{order.VMPlan.price}} CHF</td> 
 | 
																	<td>{{order.vm_plan.price}} CHF</td> 
 | 
				
			||||||
												<td>{% if order.approved %}
 | 
																	<td>{% if order.approved %}
 | 
				
			||||||
														<span class="text-success strong">Approved</span>
 | 
																			<span class="text-success strong">Approved</span>
 | 
				
			||||||
													{% else%} 
 | 
																		{% else%} 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										75
									
								
								hosting/test_models.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
					@ -0,0 +1,75 @@
 | 
				
			||||||
 | 
					from django.test import TestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.core.management import call_command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from .models import VirtualMachineType
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VirtualMachineTypeModelTest(TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.HETZNER_NUG_NAME = 'hetzner_nug'
 | 
				
			||||||
 | 
					        self.HETZNER_NAME = 'hetzner'
 | 
				
			||||||
 | 
					        self.HETZNER_RAID6_NAME = 'hetzner_raid6'
 | 
				
			||||||
 | 
					        self.HETZNER_GLUSTERFS_NAME = 'hetzner_glusterfs'
 | 
				
			||||||
 | 
					        self.BERN_NAME = 'bern'
 | 
				
			||||||
 | 
					        self.HETZNER_NUG_EXPECTED_PRICE = 79
 | 
				
			||||||
 | 
					        self.HETZNER_EXPECTED_PRICE = 180
 | 
				
			||||||
 | 
					        self.HETZNER_RAID6_EXPECTED_PRICE = 216
 | 
				
			||||||
 | 
					        self.HETZNER_GLUSTERFS_EXPECTED_PRICE = 252
 | 
				
			||||||
 | 
					        self.BERN_EXPECTED_PRICE = 202
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        call_command('create_vm_types')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_calculate_price(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # hetzner_nug
 | 
				
			||||||
 | 
					        specifications = {
 | 
				
			||||||
 | 
					            'cores': 2,
 | 
				
			||||||
 | 
					            'memory': 10,
 | 
				
			||||||
 | 
					            'disk_size': 100
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NUG_NAME)
 | 
				
			||||||
 | 
					        calculated_price = vm_type.calculate_price(specifications)
 | 
				
			||||||
 | 
					        self.assertEqual(calculated_price, self.HETZNER_NUG_EXPECTED_PRICE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # hetzner
 | 
				
			||||||
 | 
					        specifications = {
 | 
				
			||||||
 | 
					            'cores': 2,
 | 
				
			||||||
 | 
					            'memory': 10,
 | 
				
			||||||
 | 
					            'disk_size': 100
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_NAME)
 | 
				
			||||||
 | 
					        calculated_price = vm_type.calculate_price(specifications)
 | 
				
			||||||
 | 
					        self.assertEqual(calculated_price, self.HETZNER_EXPECTED_PRICE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # hetzner_raid6
 | 
				
			||||||
 | 
					        specifications = {
 | 
				
			||||||
 | 
					            'cores': 2,
 | 
				
			||||||
 | 
					            'memory': 10,
 | 
				
			||||||
 | 
					            'disk_size': 100
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_RAID6_NAME)
 | 
				
			||||||
 | 
					        calculated_price = vm_type.calculate_price(specifications)
 | 
				
			||||||
 | 
					        self.assertEqual(calculated_price, self.HETZNER_RAID6_EXPECTED_PRICE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # hetzner_glusterfs
 | 
				
			||||||
 | 
					        specifications = {
 | 
				
			||||||
 | 
					            'cores': 2,
 | 
				
			||||||
 | 
					            'memory': 10,
 | 
				
			||||||
 | 
					            'disk_size': 100
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        vm_type = VirtualMachineType.objects.get(hosting_company=self.HETZNER_GLUSTERFS_NAME)
 | 
				
			||||||
 | 
					        calculated_price = vm_type.calculate_price(specifications)
 | 
				
			||||||
 | 
					        self.assertEqual(calculated_price, self.HETZNER_GLUSTERFS_EXPECTED_PRICE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # bern
 | 
				
			||||||
 | 
					        specifications = {
 | 
				
			||||||
 | 
					            'cores': 2,
 | 
				
			||||||
 | 
					            'memory': 10,
 | 
				
			||||||
 | 
					            'disk_size': 100
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        vm_type = VirtualMachineType.objects.get(hosting_company=self.BERN_NAME)
 | 
				
			||||||
 | 
					        calculated_price = vm_type.calculate_price(specifications)
 | 
				
			||||||
 | 
					        self.assertEqual(calculated_price, self.BERN_EXPECTED_PRICE)
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,18 @@
 | 
				
			||||||
from django.test import TestCase
 | 
					from unittest import mock
 | 
				
			||||||
 | 
					from django.conf import settings
 | 
				
			||||||
 | 
					from django.test import TestCase, RequestFactory
 | 
				
			||||||
from django.core.urlresolvers import reverse
 | 
					from django.core.urlresolvers import reverse
 | 
				
			||||||
from django.core.urlresolvers import resolve
 | 
					from django.core.urlresolvers import resolve
 | 
				
			||||||
from .models import VirtualMachineType
 | 
					
 | 
				
			||||||
from .views import DjangoHostingView, RailsHostingView, NodeJSHostingView
 | 
					from model_mommy import mommy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from membership.models import CustomUser, StripeCustomer
 | 
				
			||||||
 | 
					from .models import VirtualMachineType, HostingOrder, VirtualMachinePlan
 | 
				
			||||||
 | 
					from .views import DjangoHostingView, RailsHostingView, NodeJSHostingView, LoginView, SignupView, \
 | 
				
			||||||
 | 
					    PaymentVMView, OrdersHostingDetailView, OrdersHostingListView, VirtualMachineDetailView, \
 | 
				
			||||||
 | 
					    VirtualMachinesPlanListView
 | 
				
			||||||
 | 
					from utils.tests import BaseTestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ProcessVMSelectionTestMixin(object):
 | 
					class ProcessVMSelectionTestMixin(object):
 | 
				
			||||||
| 
						 | 
					@ -70,3 +80,280 @@ class NodeJSHostingViewTest(TestCase, ProcessVMSelectionTestMixin):
 | 
				
			||||||
            'email': "info@node-hosting.ch",
 | 
					            'email': "info@node-hosting.ch",
 | 
				
			||||||
            'vm_types': VirtualMachineType.get_serialized_vm_types(),
 | 
					            'vm_types': VirtualMachineType.get_serialized_vm_types(),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PaymentVMViewTest(BaseTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(PaymentVMViewTest, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.view = PaymentVMView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # VM
 | 
				
			||||||
 | 
					        self.vm = mommy.make(VirtualMachineType, base_price=10000,
 | 
				
			||||||
 | 
					                             memory_price=100,
 | 
				
			||||||
 | 
					                             core_price=1000,
 | 
				
			||||||
 | 
					                             disk_size_price=1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # post data
 | 
				
			||||||
 | 
					        self.billing_address = {
 | 
				
			||||||
 | 
					            'street_address': 'street name',
 | 
				
			||||||
 | 
					            'city': 'MyCity',
 | 
				
			||||||
 | 
					            'postal_code': '32123123123123',
 | 
				
			||||||
 | 
					            'country': 'VE',
 | 
				
			||||||
 | 
					            'token': 'a23kfmslwxhkwis'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # urls
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:payment')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Session data
 | 
				
			||||||
 | 
					        self.session_data = {
 | 
				
			||||||
 | 
					            'vm_specs': {
 | 
				
			||||||
 | 
					                'hosting_company': self.vm.hosting_company,
 | 
				
			||||||
 | 
					                'cores': 1,
 | 
				
			||||||
 | 
					                'memory': 10,
 | 
				
			||||||
 | 
					                'disk_size': 10000,
 | 
				
			||||||
 | 
					                'price': 22000,
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        session = self.customer_client.session
 | 
				
			||||||
 | 
					        session.update(self.session_data)
 | 
				
			||||||
 | 
					        session.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @mock.patch('utils.stripe_utils.StripeUtils.create_customer')
 | 
				
			||||||
 | 
					    def test_post(self, stripe_mocked_call):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Anonymous user should get redirect to login
 | 
				
			||||||
 | 
					        response = self.client.post(self.url)
 | 
				
			||||||
 | 
					        expected_url = "%s?next=%s" % (reverse('hosting:login'), reverse('hosting:payment'))
 | 
				
			||||||
 | 
					        self.assertRedirects(response, expected_url=expected_url,
 | 
				
			||||||
 | 
					                             status_code=302, target_status_code=200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Customer user should be able to pay
 | 
				
			||||||
 | 
					        stripe_mocked_call.return_value = {
 | 
				
			||||||
 | 
					            'paid': True,
 | 
				
			||||||
 | 
					            'response_object': self.stripe_mocked_customer,
 | 
				
			||||||
 | 
					            'error': None
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        response = self.customer_client.post(self.url, self.billing_address)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertTrue(StripeCustomer.objects.filter(user__email=self.customer.email).exists())
 | 
				
			||||||
 | 
					        stripe_customer = StripeCustomer.objects.get(user__email=self.customer.email)
 | 
				
			||||||
 | 
					        self.assertEqual(stripe_customer.user, self.customer)
 | 
				
			||||||
 | 
					        self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists())
 | 
				
			||||||
 | 
					        hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0]
 | 
				
			||||||
 | 
					        vm_plan = {
 | 
				
			||||||
 | 
					            'cores': hosting_order.vm_plan.cores,
 | 
				
			||||||
 | 
					            'memory': hosting_order.vm_plan.memory,
 | 
				
			||||||
 | 
					            'disk_size': hosting_order.vm_plan.disk_size,
 | 
				
			||||||
 | 
					            'price': hosting_order.vm_plan.price,
 | 
				
			||||||
 | 
					            'hosting_company': hosting_order.vm_plan.vm_type.hosting_company
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        self.assertEqual(vm_plan, self.session_data.get('vm_specs'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Anonymous user should get redirect to login
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        expected_url = "%s?next=%s" % (reverse('hosting:login'), reverse('hosting:payment'))
 | 
				
			||||||
 | 
					        self.assertRedirects(response, expected_url=expected_url,
 | 
				
			||||||
 | 
					                             status_code=302, target_status_code=200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Logged user should get the page
 | 
				
			||||||
 | 
					        response = self.customer_client.get(self.url, follow=True)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertEqual(response.context['stripe_key'],
 | 
				
			||||||
 | 
					                         settings.STRIPE_API_PUBLIC_KEY)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VirtualMachineDetailViewTest(BaseTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(VirtualMachineDetailViewTest, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
 | 
				
			||||||
 | 
					        self.vm = mommy.make(VirtualMachinePlan)
 | 
				
			||||||
 | 
					        self.order = mommy.make(HostingOrder, customer=self.stripe_customer, vm_plan=self.vm)
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:virtual_machines', kwargs={'pk': self.vm.id})
 | 
				
			||||||
 | 
					        self.view = VirtualMachineDetailView()
 | 
				
			||||||
 | 
					        self.expected_template = 'hosting/virtual_machine_detail.html'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Anonymous user should get redirect to login
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        expected_url = "%s?next=%s" % (reverse('hosting:login'),
 | 
				
			||||||
 | 
					                                       reverse('hosting:virtual_machines',
 | 
				
			||||||
 | 
					                                       kwargs={'pk': self.vm.id}))
 | 
				
			||||||
 | 
					        self.assertRedirects(response, expected_url=expected_url,
 | 
				
			||||||
 | 
					                             status_code=302, target_status_code=200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Customer should be able to get data
 | 
				
			||||||
 | 
					        response = self.customer_client.get(self.url, follow=True)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertEqual(response.context['virtual_machine'], self.vm)
 | 
				
			||||||
 | 
					        self.assertTemplateUsed(response, self.expected_template)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VirtualMachinesPlanListViewTest(BaseTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(VirtualMachinesPlanListViewTest, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
 | 
				
			||||||
 | 
					        mommy.make(HostingOrder, customer=self.stripe_customer, approved=True, _quantity=20)
 | 
				
			||||||
 | 
					        _vms = VirtualMachinePlan.objects.all()
 | 
				
			||||||
 | 
					        self.vms = sorted(_vms, key=lambda vm: vm.id, reverse=True)
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:virtual_machines')
 | 
				
			||||||
 | 
					        self.view = VirtualMachinesPlanListView()
 | 
				
			||||||
 | 
					        self.expected_template = 'hosting/virtual_machines.html'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Anonymous user should get redirect to login
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        expected_url = "%s?next=%s" % (reverse('hosting:login'),
 | 
				
			||||||
 | 
					                                       reverse('hosting:virtual_machines'))
 | 
				
			||||||
 | 
					        self.assertRedirects(response, expected_url=expected_url,
 | 
				
			||||||
 | 
					                             status_code=302, target_status_code=200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Customer should be able to get his orders
 | 
				
			||||||
 | 
					        response = self.customer_client.get(self.url, follow=True)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertEqual(list(response.context['vms']), self.vms[:10])
 | 
				
			||||||
 | 
					        self.assertTemplateUsed(response, self.expected_template)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class OrderHostingDetailViewTest(BaseTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(OrderHostingDetailViewTest, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
 | 
				
			||||||
 | 
					        self.order = mommy.make(HostingOrder, customer=self.stripe_customer)
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:orders', kwargs={'pk': self.order.id})
 | 
				
			||||||
 | 
					        self.view = OrdersHostingDetailView()
 | 
				
			||||||
 | 
					        self.expected_template = 'hosting/order_detail.html'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Anonymous user should get redirect to login
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        expected_url = "%s?next=%s" % (reverse('hosting:login'),
 | 
				
			||||||
 | 
					                                       reverse('hosting:orders', kwargs={'pk': self.order.id}))
 | 
				
			||||||
 | 
					        self.assertRedirects(response, expected_url=expected_url,
 | 
				
			||||||
 | 
					                             status_code=302, target_status_code=200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Customer should be able to get data
 | 
				
			||||||
 | 
					        response = self.customer_client.get(self.url, follow=True)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertEqual(response.context['order'], self.order)
 | 
				
			||||||
 | 
					        self.assertTemplateUsed(response, self.expected_template)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class OrdersHostingListViewTest(BaseTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(OrdersHostingListViewTest, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.stripe_customer = mommy.make(StripeCustomer, user=self.customer)
 | 
				
			||||||
 | 
					        _orders = mommy.make(HostingOrder, customer=self.stripe_customer, _quantity=20)
 | 
				
			||||||
 | 
					        self.orders = sorted(_orders, key=lambda order: order.id, reverse=True)
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:orders')
 | 
				
			||||||
 | 
					        self.view = OrdersHostingListView()
 | 
				
			||||||
 | 
					        self.expected_template = 'hosting/orders.html'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Anonymous user should get redirect to login
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        expected_url = "%s?next=%s" % (reverse('hosting:login'), reverse('hosting:orders'))
 | 
				
			||||||
 | 
					        self.assertRedirects(response, expected_url=expected_url,
 | 
				
			||||||
 | 
					                             status_code=302, target_status_code=200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Customer should be able to get his orders
 | 
				
			||||||
 | 
					        response = self.customer_client.get(self.url, follow=True)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertEqual(list(response.context['orders']), self.orders[:10])
 | 
				
			||||||
 | 
					        self.assertTemplateUsed(response, self.expected_template)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LoginViewTest(TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:login')
 | 
				
			||||||
 | 
					        self.view = LoginView
 | 
				
			||||||
 | 
					        self.expected_template = 'hosting/login.html'
 | 
				
			||||||
 | 
					        self.user = mommy.make('membership.CustomUser')
 | 
				
			||||||
 | 
					        self.password = 'fake_password'
 | 
				
			||||||
 | 
					        self.user.set_password(self.password)
 | 
				
			||||||
 | 
					        self.user.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertTemplateUsed(response, self.expected_template)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_anonymous_user_can_login(self):
 | 
				
			||||||
 | 
					        data = {
 | 
				
			||||||
 | 
					            'email': self.user.email,
 | 
				
			||||||
 | 
					            'password': self.password
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        response = self.client.post(self.url, data=data, follow=True)
 | 
				
			||||||
 | 
					        self.assertEqual(response.context['user'], self.user)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SignupViewTest(TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.url = reverse('hosting:signup')
 | 
				
			||||||
 | 
					        self.expected_template = 'hosting/signup.html'
 | 
				
			||||||
 | 
					        self.view = SignupView
 | 
				
			||||||
 | 
					        self.signup_data = {
 | 
				
			||||||
 | 
					            'name': 'ungleich',
 | 
				
			||||||
 | 
					            'email': 'test@ungleich.com',
 | 
				
			||||||
 | 
					            'password': 'fake_password',
 | 
				
			||||||
 | 
					            'confirm_password': 'fake_password',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_url_resolve_to_view_correctly(self):
 | 
				
			||||||
 | 
					        found = resolve(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(found.func.__name__, self.view.__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					        response = self.client.get(self.url)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertTemplateUsed(response, self.expected_template)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_anonymous_user_can_signup(self):
 | 
				
			||||||
 | 
					        response = self.client.post(self.url, data=self.signup_data, follow=True)
 | 
				
			||||||
 | 
					        self.user = CustomUser.objects.get(email=self.signup_data.get('email'))
 | 
				
			||||||
 | 
					        self.assertEqual(response.context['user'], self.user)
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ from django.conf.urls import url
 | 
				
			||||||
from .views import DjangoHostingView, RailsHostingView, PaymentVMView, \
 | 
					from .views import DjangoHostingView, RailsHostingView, PaymentVMView, \
 | 
				
			||||||
    NodeJSHostingView, LoginView, SignupView, IndexView, \
 | 
					    NodeJSHostingView, LoginView, SignupView, IndexView, \
 | 
				
			||||||
    OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\
 | 
					    OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\
 | 
				
			||||||
    VirtualMachineDetailListView,OrdersHostingDeleteView
 | 
					    OrdersHostingDeleteView,VirtualMachineDetailView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
urlpatterns = [
 | 
					urlpatterns = [
 | 
				
			||||||
    # url(r'pricing/?$', VMPricingView.as_view(), name='pricing'),
 | 
					    # url(r'pricing/?$', VMPricingView.as_view(), name='pricing'),
 | 
				
			||||||
| 
						 | 
					@ -16,10 +16,10 @@ urlpatterns = [
 | 
				
			||||||
    url(r'orders/(?P<pk>\d+)/?$', OrdersHostingDetailView.as_view(), name='orders'),
 | 
					    url(r'orders/(?P<pk>\d+)/?$', OrdersHostingDetailView.as_view(), name='orders'),
 | 
				
			||||||
    url(r'cancel_order/(?P<pk>\d+)/?$',OrdersHostingDeleteView.as_view(),name='delete_order'),
 | 
					    url(r'cancel_order/(?P<pk>\d+)/?$',OrdersHostingDeleteView.as_view(),name='delete_order'),
 | 
				
			||||||
    url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'),
 | 
					    url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'),
 | 
				
			||||||
    url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineDetailListView.as_view(),
 | 
					    url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineDetailView.as_view(),
 | 
				
			||||||
        name='virtual_machines'),
 | 
					        name='virtual_machines'),
 | 
				
			||||||
    url(r'login/?$', LoginView.as_view(), name='login'),
 | 
					    url(r'login/?$', LoginView.as_view(), name='login'),
 | 
				
			||||||
    url(r'signup/?$', SignupView.as_view(), name='signup'),
 | 
					    url(r'signup/?$', SignupView.as_view(), name='signup'),
 | 
				
			||||||
    url(r'^logout/?$', 'django.contrib.auth.views.logout',
 | 
					    url(r'^logout/?$', 'django.contrib.auth.views.logout',
 | 
				
			||||||
        {'next_page': '/ungleich_page'}, name='logout')
 | 
					        {'next_page': '/hosting/login?logged_out=true'}, name='logout')
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,10 +29,11 @@ class DjangoHostingView(ProcessVMSelectionMixin, View):
 | 
				
			||||||
            'email': "info@django-hosting.ch",
 | 
					            'email': "info@django-hosting.ch",
 | 
				
			||||||
            'vm_types': VirtualMachineType.get_serialized_vm_types(),
 | 
					            'vm_types': VirtualMachineType.get_serialized_vm_types(),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, request, *args, **kwargs):
 | 
					    def get(self, request, *args, **kwargs):
 | 
				
			||||||
 | 
					        request.session['hosting_url'] = reverse('hosting:djangohosting')
 | 
				
			||||||
        context = self.get_context_data()
 | 
					        context = self.get_context_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return render(request, self.template_name, context)
 | 
					        return render(request, self.template_name, context)
 | 
				
			||||||
| 
						 | 
					@ -53,6 +54,7 @@ class RailsHostingView(ProcessVMSelectionMixin, View):
 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, request, *args, **kwargs):
 | 
					    def get(self, request, *args, **kwargs):
 | 
				
			||||||
 | 
					        request.session['hosting_url'] = reverse('hosting:railshosting')
 | 
				
			||||||
        context = self.get_context_data()
 | 
					        context = self.get_context_data()
 | 
				
			||||||
        return render(request, self.template_name, context)
 | 
					        return render(request, self.template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,7 +74,7 @@ class NodeJSHostingView(ProcessVMSelectionMixin, View):
 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, request, *args, **kwargs):
 | 
					    def get(self, request, *args, **kwargs):
 | 
				
			||||||
 | 
					        request.session['hosting_url'] = reverse('hosting:nodejshosting')
 | 
				
			||||||
        context = self.get_context_data()
 | 
					        context = self.get_context_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return render(request, self.template_name, context)
 | 
					        return render(request, self.template_name, context)
 | 
				
			||||||
| 
						 | 
					@ -143,8 +145,9 @@ class SignupView(CreateView):
 | 
				
			||||||
        return HttpResponseRedirect(self.get_success_url())
 | 
					        return HttpResponseRedirect(self.get_success_url())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PaymentVMView(FormView):
 | 
					class PaymentVMView(LoginRequiredMixin, FormView):
 | 
				
			||||||
    template_name = 'hosting/payment.html'
 | 
					    template_name = 'hosting/payment.html'
 | 
				
			||||||
 | 
					    login_url = reverse_lazy('hosting:login')
 | 
				
			||||||
    form_class = BillingAddressForm
 | 
					    form_class = BillingAddressForm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_context_data(self, **kwargs):
 | 
					    def get_context_data(self, **kwargs):
 | 
				
			||||||
| 
						 | 
					@ -183,7 +186,7 @@ class PaymentVMView(FormView):
 | 
				
			||||||
            billing_address = form.save()
 | 
					            billing_address = form.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Create a Hosting Order
 | 
					            # Create a Hosting Order
 | 
				
			||||||
            order = HostingOrder.create(VMPlan=plan, customer=customer,
 | 
					            order = HostingOrder.create(vm_plan=plan, customer=customer,
 | 
				
			||||||
                                        billing_address=billing_address)
 | 
					                                        billing_address=billing_address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Make stripe charge to a customer
 | 
					            # Make stripe charge to a customer
 | 
				
			||||||
| 
						 | 
					@ -219,6 +222,7 @@ class PaymentVMView(FormView):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
					class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
    template_name = "hosting/order_detail.html"
 | 
					    template_name = "hosting/order_detail.html"
 | 
				
			||||||
 | 
					    context_object_name = "order"
 | 
				
			||||||
    login_url = reverse_lazy('hosting:login')
 | 
					    login_url = reverse_lazy('hosting:login')
 | 
				
			||||||
    model = HostingOrder
 | 
					    model = HostingOrder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,6 +233,7 @@ class OrdersHostingListView(LoginRequiredMixin, ListView):
 | 
				
			||||||
    context_object_name = "orders"
 | 
					    context_object_name = "orders"
 | 
				
			||||||
    model = HostingOrder
 | 
					    model = HostingOrder
 | 
				
			||||||
    paginate_by = 10
 | 
					    paginate_by = 10
 | 
				
			||||||
 | 
					    ordering = '-id'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_queryset(self):
 | 
					    def get_queryset(self):
 | 
				
			||||||
        user = self.request.user
 | 
					        user = self.request.user
 | 
				
			||||||
| 
						 | 
					@ -250,6 +255,7 @@ class VirtualMachinesPlanListView(LoginRequiredMixin, ListView):
 | 
				
			||||||
    context_object_name = "vms"
 | 
					    context_object_name = "vms"
 | 
				
			||||||
    model = VirtualMachinePlan
 | 
					    model = VirtualMachinePlan
 | 
				
			||||||
    paginate_by = 10
 | 
					    paginate_by = 10
 | 
				
			||||||
 | 
					    ordering = '-id'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_queryset(self):
 | 
					    def get_queryset(self):
 | 
				
			||||||
        user = self.request.user
 | 
					        user = self.request.user
 | 
				
			||||||
| 
						 | 
					@ -257,7 +263,7 @@ class VirtualMachinesPlanListView(LoginRequiredMixin, ListView):
 | 
				
			||||||
        return super(VirtualMachinesPlanListView, self).get_queryset()
 | 
					        return super(VirtualMachinesPlanListView, self).get_queryset()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VirtualMachineDetailListView(LoginRequiredMixin, DetailView):
 | 
					class VirtualMachineDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
    template_name = "hosting/virtual_machine_detail.html"
 | 
					    template_name = "hosting/virtual_machine_detail.html"
 | 
				
			||||||
    login_url = reverse_lazy('hosting:login')
 | 
					    login_url = reverse_lazy('hosting:login')
 | 
				
			||||||
    model = VirtualMachinePlan
 | 
					    model = VirtualMachinePlan
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 36 KiB  | 
| 
		 After Width: | Height: | Size: 27 KiB  | 
| 
		 After Width: | Height: | Size: 338 KiB  | 
| 
		 After Width: | Height: | Size: 442 B  | 
| 
		 After Width: | Height: | Size: 7.6 KiB  | 
| 
		 After Width: | Height: | Size: 767 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 455 B  | 
| 
		 After Width: | Height: | Size: 6.6 KiB  | 
| 
		 After Width: | Height: | Size: 767 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 After Width: | Height: | Size: 438 B  | 
| 
		 After Width: | Height: | Size: 9.4 KiB  | 
| 
		 After Width: | Height: | Size: 797 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 1.8 KiB  | 
| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
from django.contrib import admin
 | 
					from django.contrib import admin
 | 
				
			||||||
 | 
					from .models import CustomUser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Register your models here.
 | 
					admin.site.register(CustomUser)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 473 KiB After Width: | Height: | Size: 473 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB  | 
| 
		 Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								non_django_but_related/mindmap/webapp.vym
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										342
									
								
								opens
									
										
									
									
									
								
							
							
						
						| 
						 | 
					@ -1,342 +0,0 @@
 | 
				
			||||||
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libutil.so.1", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libexpat.so.1", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/dev/urandom", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/bin/pyvenv.cfg", O_RDONLY)   = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/pyvenv.cfg", O_RDONLY)       = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/encodings/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/codecs.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/encodings/__pycache__/aliases.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/encodings/__pycache__/ascii.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/encodings/__pycache__/utf_8.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/encodings/__pycache__/latin_1.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/io.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/abc.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/_weakrefset.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/site.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/os.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/stat.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/posixpath.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/genericpath.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/_collections_abc.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/_sitebuiltins.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/re.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/sre_compile.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/sre_parse.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/sre_constants.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/copyreg.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/pyvenv.cfg", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/_bootlocale.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/easy-install.pth", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/sysconfig.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/_sysconfigdata.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/__pycache__/_sysconfigdata_m.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/easy-install.pth", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/sitecustomize.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("manage.py", O_RDONLY)             = 3
 | 
					 | 
				
			||||||
open("manage.py", O_RDONLY)             = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/collections/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/operator.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/keyword.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/heapq.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/reprlib.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/importlib/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/types.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/warnings.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/optparse.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/textwrap.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/gettext.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/locale.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/functools.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/weakref.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/copy.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/struct.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/apps/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/apps/__pycache__/config.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/__pycache__/exceptions.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/six.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/__future__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/encoding.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/datetime.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/decimal.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/numbers.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/threading.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/traceback.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/linecache.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/tokenize.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/token.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/_decimal.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/x86_64-linux-gnu/libmpdec.so.2", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/functional.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/deprecation.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/inspect.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/ast.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/importlib/__pycache__/machinery.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/dis.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/opcode.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/_opcode.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/urllib/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/urllib/__pycache__/parse.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/module_loading.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/imp.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/importlib/__pycache__/util.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/contextlib.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/_os.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/tempfile.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/shutil.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/fnmatch.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/tarfile.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/bz2.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/libbz2.so.1.0", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/random.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/hashlib.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/_hashlib.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/dev/urandom", O_RDONLY|O_CLOEXEC) = 3
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/apps/__pycache__/registry.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/lru_cache.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/conf/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/conf/__pycache__/global_settings.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__pycache__/base.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/__pycache__/messages.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/__pycache__/registry.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/itercompat.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/compatibility/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/compatibility/__pycache__/django_1_6_0.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/compatibility/__pycache__/django_1_7_0.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/checks/__pycache__/model_checks.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__pycache__/color.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/termcolors.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/version.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/subprocess.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/selectors.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/app/dynamicweb/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/app/dynamicweb/settings/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/commands/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/commands/__pycache__/migrate.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__pycache__/sql.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/__pycache__/signals.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/dispatch/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/dispatch/__pycache__/dispatcher.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/__pycache__/utils.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/pkgutil.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/query.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/__pycache__/transaction.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/decorators.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/constants.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/base64.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/lookups.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/timezone.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/pytz/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/__pycache__/pkg_resources.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/zipfile.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/lzma.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/_lzma.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/lib/x86_64-linux-gnu/liblzma.so.5", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/symbol.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/platform.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/plistlib.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/enum.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/xml/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/xml/parsers/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/xml/parsers/__pycache__/expat.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/parser.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/feedparser.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/errors.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/message.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/uu.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/quopri.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/utils.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/socket.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/_parseaddr.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/calendar.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/charset.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/base64mime.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/quoprimime.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/string.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/encoders.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/_policybase.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/header.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/_encoded_words.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/email/__pycache__/iterators.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/parser.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/pytz/__pycache__/exceptions.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/pytz/__pycache__/lazy.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/pytz/__pycache__/tzinfo.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/bisect.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/pytz/__pycache__/tzfile.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/query_utils.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/backends/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/backends/__pycache__/signals.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/backends/__pycache__/utils.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/logging/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/tree.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/fields.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/__pycache__/validators.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/deconstruct.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/translation/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/ipv6.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/utils.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/json/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/json/__pycache__/decoder.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/json/__pycache__/scanner.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/_json.cpython-34m-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/json/__pycache__/encoder.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/html.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/safestring.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/text.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/gzip.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/html/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/html/__pycache__/entities.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/html_parser.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/html/__pycache__/parser.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/_markupbase.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/widgets.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/datastructures.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/formats.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/dateformat.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/dates.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/numberformat.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/datetime_safe.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/forms.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/formsets.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/forms/__pycache__/models.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/dateparse.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/deletion.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/signals.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/datastructures.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/constants.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/query.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/aggregates.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/expressions.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/related.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/aggregates.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/expressions.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/sql/__pycache__/where.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/manager.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/base.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__pycache__/related.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/__pycache__/options.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__pycache__/proxy.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__pycache__/subclassing.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__pycache__/files.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/base.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/utils.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/storage.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/locks.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/move.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/utils/__pycache__/crypto.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/__pycache__/hmac.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/files/__pycache__/images.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/__pycache__/migration.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/operations/__pycache__/models.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/__pycache__/state.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/operations/__pycache__/base.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/operations/__pycache__/fields.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/operations/__pycache__/special.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/__pycache__/executor.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/__pycache__/loader.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/__pycache__/recorder.cpython-34.pyc", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("manage.py", O_RDONLY|O_CLOEXEC)   = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/importlib/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/app/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/django-select2/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/src/circus-master/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/plat-x86_64-linux-gnu/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/usr/lib/python3.4/lib-dynload/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/<frozen importlib._bootstrap>", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/core/management/commands/migrate.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/executor.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/loader.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/recorder.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/recorder.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/migrations/recorder.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/conf/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/conf/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
open("/home/app/pyvenv/lib/python3.4/site-packages/django/conf/__init__.py", O_RDONLY|O_CLOEXEC) = 4
 | 
					 | 
				
			||||||
+++ exited with 1 +++
 | 
					 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@ psycopg2
 | 
				
			||||||
django-mptt
 | 
					django-mptt
 | 
				
			||||||
easy_thumbnails
 | 
					easy_thumbnails
 | 
				
			||||||
django-polymorphic
 | 
					django-polymorphic
 | 
				
			||||||
 | 
					model-mommy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#PLUGINS
 | 
					#PLUGINS
 | 
				
			||||||
djangocms_flash
 | 
					djangocms_flash
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@ class PostListViewUngleich(PostListView):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_queryset(self):
 | 
					    def get_queryset(self):
 | 
				
			||||||
        language = get_language()
 | 
					        language = get_language()
 | 
				
			||||||
        queryset = self.model.objects.translated(language)
 | 
					        queryset = self.model.objects.filter(publish=True).translated(language)
 | 
				
			||||||
        setattr(self.request, get_setting('CURRENT_NAMESPACE'), self.config)
 | 
					        setattr(self.request, get_setting('CURRENT_NAMESPACE'), self.config)
 | 
				
			||||||
        return queryset
 | 
					        return queryset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
from django.test import TestCase
 | 
					from django.test import TestCase
 | 
				
			||||||
from .forms import ContactUsForm
 | 
					from .forms import ContactUsForm, BillingAddressForm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ContactUsFormTest(TestCase):
 | 
					class ContactUsFormTest(TestCase):
 | 
				
			||||||
| 
						 | 
					@ -23,3 +23,27 @@ class ContactUsFormTest(TestCase):
 | 
				
			||||||
    def test_invalid_form(self):
 | 
					    def test_invalid_form(self):
 | 
				
			||||||
        form = ContactUsForm(data=self.incompleted_data)
 | 
					        form = ContactUsForm(data=self.incompleted_data)
 | 
				
			||||||
        self.assertFalse(form.is_valid())
 | 
					        self.assertFalse(form.is_valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BillingAddressFormTest(TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.completed_data = {
 | 
				
			||||||
 | 
					            'street_address': 'street name',
 | 
				
			||||||
 | 
					            'city': 'MyCity',
 | 
				
			||||||
 | 
					            'postal_code': '32123123123123',
 | 
				
			||||||
 | 
					            'country': 'VE',
 | 
				
			||||||
 | 
					            'token': 'a23kfmslwxhkwis'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.incompleted_data = {
 | 
				
			||||||
 | 
					            'street_address': 'test',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_valid_form(self):
 | 
				
			||||||
 | 
					        form = BillingAddressForm(data=self.completed_data)
 | 
				
			||||||
 | 
					        self.assertTrue(form.is_valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_invalid_form(self):
 | 
				
			||||||
 | 
					        form = BillingAddressForm(data=self.incompleted_data)
 | 
				
			||||||
 | 
					        self.assertFalse(form.is_valid())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,66 @@
 | 
				
			||||||
from django.test import TestCase
 | 
					from django.test import TestCase
 | 
				
			||||||
 | 
					from django.test import Client
 | 
				
			||||||
 | 
					from model_mommy import mommy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create your tests here.
 | 
					
 | 
				
			||||||
 | 
					class BaseTestCase(TestCase):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Base class to initialize the test cases
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Password
 | 
				
			||||||
 | 
					        self.dummy_password = 'test_password'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Users
 | 
				
			||||||
 | 
					        self.customer, self.another_customer = mommy.make('membership.CustomUser',
 | 
				
			||||||
 | 
					                                                          _quantity=2)
 | 
				
			||||||
 | 
					        self.customer.set_password(self.dummy_password)
 | 
				
			||||||
 | 
					        self.customer.save()
 | 
				
			||||||
 | 
					        self.another_customer.set_password(self.dummy_password)
 | 
				
			||||||
 | 
					        self.another_customer.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Stripe mocked data
 | 
				
			||||||
 | 
					        self.stripe_mocked_customer = self.customer_stripe_mocked_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #  Clients
 | 
				
			||||||
 | 
					        self.customer_client = self.get_client(self.customer)
 | 
				
			||||||
 | 
					        self.another_customer_client = self.get_client(self.another_customer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_client(self, user):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Authenticate a user and return the client
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        client = Client()
 | 
				
			||||||
 | 
					        client.login(email=user.email, password=self.dummy_password)
 | 
				
			||||||
 | 
					        return client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def customer_stripe_mocked_data(self):
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            "id": "cus_8R1y9UWaIIjZqr",
 | 
				
			||||||
 | 
					            "object": "customer",
 | 
				
			||||||
 | 
					            "currency": "usd",
 | 
				
			||||||
 | 
					            "default_source": "card_18A9up2eZvKYlo2Cq2RJMGeF",
 | 
				
			||||||
 | 
					            "email": "vmedixtodd+1@gmail.com",
 | 
				
			||||||
 | 
					            "livemode": False,
 | 
				
			||||||
 | 
					            "metadata": {
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "shipping": None,
 | 
				
			||||||
 | 
					            "sources": {
 | 
				
			||||||
 | 
					                "object": "list",
 | 
				
			||||||
 | 
					                "data": [{
 | 
				
			||||||
 | 
					                    "id": "card_18A9up2eZvKYlo2Cq2RJMGeF",
 | 
				
			||||||
 | 
					                    "object": "card",
 | 
				
			||||||
 | 
					                    "brand": "Visa",
 | 
				
			||||||
 | 
					                    "country": "US",
 | 
				
			||||||
 | 
					                    "customer": "cus_8R1y9UWaIIjZqr",
 | 
				
			||||||
 | 
					                    "cvc_check": "pass",
 | 
				
			||||||
 | 
					                    "dynamic_last4": None,
 | 
				
			||||||
 | 
					                    "exp_month": 12,
 | 
				
			||||||
 | 
					                    "exp_year": 2018,
 | 
				
			||||||
 | 
					                    "funding": "credit",
 | 
				
			||||||
 | 
					                    "last4": "4242",
 | 
				
			||||||
 | 
					                }]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||