diff --git a/.gitignore b/.gitignore index 0bc1fef..a785990 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,11 @@ __pycache__/ *.py[cod] *.DS_Store + +# Private files db.sqlite3 local.py +saml_config.yml conf/ extras/ diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index bd2420d..0000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "htdocs/feedback"] - path = htdocs/feedback - url = https://github.com/mercycorps/feedback.git -[submodule "htdocs/djangocosign"] - path = htdocs/djangocosign - url = https://github.com/mercycorps/djangocosign.git diff --git a/htdocs/dataviz/__init__.py b/dataviz/__init__.py similarity index 100% rename from htdocs/dataviz/__init__.py rename to dataviz/__init__.py diff --git a/htdocs/dataviz/admin.py b/dataviz/admin.py similarity index 100% rename from htdocs/dataviz/admin.py rename to dataviz/admin.py diff --git a/htdocs/dataviz/api.py b/dataviz/api.py similarity index 99% rename from htdocs/dataviz/api.py rename to dataviz/api.py index a3c1e96..6cfa35c 100644 --- a/htdocs/dataviz/api.py +++ b/dataviz/api.py @@ -1,4 +1,5 @@ from operator import and_, or_ +from functools import reduce from django.db.models import Q from rest_framework import viewsets, pagination diff --git a/htdocs/dataviz/forms.py b/dataviz/forms.py similarity index 98% rename from htdocs/dataviz/forms.py rename to dataviz/forms.py index 6638994..e65ae72 100644 --- a/htdocs/dataviz/forms.py +++ b/dataviz/forms.py @@ -1,4 +1,4 @@ -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django import forms diff --git a/htdocs/dataviz/management/__init__.py b/dataviz/management/__init__.py similarity index 100% rename from htdocs/dataviz/management/__init__.py rename to dataviz/management/__init__.py diff --git a/htdocs/dataviz/management/commands/__init__.py b/dataviz/management/commands/__init__.py similarity index 100% rename from htdocs/dataviz/management/commands/__init__.py rename to dataviz/management/commands/__init__.py diff --git a/htdocs/dataviz/management/commands/teststuff.py b/dataviz/management/commands/teststuff.py similarity index 100% rename from htdocs/dataviz/management/commands/teststuff.py rename to dataviz/management/commands/teststuff.py diff --git a/htdocs/dataviz/migrations/0001_initial.py b/dataviz/migrations/0001_initial.py similarity index 100% rename from htdocs/dataviz/migrations/0001_initial.py rename to dataviz/migrations/0001_initial.py diff --git a/htdocs/dataviz/migrations/0002_donorcategory.py b/dataviz/migrations/0002_donorcategory.py similarity index 100% rename from htdocs/dataviz/migrations/0002_donorcategory.py rename to dataviz/migrations/0002_donorcategory.py diff --git a/htdocs/dataviz/migrations/0003_methodology_sectorsubsector_theme.py b/dataviz/migrations/0003_methodology_sectorsubsector_theme.py similarity index 100% rename from htdocs/dataviz/migrations/0003_methodology_sectorsubsector_theme.py rename to dataviz/migrations/0003_methodology_sectorsubsector_theme.py diff --git a/htdocs/dataviz/migrations/0004_grantmethodology_granttheme.py b/dataviz/migrations/0004_grantmethodology_granttheme.py similarity index 100% rename from htdocs/dataviz/migrations/0004_grantmethodology_granttheme.py rename to dataviz/migrations/0004_grantmethodology_granttheme.py diff --git a/htdocs/dataviz/migrations/__init__.py b/dataviz/migrations/__init__.py similarity index 100% rename from htdocs/dataviz/migrations/__init__.py rename to dataviz/migrations/__init__.py diff --git a/htdocs/dataviz/mixins.py b/dataviz/mixins.py similarity index 100% rename from htdocs/dataviz/mixins.py rename to dataviz/mixins.py diff --git a/htdocs/dataviz/models.py b/dataviz/models.py similarity index 69% rename from htdocs/dataviz/models.py rename to dataviz/models.py index 595f060..3abe124 100644 --- a/htdocs/dataviz/models.py +++ b/dataviz/models.py @@ -1,105 +1,112 @@ -from django.core.validators import MinValueValidator from django.core.exceptions import ValidationError +from django.db import models +from django.db.models import Q, Count -from django.utils import timezone -from django.utils.timezone import utc -from django.db import models -from django.db.models import Q, Sum, Max, Count +class DBRouter: + + def db_for_read(self, model, **hints): + if model._meta.app_label == 'dataviz': + return 'gait' + return None -from django.contrib.auth.models import User def validate_positive(value): if value <= 0: raise ValidationError('%s is not greater than zero' % value) + class DonorCategory(models.Model): - donor_category_id = models.PositiveIntegerField(primary_key=True, db_column="DonorCategoryID", validators=[validate_positive,]) + donor_category_id = models.PositiveIntegerField( + primary_key=True, db_column="DonorCategoryID", validators=[validate_positive]) name = models.CharField(db_column="DonorCategory", max_length=255) class Meta: managed = False db_table = 'donorcategorytbl' - def __unicode__(self): + def __str__(self): return self.name class Donor(models.Model): - donor_id = models.PositiveIntegerField(primary_key=True, db_column="DonorID", validators=[validate_positive,]) + donor_id = models.PositiveIntegerField(primary_key=True, db_column="DonorID", validators=[validate_positive]) name = models.CharField(db_column="Donor", max_length=3, null=True) - category = models.ForeignKey(DonorCategory, db_column="DonorCategoryID", related_name="donors") + category = models.ForeignKey( + DonorCategory, db_column="DonorCategoryID", related_name="donors", on_delete=models.PROTECT) class Meta: managed = False db_table = "donortbl" - ordering = ['name',] + ordering = ['name'] @property def num_of_grants(self): return self.grants.aggregate(num_grants=Count('grant_id'))['num_grants'] - def __unicode__(self): + def __str__(self): return self.name or '' class DonorDepartment(models.Model): - department_id = models.PositiveIntegerField(primary_key=True, db_column="DepartmentID", validators=[validate_positive,]) - donor = models.ForeignKey(Donor, db_column="DonorID") + department_id = models.PositiveIntegerField( + primary_key=True, db_column="DepartmentID", validators=[validate_positive]) + donor = models.ForeignKey(Donor, db_column="DonorID", on_delete=models.CASCADE) name = models.CharField(db_column="Department", max_length=255) class Meta: managed = False db_table = 'donordepttbl' - ordering = ['name',] + ordering = ['name'] - def __unicode__(self): + def __str__(self): return self.name or '' class Region(models.Model): - region_id = models.PositiveIntegerField(primary_key=True, db_column="RegionID", validators=[validate_positive,]) + region_id = models.PositiveIntegerField(primary_key=True, db_column="RegionID", validators=[validate_positive]) name = models.CharField(db_column="Region", max_length=100) class Meta: managed = False db_table = "regiontbl" - ordering = ['name',] + ordering = ['name'] - def __unicode__(self): + def __str__(self): return self.name or '' class Country(models.Model): - country_id = models.PositiveIntegerField(primary_key=True, db_column="CountryID", validators=[validate_positive,]) + country_id = models.PositiveIntegerField(primary_key=True, db_column="CountryID", validators=[validate_positive]) name = models.CharField(db_column="Country", max_length=100) - region = models.ForeignKey(Region, db_column="RegionID", related_name="countries") + region = models.ForeignKey(Region, db_column="RegionID", related_name="countries", on_delete=models.CASCADE) iso2 = models.CharField(db_column="CountryCode", max_length=2) class Meta: managed = False db_table = "countrytbl" - ordering = ['name',] + ordering = ['name'] - def __unicode__(self): + def __str__(self): return self.name or '' class Sector(models.Model): - sector_id = models.PositiveIntegerField(primary_key=True, db_column="SectorID", validators=[validate_positive,]) + sector_id = models.PositiveIntegerField(primary_key=True, db_column="SectorID", validators=[validate_positive]) name = models.CharField(db_column="Sector", max_length=100) class Meta: managed = False db_table = "n_sectortbl" - ordering = ['name',] + ordering = ['name'] - def __unicode__(self): + def __str__(self): return self.name or '' class SubSector(models.Model): - subsector_id = models.PositiveIntegerField(primary_key=True, db_column="SubSectorID", validators=[validate_positive,]) + subsector_id = models.PositiveIntegerField( + primary_key=True, db_column="SubSectorID", validators=[validate_positive]) name = models.CharField(db_column="SubSector", max_length=50) sectors = models.ManyToManyField(Sector, through="SectorSubSector") @@ -107,12 +114,13 @@ class Meta: managed = False db_table = 'n_subsectortbl' - def __unicode__(self): + def __str__(self): return self.name or '' + class SectorSubSector(models.Model): - sector = models.ForeignKey(Sector, db_column="SectorID") - subsector = models.ForeignKey(SubSector, db_column="SubSectorID") + sector = models.ForeignKey(Sector, db_column="SectorID", on_delete=models.CASCADE) + subsector = models.ForeignKey(SubSector, db_column="SubSectorID", on_delete=models.CASCADE) class Meta: managed = False @@ -120,14 +128,14 @@ class Meta: class SectorType(models.Model): - sector_id = models.PositiveIntegerField(primary_key=True, db_column="SectorTypeID", validators=[validate_positive,]) + sector_id = models.PositiveIntegerField(primary_key=True, db_column="SectorTypeID", validators=[validate_positive]) sector_type = models.CharField(db_column="SectorType", max_length=50) class Meta: managed = False db_table = "n_sectortypetbl" - def __unicode__(self): + def __str__(self): return self.sector_type or '' @@ -139,7 +147,7 @@ class Meta: managed = False db_table = 'n_themetbl' - def __unicode__(self): + def __str__(self): return self.name or '' @@ -151,15 +159,17 @@ class Meta: managed = False db_table = 'n_methodologytbl' - def __unicode__(self): + def __str__(self): return self.name or '' + class GrantsWonManager(models.Manager): def get_queryset(self): return super(GrantsWonManager, self).get_queryset().filter( - Q(status='Closed')| - Q(status='Funded')| - Q(status='Completed')) + Q(status='Closed') | + Q(status='Funded') | + Q(status='Completed') + ) class GrantsLostManager(models.Manager): @@ -171,13 +181,15 @@ def get_queryset(self): class BothWonLostGrants(models.Manager): def get_queryset(self): return super(BothWonLostGrants, self).get_queryset().filter( - Q(status='Closed')| - Q(status='Funded')| - Q(status='Completed')| - Q(status="Rejected")) + Q(status='Closed') | + Q(status='Funded') | + Q(status='Completed') | + Q(status="Rejected") + ) + class Grant(models.Model): - grant_id = models.PositiveIntegerField(primary_key=True, db_column="GrantID", validators=[validate_positive,]) + grant_id = models.PositiveIntegerField(primary_key=True, db_column="GrantID", validators=[validate_positive]) title = models.CharField(db_column="GrantTitle", max_length=250, null=True) currency = models.CharField(db_column="Currency", max_length=3, null=True) amount = models.DecimalField(db_column="Amount", max_digits=20, decimal_places=4, null=True) @@ -185,7 +197,7 @@ class Grant(models.Model): amount_icr = models.DecimalField(db_column="ICRAmount", max_digits=20, decimal_places=4, null=True) status = models.CharField(db_column="FundingStatus", max_length=50, null=True) hq_admin = models.CharField(db_column="HQadmin", max_length=3, null=True) - donor = models.ForeignKey(Donor, db_column="DonorID", related_name='grants', null=True) + donor = models.ForeignKey(Donor, db_column="DonorID", related_name='grants', null=True, on_delete=models.PROTECT) submission_date = models.DateField(db_column="SubmissionDate", null=True) start_date = models.DateField(db_column="StartDate", null=True) end_date = models.DateField(db_column="EndDate", null=True) @@ -193,7 +205,7 @@ class Grant(models.Model): funding_probability = models.CharField(db_column="FundingProbability", max_length=255, null=True) complex_program = models.BooleanField(db_column="ComplexProgram") sensitive_data = models.BooleanField(db_column="SensitiveData") - project_length = models.PositiveIntegerField(db_column="ProjectLength", validators=[validate_positive,], null=True) + project_length = models.PositiveIntegerField(db_column="ProjectLength", validators=[validate_positive], null=True) created = models.DateField(db_column="CreationDate", null=True) updated = models.DateField(db_column="LastModifiedDate", null=True) sectors = models.ManyToManyField(Sector, through="GrantSector") @@ -201,32 +213,34 @@ class Grant(models.Model): themes = models.ManyToManyField(Theme, through='GrantTheme') methodologies = models.ManyToManyField(Methodology, through='GrantMethodology') countries = models.ManyToManyField(Country, through="GrantCountry", related_name='grants') - objects = models.Manager() # The default manager. + objects = models.Manager() won_grants = GrantsWonManager() lost_grants = GrantsLostManager() both_won_n_loss_grants = BothWonLostGrants() - department = models.ForeignKey(DonorDepartment, db_column="DepartmentID", related_name='grants', null=True) + department = models.ForeignKey( + DonorDepartment, db_column="DepartmentID", related_name='grants', null=True, on_delete=models.PROTECT) - def __unicode__(self): + def __str__(self): return self.title or '' class Meta: managed = False db_table = "granttbl" - #ordering = ['title',] + class GrantTheme(models.Model): - grant = models.ForeignKey(Grant, db_column="GrantID") - theme = models.ForeignKey(Theme, db_column="ThemeID") + grant = models.ForeignKey(Grant, db_column="GrantID", on_delete=models.CASCADE) + theme = models.ForeignKey(Theme, db_column="ThemeID", on_delete=models.CASCADE) class Meta: managed = False db_table = 'n_grantthemetbl' unique_together = (('grant', 'theme'),) + class GrantMethodology(models.Model): - grant = models.ForeignKey(Grant, db_column="GrantID") - methodology = models.ForeignKey(Methodology, db_column="MethodologyID") + grant = models.ForeignKey(Grant, db_column="GrantID", on_delete=models.CASCADE) + methodology = models.ForeignKey(Methodology, db_column="MethodologyID", on_delete=models.CASCADE) class Meta: managed = False @@ -234,10 +248,10 @@ class Meta: class GrantSector(models.Model): - grant = models.ForeignKey(Grant, db_column="GrantID") - sector = models.ForeignKey(Sector, db_column="SectorID") - subsector = models.ForeignKey(SubSector, db_column="SubSectorID", null=True) - sector_type = models.ForeignKey(SectorType, db_column="SectorTypeID", null=True) + grant = models.ForeignKey(Grant, db_column="GrantID", on_delete=models.CASCADE) + sector = models.ForeignKey(Sector, db_column="SectorID", on_delete=models.CASCADE) + subsector = models.ForeignKey(SubSector, db_column="SubSectorID", null=True, on_delete=models.CASCADE) + sector_type = models.ForeignKey(SectorType, db_column="SectorTypeID", null=True, on_delete=models.CASCADE) class Meta: managed = False @@ -246,12 +260,10 @@ class Meta: class GrantCountry(models.Model): - grant = models.ForeignKey(Grant, db_column="GrantID") - country = models.ForeignKey(Country, db_column="CountryID") + grant = models.ForeignKey(Grant, db_column="GrantID", on_delete=models.CASCADE) + country = models.ForeignKey(Country, db_column="CountryID", on_delete=models.CASCADE) class Meta: managed = False db_table = 'grantcountrytbl' unique_together = (("grant", "country"),) - - diff --git a/htdocs/dataviz/serializers.py b/dataviz/serializers.py similarity index 99% rename from htdocs/dataviz/serializers.py rename to dataviz/serializers.py index bd63669..1e3d10a 100644 --- a/htdocs/dataviz/serializers.py +++ b/dataviz/serializers.py @@ -3,7 +3,7 @@ from rest_framework import serializers from .models import * -locale.setlocale(locale.LC_ALL, 'en_US') +locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') class GrantSerializerPlain(serializers.ModelSerializer): gait_id = serializers.SerializerMethodField("get_grant_id") diff --git a/htdocs/dataviz/templates/global_dashboard.html b/dataviz/templates/global_dashboard.html similarity index 98% rename from htdocs/dataviz/templates/global_dashboard.html rename to dataviz/templates/global_dashboard.html index 166dd54..fd1faa4 100644 --- a/htdocs/dataviz/templates/global_dashboard.html +++ b/dataviz/templates/global_dashboard.html @@ -1,8 +1,9 @@ -{% extends 'base.html' %} +{% extends 'pdviz/base.html' %} {% load staticfiles %} {% load crispy_forms_tags %} - + + {% block content %} @@ -38,7 +39,7 @@ Decided Ratio
Decided: -
+
@@ -61,7 +62,7 @@ Capture Rate by Region and Country
Overall Capture Rate ($mil):
-
+
@@ -110,7 +111,7 @@ container: 'body' }); - var countPercentConfig = { + let countPercentConfig = { title: "Win / Loss Rates Per Region and Country", yAxisTitle: "Percentage", stacking: "percent", @@ -127,7 +128,7 @@ divID: "countChart" }; - var countNominalConfig = { + let countNominalConfig = { title: "Wins and Losses Per Region and Country", yAxisTitle: "Grant Count", stacking: "normal", @@ -143,7 +144,7 @@ divID: "countChart" }; - var capturePercentConfig = { + let capturePercentConfig = { title: "Capture Rate Per Region and Country", yAxisTitle: "Percentage", stacking: "percent", @@ -159,7 +160,7 @@ divID: "captureChart" }; - var captureNominalConfig = { + let captureNominalConfig = { title: "Value of Grants Won/Lost Per Region and Country", yAxisTitle: "Cumulative Grant Values", stacking: "normal", @@ -175,13 +176,13 @@ divID: "captureChart" }; - var activeCountConfig = countPercentConfig - var activeCaptureConfig = capturePercentConfig + let activeCountConfig = countPercentConfig; + let activeCaptureConfig = capturePercentConfig; // var drilldown_levels = []; /// Base configuration for hicharts - var baseConfig = { + let baseConfig = { credits: { text: 'mercycorps.org', href: 'http://www.mercycorps.org', @@ -215,7 +216,7 @@ } }, - } + }; // On the search form reset event, clear all of the select2 dorpdowns. $("body").on("reset", "#grants_donor_filter_form", function(e) { @@ -241,7 +242,7 @@ e.preventDefault(); $('#showCountNominal').removeClass("active").removeAttr("aria-pressed", "true"); $('#showCountPercent').addClass("active").attr("aria-pressed", "true"); - activeCountConfig = countPercentConfig + activeCountConfig = countPercentConfig; set_win_loss_labels(countPercentConfig); draw_bar_chart(false, false, countPercentConfig); }); @@ -250,7 +251,7 @@ e.preventDefault(); $('#showCountPercent').removeClass("active").removeAttr("aria-pressed", "true"); $('#showCountNominal').addClass("active").attr("aria-pressed", "true"); - activeCountConfig = countNominalConfig + activeCountConfig = countNominalConfig; set_win_loss_labels(countNominalConfig); draw_bar_chart(false, false, countNominalConfig); }); @@ -259,7 +260,7 @@ e.preventDefault(); $('#showCaptureNominal').removeClass("active").removeAttr("aria-pressed", "true"); $('#showCapturePercent').addClass("active").attr("aria-pressed", "true"); - activeCountConfig = capturePercentConfig + activeCountConfig = capturePercentConfig; set_win_loss_labels(capturePercentConfig); draw_bar_chart(false, false, capturePercentConfig); }); @@ -268,7 +269,7 @@ e.preventDefault(); $('#showCapturePercent').removeClass("active").removeAttr("aria-pressed", "true"); $('#showCaptureNominal').addClass("active").attr("aria-pressed", "true"); - activeCountConfig = captureNominalConfig + activeCountConfig = captureNominalConfig; set_win_loss_labels(captureNominalConfig); draw_bar_chart(false, false, captureNominalConfig); }); diff --git a/htdocs/dataviz/tests/__init__.py b/dataviz/tests/__init__.py similarity index 100% rename from htdocs/dataviz/tests/__init__.py rename to dataviz/tests/__init__.py diff --git a/htdocs/dataviz/tests/tests.py b/dataviz/tests/tests.py similarity index 100% rename from htdocs/dataviz/tests/tests.py rename to dataviz/tests/tests.py diff --git a/htdocs/dataviz/views.py b/dataviz/views.py similarity index 99% rename from htdocs/dataviz/views.py rename to dataviz/views.py index d6754ee..6fe09fe 100644 --- a/htdocs/dataviz/views.py +++ b/dataviz/views.py @@ -2,6 +2,7 @@ from collections import OrderedDict +from django.contrib.auth.mixins import LoginRequiredMixin from django.db.models import DecimalField, FloatField, IntegerField, ExpressionWrapper, F, Case, When from django.db.models.functions import Coalesce from django.db.models.expressions import RawSQL @@ -377,7 +378,7 @@ def get_grants_dataset(kwargs): return series, grants, aggregates -class GlobalDashboard(TemplateView): +class GlobalDashboard(LoginRequiredMixin, TemplateView): template_name='global_dashboard.html' def get_context_data(self, **kwargs): @@ -418,10 +419,9 @@ def get_context_data(self, **kwargs): return context -class GlobalDashboardData(View): +class GlobalDashboardData(LoginRequiredMixin, View): def get(self, request, *args, **kwargs): - donor_categories = get_donor_categories_dataset(self.request.GET) donors_list = get_donors_dataset(self.request.GET) series, grants, aggregates = get_grants_dataset(self.request.GET) diff --git a/htdocs/djangocosign b/htdocs/djangocosign deleted file mode 160000 index b741971..0000000 --- a/htdocs/djangocosign +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b741971070cdfaa43c8437b04e3eee3a7d491dd4 diff --git a/htdocs/feedback b/htdocs/feedback deleted file mode 160000 index 61c070e..0000000 --- a/htdocs/feedback +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 61c070e02121e570be5620327e82843a1c9549f0 diff --git a/htdocs/pdviz/requirements/base.txt b/htdocs/pdviz/requirements/base.txt deleted file mode 100644 index 38445a0..0000000 --- a/htdocs/pdviz/requirements/base.txt +++ /dev/null @@ -1,34 +0,0 @@ -Django==1.11.14 -Jinja2==2.10 -Markdown==2.6.11 -MarkupSafe==1.0 -MySQL-python==1.2.5 -PyYAML==3.12 -certifi==2018.4.16 -chardet==3.0.4 -coreapi==2.3.3 -coreschema==0.0.4 -django-braces==1.13.0 -django-crispy-forms==1.7.2 -django-filter==1.1.0 -django-rest-swagger==2.2.0 -djangorestframework==3.8.2 -gdata==2.0.18 -google-api-python-client==1.7.3 -httplib2==0.11.3 -idna==2.7 -itypes==1.1.0 -oauth2client==4.1.2 -openapi-codec==1.3.2 -pyasn1==0.4.3 -pyasn1-modules==0.2.2 -python-ldap==3.1.0 -python-memcached==1.59 -pytz==2018.5 -requests==2.19.1 -rsa==3.4.2 -selenium==3.13.0 -simplejson==3.16.0 -six==1.11.0 -uritemplate==3.0.0 -urllib3==1.23 diff --git a/htdocs/pdviz/urls.py b/htdocs/pdviz/urls.py deleted file mode 100644 index 34561b7..0000000 --- a/htdocs/pdviz/urls.py +++ /dev/null @@ -1,60 +0,0 @@ -"""pdviz URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/1.8/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') -Including another URLconf - 1. Add an import: from blog import urls as blog_urls - 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) -""" -from django.conf import settings -from django.conf.urls import include, url -from django.conf.urls.static import static -from django.views.decorators.cache import never_cache, cache_page -from django.contrib import admin -from django.contrib.auth.views import login - -from rest_framework import routers, serializers, viewsets -from rest_framework_swagger.views import get_swagger_view - - -from .views import * -from dataviz.views import * -from dataviz.api import * - -swagger_schema_view = get_swagger_view(title='PDViz') - -router = routers.DefaultRouter() -router.register('grants', GrantViewSet, base_name='grants') -router.register('grants_by_country', GrantsByCountryViewSet, base_name='grants_by_country') -router.register('donors', DonorViewSet, base_name='donors') -router.register('countries', CountryViewSet, base_name='countries') -router.register('donorcategories', DonorCategoryViewSet, base_name='donorcategories') -router.register('donordepartments', DonorDepartmentViewSet, base_name='donordepartments') -router.register('sector', SectorViewSet, base_name='sectors') -router.register('subsector', SubSectorViewSet, base_name='subsectors') -router.register('methodologies', MethodologyViewSet, base_name='methodologies') -router.register('themes', ThemeViewSet, base_name='themes') - - -urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), - url(r'^api/v1/', include(router.urls)), - url(r'^api/docs/', swagger_schema_view), - url(r'^login/$', login, name='login'), - url('^', include('django.contrib.auth.urls')), - url(r'^$', HomeView.as_view(), name='home'), - url(r'^global_dashboard/$', cache_page(60*60*12)(GlobalDashboard.as_view()), name='global_dashboard'), - url(r'^global_dashboard_data/$', cache_page(60*60*12)(GlobalDashboardData.as_view()), name='global_dashboard_data'), - #url(r'^dataviz/countries_by_region/(?P[-\w]+)/$', CountriesByRegion.as_view(), name='cbg'), - url(r'^feedback/', include('feedback.urls')), -] - -urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) -urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/htdocs/pdviz/views.py b/htdocs/pdviz/views.py deleted file mode 100644 index 9cdff56..0000000 --- a/htdocs/pdviz/views.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.http import HttpResponse -from django.views.generic import TemplateView - -from django.contrib import messages - -class HomeView(TemplateView): - template_name='index.html' - - def get(self, request, *args, **kwargs): - #messages.success(self.request, "Hey, I'm Okay.") - return super(HomeView, self).get(request, *args, **kwargs) \ No newline at end of file diff --git a/htdocs/manage.py b/manage.py similarity index 100% rename from htdocs/manage.py rename to manage.py diff --git a/htdocs/pdviz/__init__.py b/pdviz/__init__.py similarity index 100% rename from htdocs/pdviz/__init__.py rename to pdviz/__init__.py diff --git a/htdocs/pdviz/context_processors.py b/pdviz/context_processors.py similarity index 100% rename from htdocs/pdviz/context_processors.py rename to pdviz/context_processors.py diff --git a/htdocs/pdviz/middleware.py b/pdviz/middleware.py similarity index 91% rename from htdocs/pdviz/middleware.py rename to pdviz/middleware.py index e34a146..3b104e0 100644 --- a/htdocs/pdviz/middleware.py +++ b/pdviz/middleware.py @@ -1,7 +1,8 @@ import json import time from django.contrib import messages - +# TODO: These need to be deleted or revised. They are not valid for Django 2.2. +# TODO: Update to this? https://gist.github.com/DmytroLitvinov/39d9a1a93a46eb9da1e17d8e73f35e11 class AjaxMessaging(object): """ To make django error messages set by django.contrib.messages framework @@ -49,6 +50,7 @@ def process_response(self, request, response): response.content = json.dumps(content) return response +# TODO: Delete? Copied from https://github.com/timsavage/django-extras class TimingMiddleware(object): """ Appends the X-PROCESSING_TIME_MS header to all responses. diff --git a/htdocs/pdviz/settings/__init__.py b/pdviz/settings/__init__.py similarity index 100% rename from htdocs/pdviz/settings/__init__.py rename to pdviz/settings/__init__.py diff --git a/htdocs/pdviz/settings/base.py b/pdviz/settings/base.py similarity index 68% rename from htdocs/pdviz/settings/base.py rename to pdviz/settings/base.py index 451f7c3..6ffd030 100644 --- a/htdocs/pdviz/settings/base.py +++ b/pdviz/settings/base.py @@ -1,32 +1,20 @@ """ Django settings for pdviz project. - -Generated by 'django-admin startproject' using Django 1.8.2. - -For more information on this file, see -https://docs.djangoproject.com/en/1.8/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.8/ref/settings/ """ -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -import os -import django.conf.global_settings as DEFAULT_SETTINGS +from os.path import join, dirname, abspath from django.contrib.messages import constants as message -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ +BASE_DIR = dirname(dirname(abspath(__file__))) +PROJECT_DIR = dirname(BASE_DIR) # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'REPLACED_IN_LOCAL_SETTINGS_FILE' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = False -ALLOWED_HOSTS = ["localhost", ".mercycorps.org"] +ALLOWED_HOSTS = [".mercycorps.org"] # Application definition @@ -42,29 +30,26 @@ 'rest_framework', 'rest_framework_swagger', 'crispy_forms', - 'djangocosign', 'dataviz', - 'feedback', + 'social_django', + # 'feedback', ) # to clear cache: # py manage.py shell # >>> from django.core.cache import cache # >>> cache._cache.flush_all() -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( + 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', - #'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', - #'django.middleware.cache.FetchFromCacheMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.RemoteUserMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'pdviz.middleware.AjaxMessaging', - 'pdviz.middleware.TimingMiddleware', + # TODO: update or remove custom middleware + # 'pdviz.middleware.AjaxMessaging', + # 'pdviz.middleware.TimingMiddleware', ) ROOT_URLCONF = 'pdviz.urls' @@ -72,7 +57,7 @@ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [BASE_DIR + "/templates/",], + 'DIRS': [PROJECT_DIR + "/templates/", BASE_DIR + "/templates/"], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -85,7 +70,7 @@ 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'pdviz.context_processors.google_analytics', - 'feedback.context_processors.base_context_processor', + # 'feedback.context_processors.base_context_processor', ], }, }, @@ -122,14 +107,13 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.8/howto/static-files/ STATICFILES_DIRS = ( - os.path.join(BASE_DIR, "static"), + join(BASE_DIR, "static"), ) STATIC_URL = '/static/' -# https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-STATIC_ROOT # STATIC_ROOT = BASE_DIR + "/static/" -MEDIA_ROOT = os.path.join(BASE_DIR, 'media') +MEDIA_ROOT = join(BASE_DIR, 'media') MEDIA_URL = '/media/' CRISPY_TEMPLATE_PACK='bootstrap3' @@ -141,13 +125,12 @@ message.WARNING: 'warning', message.ERROR: 'danger',} -# https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-LOGIN_REDIRECT_URL LOGIN_REDIRECT_URL = '/' AUTHENTICATION_BACKENDS = ( - 'djangocosign.cosign.CosignBackend', - 'django.contrib.auth.backends.ModelBackend', - ) + 'social_core.backends.saml.SAMLAuth', + 'django.contrib.auth.backends.ModelBackend', +) # Turn on pagination, and make API accessible only to admin users. diff --git a/htdocs/pdviz/settings/local_example.py b/pdviz/settings/local_example.py similarity index 100% rename from htdocs/pdviz/settings/local_example.py rename to pdviz/settings/local_example.py diff --git a/htdocs/pdviz/static/502.html b/pdviz/static/502.html similarity index 100% rename from htdocs/pdviz/static/502.html rename to pdviz/static/502.html diff --git a/htdocs/pdviz/static/admin/css/base.css b/pdviz/static/admin/css/base.css similarity index 100% rename from htdocs/pdviz/static/admin/css/base.css rename to pdviz/static/admin/css/base.css diff --git a/htdocs/pdviz/static/admin/css/changelists.css b/pdviz/static/admin/css/changelists.css similarity index 100% rename from htdocs/pdviz/static/admin/css/changelists.css rename to pdviz/static/admin/css/changelists.css diff --git a/htdocs/pdviz/static/admin/css/dashboard.css b/pdviz/static/admin/css/dashboard.css similarity index 100% rename from htdocs/pdviz/static/admin/css/dashboard.css rename to pdviz/static/admin/css/dashboard.css diff --git a/htdocs/pdviz/static/admin/css/fonts.css b/pdviz/static/admin/css/fonts.css similarity index 100% rename from htdocs/pdviz/static/admin/css/fonts.css rename to pdviz/static/admin/css/fonts.css diff --git a/htdocs/pdviz/static/admin/css/forms.css b/pdviz/static/admin/css/forms.css similarity index 100% rename from htdocs/pdviz/static/admin/css/forms.css rename to pdviz/static/admin/css/forms.css diff --git a/htdocs/pdviz/static/admin/css/login.css b/pdviz/static/admin/css/login.css similarity index 100% rename from htdocs/pdviz/static/admin/css/login.css rename to pdviz/static/admin/css/login.css diff --git a/htdocs/pdviz/static/admin/css/rtl.css b/pdviz/static/admin/css/rtl.css similarity index 100% rename from htdocs/pdviz/static/admin/css/rtl.css rename to pdviz/static/admin/css/rtl.css diff --git a/htdocs/pdviz/static/admin/css/widgets.css b/pdviz/static/admin/css/widgets.css similarity index 100% rename from htdocs/pdviz/static/admin/css/widgets.css rename to pdviz/static/admin/css/widgets.css diff --git a/htdocs/pdviz/static/admin/fonts/LICENSE.txt b/pdviz/static/admin/fonts/LICENSE.txt similarity index 100% rename from htdocs/pdviz/static/admin/fonts/LICENSE.txt rename to pdviz/static/admin/fonts/LICENSE.txt diff --git a/htdocs/pdviz/static/admin/fonts/README.txt b/pdviz/static/admin/fonts/README.txt similarity index 100% rename from htdocs/pdviz/static/admin/fonts/README.txt rename to pdviz/static/admin/fonts/README.txt diff --git a/htdocs/pdviz/static/admin/fonts/Roboto-Bold-webfont.woff b/pdviz/static/admin/fonts/Roboto-Bold-webfont.woff similarity index 100% rename from htdocs/pdviz/static/admin/fonts/Roboto-Bold-webfont.woff rename to pdviz/static/admin/fonts/Roboto-Bold-webfont.woff diff --git a/htdocs/pdviz/static/admin/fonts/Roboto-Light-webfont.woff b/pdviz/static/admin/fonts/Roboto-Light-webfont.woff similarity index 100% rename from htdocs/pdviz/static/admin/fonts/Roboto-Light-webfont.woff rename to pdviz/static/admin/fonts/Roboto-Light-webfont.woff diff --git a/htdocs/pdviz/static/admin/fonts/Roboto-Regular-webfont.woff b/pdviz/static/admin/fonts/Roboto-Regular-webfont.woff similarity index 100% rename from htdocs/pdviz/static/admin/fonts/Roboto-Regular-webfont.woff rename to pdviz/static/admin/fonts/Roboto-Regular-webfont.woff diff --git a/htdocs/pdviz/static/admin/img/LICENSE b/pdviz/static/admin/img/LICENSE similarity index 100% rename from htdocs/pdviz/static/admin/img/LICENSE rename to pdviz/static/admin/img/LICENSE diff --git a/htdocs/pdviz/static/admin/img/README.txt b/pdviz/static/admin/img/README.txt similarity index 100% rename from htdocs/pdviz/static/admin/img/README.txt rename to pdviz/static/admin/img/README.txt diff --git a/htdocs/pdviz/static/admin/img/calendar-icons.svg b/pdviz/static/admin/img/calendar-icons.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/calendar-icons.svg rename to pdviz/static/admin/img/calendar-icons.svg diff --git a/htdocs/pdviz/static/admin/img/gis/move_vertex_off.svg b/pdviz/static/admin/img/gis/move_vertex_off.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/gis/move_vertex_off.svg rename to pdviz/static/admin/img/gis/move_vertex_off.svg diff --git a/htdocs/pdviz/static/admin/img/gis/move_vertex_on.svg b/pdviz/static/admin/img/gis/move_vertex_on.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/gis/move_vertex_on.svg rename to pdviz/static/admin/img/gis/move_vertex_on.svg diff --git a/htdocs/pdviz/static/admin/img/icon-addlink.svg b/pdviz/static/admin/img/icon-addlink.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-addlink.svg rename to pdviz/static/admin/img/icon-addlink.svg diff --git a/htdocs/pdviz/static/admin/img/icon-alert.svg b/pdviz/static/admin/img/icon-alert.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-alert.svg rename to pdviz/static/admin/img/icon-alert.svg diff --git a/htdocs/pdviz/static/admin/img/icon-calendar.svg b/pdviz/static/admin/img/icon-calendar.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-calendar.svg rename to pdviz/static/admin/img/icon-calendar.svg diff --git a/htdocs/pdviz/static/admin/img/icon-changelink.svg b/pdviz/static/admin/img/icon-changelink.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-changelink.svg rename to pdviz/static/admin/img/icon-changelink.svg diff --git a/htdocs/pdviz/static/admin/img/icon-clock.svg b/pdviz/static/admin/img/icon-clock.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-clock.svg rename to pdviz/static/admin/img/icon-clock.svg diff --git a/htdocs/pdviz/static/admin/img/icon-deletelink.svg b/pdviz/static/admin/img/icon-deletelink.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-deletelink.svg rename to pdviz/static/admin/img/icon-deletelink.svg diff --git a/htdocs/pdviz/static/admin/img/icon-no.svg b/pdviz/static/admin/img/icon-no.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-no.svg rename to pdviz/static/admin/img/icon-no.svg diff --git a/htdocs/pdviz/static/admin/img/icon-unknown-alt.svg b/pdviz/static/admin/img/icon-unknown-alt.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-unknown-alt.svg rename to pdviz/static/admin/img/icon-unknown-alt.svg diff --git a/htdocs/pdviz/static/admin/img/icon-unknown.svg b/pdviz/static/admin/img/icon-unknown.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-unknown.svg rename to pdviz/static/admin/img/icon-unknown.svg diff --git a/htdocs/pdviz/static/admin/img/icon-yes.svg b/pdviz/static/admin/img/icon-yes.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/icon-yes.svg rename to pdviz/static/admin/img/icon-yes.svg diff --git a/htdocs/pdviz/static/admin/img/inline-delete.svg b/pdviz/static/admin/img/inline-delete.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/inline-delete.svg rename to pdviz/static/admin/img/inline-delete.svg diff --git a/htdocs/pdviz/static/admin/img/search.svg b/pdviz/static/admin/img/search.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/search.svg rename to pdviz/static/admin/img/search.svg diff --git a/htdocs/pdviz/static/admin/img/selector-icons.svg b/pdviz/static/admin/img/selector-icons.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/selector-icons.svg rename to pdviz/static/admin/img/selector-icons.svg diff --git a/htdocs/pdviz/static/admin/img/sorting-icons.svg b/pdviz/static/admin/img/sorting-icons.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/sorting-icons.svg rename to pdviz/static/admin/img/sorting-icons.svg diff --git a/htdocs/pdviz/static/admin/img/tooltag-add.svg b/pdviz/static/admin/img/tooltag-add.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/tooltag-add.svg rename to pdviz/static/admin/img/tooltag-add.svg diff --git a/htdocs/pdviz/static/admin/img/tooltag-arrowright.svg b/pdviz/static/admin/img/tooltag-arrowright.svg similarity index 100% rename from htdocs/pdviz/static/admin/img/tooltag-arrowright.svg rename to pdviz/static/admin/img/tooltag-arrowright.svg diff --git a/htdocs/pdviz/static/admin/js/SelectBox.js b/pdviz/static/admin/js/SelectBox.js similarity index 100% rename from htdocs/pdviz/static/admin/js/SelectBox.js rename to pdviz/static/admin/js/SelectBox.js diff --git a/htdocs/pdviz/static/admin/js/SelectFilter2.js b/pdviz/static/admin/js/SelectFilter2.js similarity index 100% rename from htdocs/pdviz/static/admin/js/SelectFilter2.js rename to pdviz/static/admin/js/SelectFilter2.js diff --git a/htdocs/pdviz/static/admin/js/actions.js b/pdviz/static/admin/js/actions.js similarity index 100% rename from htdocs/pdviz/static/admin/js/actions.js rename to pdviz/static/admin/js/actions.js diff --git a/htdocs/pdviz/static/admin/js/actions.min.js b/pdviz/static/admin/js/actions.min.js similarity index 100% rename from htdocs/pdviz/static/admin/js/actions.min.js rename to pdviz/static/admin/js/actions.min.js diff --git a/htdocs/pdviz/static/admin/js/admin/DateTimeShortcuts.js b/pdviz/static/admin/js/admin/DateTimeShortcuts.js similarity index 100% rename from htdocs/pdviz/static/admin/js/admin/DateTimeShortcuts.js rename to pdviz/static/admin/js/admin/DateTimeShortcuts.js diff --git a/htdocs/pdviz/static/admin/js/admin/RelatedObjectLookups.js b/pdviz/static/admin/js/admin/RelatedObjectLookups.js similarity index 100% rename from htdocs/pdviz/static/admin/js/admin/RelatedObjectLookups.js rename to pdviz/static/admin/js/admin/RelatedObjectLookups.js diff --git a/htdocs/pdviz/static/admin/js/calendar.js b/pdviz/static/admin/js/calendar.js similarity index 100% rename from htdocs/pdviz/static/admin/js/calendar.js rename to pdviz/static/admin/js/calendar.js diff --git a/htdocs/pdviz/static/admin/js/cancel.js b/pdviz/static/admin/js/cancel.js similarity index 100% rename from htdocs/pdviz/static/admin/js/cancel.js rename to pdviz/static/admin/js/cancel.js diff --git a/htdocs/pdviz/static/admin/js/change_form.js b/pdviz/static/admin/js/change_form.js similarity index 100% rename from htdocs/pdviz/static/admin/js/change_form.js rename to pdviz/static/admin/js/change_form.js diff --git a/htdocs/pdviz/static/admin/js/collapse.js b/pdviz/static/admin/js/collapse.js similarity index 100% rename from htdocs/pdviz/static/admin/js/collapse.js rename to pdviz/static/admin/js/collapse.js diff --git a/htdocs/pdviz/static/admin/js/collapse.min.js b/pdviz/static/admin/js/collapse.min.js similarity index 100% rename from htdocs/pdviz/static/admin/js/collapse.min.js rename to pdviz/static/admin/js/collapse.min.js diff --git a/htdocs/pdviz/static/admin/js/core.js b/pdviz/static/admin/js/core.js similarity index 100% rename from htdocs/pdviz/static/admin/js/core.js rename to pdviz/static/admin/js/core.js diff --git a/htdocs/pdviz/static/admin/js/inlines.js b/pdviz/static/admin/js/inlines.js similarity index 100% rename from htdocs/pdviz/static/admin/js/inlines.js rename to pdviz/static/admin/js/inlines.js diff --git a/htdocs/pdviz/static/admin/js/inlines.min.js b/pdviz/static/admin/js/inlines.min.js similarity index 100% rename from htdocs/pdviz/static/admin/js/inlines.min.js rename to pdviz/static/admin/js/inlines.min.js diff --git a/htdocs/pdviz/static/admin/js/jquery.init.js b/pdviz/static/admin/js/jquery.init.js similarity index 100% rename from htdocs/pdviz/static/admin/js/jquery.init.js rename to pdviz/static/admin/js/jquery.init.js diff --git a/htdocs/pdviz/static/admin/js/popup_response.js b/pdviz/static/admin/js/popup_response.js similarity index 100% rename from htdocs/pdviz/static/admin/js/popup_response.js rename to pdviz/static/admin/js/popup_response.js diff --git a/htdocs/pdviz/static/admin/js/prepopulate.js b/pdviz/static/admin/js/prepopulate.js similarity index 100% rename from htdocs/pdviz/static/admin/js/prepopulate.js rename to pdviz/static/admin/js/prepopulate.js diff --git a/htdocs/pdviz/static/admin/js/prepopulate.min.js b/pdviz/static/admin/js/prepopulate.min.js similarity index 100% rename from htdocs/pdviz/static/admin/js/prepopulate.min.js rename to pdviz/static/admin/js/prepopulate.min.js diff --git a/htdocs/pdviz/static/admin/js/prepopulate_init.js b/pdviz/static/admin/js/prepopulate_init.js similarity index 100% rename from htdocs/pdviz/static/admin/js/prepopulate_init.js rename to pdviz/static/admin/js/prepopulate_init.js diff --git a/htdocs/pdviz/static/admin/js/timeparse.js b/pdviz/static/admin/js/timeparse.js similarity index 100% rename from htdocs/pdviz/static/admin/js/timeparse.js rename to pdviz/static/admin/js/timeparse.js diff --git a/htdocs/pdviz/static/admin/js/urlify.js b/pdviz/static/admin/js/urlify.js similarity index 100% rename from htdocs/pdviz/static/admin/js/urlify.js rename to pdviz/static/admin/js/urlify.js diff --git a/htdocs/pdviz/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt b/pdviz/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt similarity index 100% rename from htdocs/pdviz/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt rename to pdviz/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt diff --git a/htdocs/pdviz/static/admin/js/vendor/jquery/jquery.js b/pdviz/static/admin/js/vendor/jquery/jquery.js similarity index 100% rename from htdocs/pdviz/static/admin/js/vendor/jquery/jquery.js rename to pdviz/static/admin/js/vendor/jquery/jquery.js diff --git a/htdocs/pdviz/static/admin/js/vendor/jquery/jquery.min.js b/pdviz/static/admin/js/vendor/jquery/jquery.min.js similarity index 100% rename from htdocs/pdviz/static/admin/js/vendor/jquery/jquery.min.js rename to pdviz/static/admin/js/vendor/jquery/jquery.min.js diff --git a/htdocs/pdviz/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt b/pdviz/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt similarity index 100% rename from htdocs/pdviz/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt rename to pdviz/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt diff --git a/htdocs/pdviz/static/admin/js/vendor/xregexp/xregexp.js b/pdviz/static/admin/js/vendor/xregexp/xregexp.js similarity index 100% rename from htdocs/pdviz/static/admin/js/vendor/xregexp/xregexp.js rename to pdviz/static/admin/js/vendor/xregexp/xregexp.js diff --git a/htdocs/pdviz/static/admin/js/vendor/xregexp/xregexp.min.js b/pdviz/static/admin/js/vendor/xregexp/xregexp.min.js similarity index 100% rename from htdocs/pdviz/static/admin/js/vendor/xregexp/xregexp.min.js rename to pdviz/static/admin/js/vendor/xregexp/xregexp.min.js diff --git a/htdocs/pdviz/static/css/app.css b/pdviz/static/css/app.css similarity index 100% rename from htdocs/pdviz/static/css/app.css rename to pdviz/static/css/app.css diff --git a/htdocs/pdviz/static/css/bootstrap.min.css b/pdviz/static/css/bootstrap.min.css similarity index 100% rename from htdocs/pdviz/static/css/bootstrap.min.css rename to pdviz/static/css/bootstrap.min.css diff --git a/htdocs/pdviz/static/css/datatables.min.css b/pdviz/static/css/datatables.min.css similarity index 100% rename from htdocs/pdviz/static/css/datatables.min.css rename to pdviz/static/css/datatables.min.css diff --git a/htdocs/pdviz/static/css/highcharts.css_bak b/pdviz/static/css/highcharts.css_bak similarity index 100% rename from htdocs/pdviz/static/css/highcharts.css_bak rename to pdviz/static/css/highcharts.css_bak diff --git a/htdocs/pdviz/static/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/pdviz/static/css/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_flat_0_aaaaaa_40x100.png rename to pdviz/static/css/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_flat_55_fbec88_40x100.png b/pdviz/static/css/images/ui-bg_flat_55_fbec88_40x100.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_flat_55_fbec88_40x100.png rename to pdviz/static/css/images/ui-bg_flat_55_fbec88_40x100.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_glass_75_d0e5f5_1x400.png b/pdviz/static/css/images/ui-bg_glass_75_d0e5f5_1x400.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_glass_75_d0e5f5_1x400.png rename to pdviz/static/css/images/ui-bg_glass_75_d0e5f5_1x400.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_glass_85_dfeffc_1x400.png b/pdviz/static/css/images/ui-bg_glass_85_dfeffc_1x400.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_glass_85_dfeffc_1x400.png rename to pdviz/static/css/images/ui-bg_glass_85_dfeffc_1x400.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_glass_95_fef1ec_1x400.png b/pdviz/static/css/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_glass_95_fef1ec_1x400.png rename to pdviz/static/css/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/pdviz/static/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png rename to pdviz/static/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/pdviz/static/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png rename to pdviz/static/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png diff --git a/htdocs/pdviz/static/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/pdviz/static/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png rename to pdviz/static/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_217bc0_256x240.png b/pdviz/static/css/images/ui-icons_217bc0_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_217bc0_256x240.png rename to pdviz/static/css/images/ui-icons_217bc0_256x240.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_2e83ff_256x240.png b/pdviz/static/css/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_2e83ff_256x240.png rename to pdviz/static/css/images/ui-icons_2e83ff_256x240.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_469bdd_256x240.png b/pdviz/static/css/images/ui-icons_469bdd_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_469bdd_256x240.png rename to pdviz/static/css/images/ui-icons_469bdd_256x240.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_6da8d5_256x240.png b/pdviz/static/css/images/ui-icons_6da8d5_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_6da8d5_256x240.png rename to pdviz/static/css/images/ui-icons_6da8d5_256x240.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_cd0a0a_256x240.png b/pdviz/static/css/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_cd0a0a_256x240.png rename to pdviz/static/css/images/ui-icons_cd0a0a_256x240.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_d8e7f3_256x240.png b/pdviz/static/css/images/ui-icons_d8e7f3_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_d8e7f3_256x240.png rename to pdviz/static/css/images/ui-icons_d8e7f3_256x240.png diff --git a/htdocs/pdviz/static/css/images/ui-icons_f9bd01_256x240.png b/pdviz/static/css/images/ui-icons_f9bd01_256x240.png similarity index 100% rename from htdocs/pdviz/static/css/images/ui-icons_f9bd01_256x240.png rename to pdviz/static/css/images/ui-icons_f9bd01_256x240.png diff --git a/htdocs/pdviz/static/css/jquery-ui.min.css b/pdviz/static/css/jquery-ui.min.css similarity index 100% rename from htdocs/pdviz/static/css/jquery-ui.min.css rename to pdviz/static/css/jquery-ui.min.css diff --git a/htdocs/pdviz/static/css/select2-spinner.gif b/pdviz/static/css/select2-spinner.gif similarity index 100% rename from htdocs/pdviz/static/css/select2-spinner.gif rename to pdviz/static/css/select2-spinner.gif diff --git a/htdocs/pdviz/static/css/select2.css b/pdviz/static/css/select2.css similarity index 100% rename from htdocs/pdviz/static/css/select2.css rename to pdviz/static/css/select2.css diff --git a/htdocs/pdviz/static/css/select2.png b/pdviz/static/css/select2.png similarity index 100% rename from htdocs/pdviz/static/css/select2.png rename to pdviz/static/css/select2.png diff --git a/htdocs/pdviz/static/css/select2x2.png b/pdviz/static/css/select2x2.png similarity index 100% rename from htdocs/pdviz/static/css/select2x2.png rename to pdviz/static/css/select2x2.png diff --git a/htdocs/pdviz/static/feedback/css/app_feedback.css b/pdviz/static/feedback/css/app_feedback.css similarity index 100% rename from htdocs/pdviz/static/feedback/css/app_feedback.css rename to pdviz/static/feedback/css/app_feedback.css diff --git a/htdocs/pdviz/static/fonts/glyphicons-halflings-regular.eot b/pdviz/static/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from htdocs/pdviz/static/fonts/glyphicons-halflings-regular.eot rename to pdviz/static/fonts/glyphicons-halflings-regular.eot diff --git a/htdocs/pdviz/static/fonts/glyphicons-halflings-regular.svg b/pdviz/static/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from htdocs/pdviz/static/fonts/glyphicons-halflings-regular.svg rename to pdviz/static/fonts/glyphicons-halflings-regular.svg diff --git a/htdocs/pdviz/static/fonts/glyphicons-halflings-regular.ttf b/pdviz/static/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from htdocs/pdviz/static/fonts/glyphicons-halflings-regular.ttf rename to pdviz/static/fonts/glyphicons-halflings-regular.ttf diff --git a/htdocs/pdviz/static/fonts/glyphicons-halflings-regular.woff b/pdviz/static/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from htdocs/pdviz/static/fonts/glyphicons-halflings-regular.woff rename to pdviz/static/fonts/glyphicons-halflings-regular.woff diff --git a/htdocs/pdviz/static/fonts/glyphicons-halflings-regular.woff2 b/pdviz/static/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from htdocs/pdviz/static/fonts/glyphicons-halflings-regular.woff2 rename to pdviz/static/fonts/glyphicons-halflings-regular.woff2 diff --git a/htdocs/pdviz/static/images/ajax-loader.gif b/pdviz/static/images/ajax-loader.gif similarity index 100% rename from htdocs/pdviz/static/images/ajax-loader.gif rename to pdviz/static/images/ajax-loader.gif diff --git a/htdocs/pdviz/static/images/favicon.png b/pdviz/static/images/favicon.png similarity index 100% rename from htdocs/pdviz/static/images/favicon.png rename to pdviz/static/images/favicon.png diff --git a/htdocs/pdviz/static/images/mclogo.png b/pdviz/static/images/mclogo.png similarity index 100% rename from htdocs/pdviz/static/images/mclogo.png rename to pdviz/static/images/mclogo.png diff --git a/htdocs/pdviz/static/js/app.js b/pdviz/static/js/app.js similarity index 100% rename from htdocs/pdviz/static/js/app.js rename to pdviz/static/js/app.js diff --git a/htdocs/pdviz/static/js/bootstrap.min.js b/pdviz/static/js/bootstrap.min.js similarity index 100% rename from htdocs/pdviz/static/js/bootstrap.min.js rename to pdviz/static/js/bootstrap.min.js diff --git a/htdocs/pdviz/static/js/datatables.min.js b/pdviz/static/js/datatables.min.js similarity index 100% rename from htdocs/pdviz/static/js/datatables.min.js rename to pdviz/static/js/datatables.min.js diff --git a/htdocs/pdviz/static/js/drilldown.js b/pdviz/static/js/drilldown.js similarity index 100% rename from htdocs/pdviz/static/js/drilldown.js rename to pdviz/static/js/drilldown.js diff --git a/htdocs/pdviz/static/js/exporting.js b/pdviz/static/js/exporting.js similarity index 100% rename from htdocs/pdviz/static/js/exporting.js rename to pdviz/static/js/exporting.js diff --git a/htdocs/pdviz/static/js/grouped-categories.js b/pdviz/static/js/grouped-categories.js similarity index 100% rename from htdocs/pdviz/static/js/grouped-categories.js rename to pdviz/static/js/grouped-categories.js diff --git a/htdocs/pdviz/static/js/highcharts.js b/pdviz/static/js/highcharts.js similarity index 100% rename from htdocs/pdviz/static/js/highcharts.js rename to pdviz/static/js/highcharts.js diff --git a/htdocs/pdviz/static/js/jquery-3.2.1.min.js b/pdviz/static/js/jquery-3.2.1.min.js similarity index 100% rename from htdocs/pdviz/static/js/jquery-3.2.1.min.js rename to pdviz/static/js/jquery-3.2.1.min.js diff --git a/htdocs/pdviz/static/js/jquery-ui.min.js b/pdviz/static/js/jquery-ui.min.js similarity index 100% rename from htdocs/pdviz/static/js/jquery-ui.min.js rename to pdviz/static/js/jquery-ui.min.js diff --git a/htdocs/pdviz/static/js/select2.min.js b/pdviz/static/js/select2.min.js similarity index 100% rename from htdocs/pdviz/static/js/select2.min.js rename to pdviz/static/js/select2.min.js diff --git a/htdocs/pdviz/static/js/underscore-min.js b/pdviz/static/js/underscore-min.js similarity index 100% rename from htdocs/pdviz/static/js/underscore-min.js rename to pdviz/static/js/underscore-min.js diff --git a/htdocs/pdviz/static/rest_framework/css/bootstrap-tweaks.css b/pdviz/static/rest_framework/css/bootstrap-tweaks.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/css/bootstrap-tweaks.css rename to pdviz/static/rest_framework/css/bootstrap-tweaks.css diff --git a/htdocs/pdviz/static/rest_framework/css/bootstrap.min.css b/pdviz/static/rest_framework/css/bootstrap.min.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/css/bootstrap.min.css rename to pdviz/static/rest_framework/css/bootstrap.min.css diff --git a/htdocs/pdviz/static/rest_framework/css/default.css b/pdviz/static/rest_framework/css/default.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/css/default.css rename to pdviz/static/rest_framework/css/default.css diff --git a/htdocs/pdviz/static/rest_framework/css/prettify.css b/pdviz/static/rest_framework/css/prettify.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/css/prettify.css rename to pdviz/static/rest_framework/css/prettify.css diff --git a/htdocs/pdviz/static/rest_framework/docs/css/base.css b/pdviz/static/rest_framework/docs/css/base.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/css/base.css rename to pdviz/static/rest_framework/docs/css/base.css diff --git a/htdocs/pdviz/static/rest_framework/docs/css/bootstrap-theme.min.css b/pdviz/static/rest_framework/docs/css/bootstrap-theme.min.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/css/bootstrap-theme.min.css rename to pdviz/static/rest_framework/docs/css/bootstrap-theme.min.css diff --git a/htdocs/pdviz/static/rest_framework/docs/css/bootstrap.min.css b/pdviz/static/rest_framework/docs/css/bootstrap.min.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/css/bootstrap.min.css rename to pdviz/static/rest_framework/docs/css/bootstrap.min.css diff --git a/htdocs/pdviz/static/rest_framework/docs/css/font-awesome-4.0.3.css b/pdviz/static/rest_framework/docs/css/font-awesome-4.0.3.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/css/font-awesome-4.0.3.css rename to pdviz/static/rest_framework/docs/css/font-awesome-4.0.3.css diff --git a/htdocs/pdviz/static/rest_framework/docs/css/highlight.css b/pdviz/static/rest_framework/docs/css/highlight.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/css/highlight.css rename to pdviz/static/rest_framework/docs/css/highlight.css diff --git a/htdocs/pdviz/static/rest_framework/docs/css/jquery.json-view.min.css b/pdviz/static/rest_framework/docs/css/jquery.json-view.min.css similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/css/jquery.json-view.min.css rename to pdviz/static/rest_framework/docs/css/jquery.json-view.min.css diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.eot b/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.eot similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.eot rename to pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.eot diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.svg b/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.svg similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.svg rename to pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.svg diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.ttf b/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.ttf similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.ttf rename to pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.ttf diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.woff b/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.woff similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.woff rename to pdviz/static/rest_framework/docs/fonts/fontawesome-webfont.woff diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.eot b/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.eot rename to pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.eot diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.svg b/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.svg rename to pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.svg diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.ttf b/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.ttf rename to pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.ttf diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff b/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff rename to pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff diff --git a/htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff2 b/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff2 rename to pdviz/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff2 diff --git a/htdocs/pdviz/static/rest_framework/docs/img/favicon.ico b/pdviz/static/rest_framework/docs/img/favicon.ico similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/img/favicon.ico rename to pdviz/static/rest_framework/docs/img/favicon.ico diff --git a/htdocs/pdviz/static/rest_framework/docs/img/grid.png b/pdviz/static/rest_framework/docs/img/grid.png similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/img/grid.png rename to pdviz/static/rest_framework/docs/img/grid.png diff --git a/htdocs/pdviz/static/rest_framework/docs/js/api.js b/pdviz/static/rest_framework/docs/js/api.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/js/api.js rename to pdviz/static/rest_framework/docs/js/api.js diff --git a/htdocs/pdviz/static/rest_framework/docs/js/bootstrap.min.js b/pdviz/static/rest_framework/docs/js/bootstrap.min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/js/bootstrap.min.js rename to pdviz/static/rest_framework/docs/js/bootstrap.min.js diff --git a/htdocs/pdviz/static/rest_framework/docs/js/highlight.pack.js b/pdviz/static/rest_framework/docs/js/highlight.pack.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/js/highlight.pack.js rename to pdviz/static/rest_framework/docs/js/highlight.pack.js diff --git a/htdocs/pdviz/static/rest_framework/docs/js/jquery-1.10.2.min.js b/pdviz/static/rest_framework/docs/js/jquery-1.10.2.min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/js/jquery-1.10.2.min.js rename to pdviz/static/rest_framework/docs/js/jquery-1.10.2.min.js diff --git a/htdocs/pdviz/static/rest_framework/docs/js/jquery.json-view.min.js b/pdviz/static/rest_framework/docs/js/jquery.json-view.min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/docs/js/jquery.json-view.min.js rename to pdviz/static/rest_framework/docs/js/jquery.json-view.min.js diff --git a/htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.eot b/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.eot rename to pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.eot diff --git a/htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.svg b/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.svg rename to pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.svg diff --git a/htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.ttf b/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.ttf rename to pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.ttf diff --git a/htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff b/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff rename to pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff diff --git a/htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 b/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from htdocs/pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 rename to pdviz/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 diff --git a/htdocs/pdviz/static/rest_framework/img/glyphicons-halflings-white.png b/pdviz/static/rest_framework/img/glyphicons-halflings-white.png similarity index 100% rename from htdocs/pdviz/static/rest_framework/img/glyphicons-halflings-white.png rename to pdviz/static/rest_framework/img/glyphicons-halflings-white.png diff --git a/htdocs/pdviz/static/rest_framework/img/glyphicons-halflings.png b/pdviz/static/rest_framework/img/glyphicons-halflings.png similarity index 100% rename from htdocs/pdviz/static/rest_framework/img/glyphicons-halflings.png rename to pdviz/static/rest_framework/img/glyphicons-halflings.png diff --git a/htdocs/pdviz/static/rest_framework/img/grid.png b/pdviz/static/rest_framework/img/grid.png similarity index 100% rename from htdocs/pdviz/static/rest_framework/img/grid.png rename to pdviz/static/rest_framework/img/grid.png diff --git a/htdocs/pdviz/static/rest_framework/js/ajax-form.js b/pdviz/static/rest_framework/js/ajax-form.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/ajax-form.js rename to pdviz/static/rest_framework/js/ajax-form.js diff --git a/htdocs/pdviz/static/rest_framework/js/bootstrap.min.js b/pdviz/static/rest_framework/js/bootstrap.min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/bootstrap.min.js rename to pdviz/static/rest_framework/js/bootstrap.min.js diff --git a/htdocs/pdviz/static/rest_framework/js/coreapi-0.1.1.js b/pdviz/static/rest_framework/js/coreapi-0.1.1.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/coreapi-0.1.1.js rename to pdviz/static/rest_framework/js/coreapi-0.1.1.js diff --git a/htdocs/pdviz/static/rest_framework/js/csrf.js b/pdviz/static/rest_framework/js/csrf.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/csrf.js rename to pdviz/static/rest_framework/js/csrf.js diff --git a/htdocs/pdviz/static/rest_framework/js/default.js b/pdviz/static/rest_framework/js/default.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/default.js rename to pdviz/static/rest_framework/js/default.js diff --git a/htdocs/pdviz/static/rest_framework/js/jquery-1.12.4.min.js b/pdviz/static/rest_framework/js/jquery-1.12.4.min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/jquery-1.12.4.min.js rename to pdviz/static/rest_framework/js/jquery-1.12.4.min.js diff --git a/htdocs/pdviz/static/rest_framework/js/prettify-min.js b/pdviz/static/rest_framework/js/prettify-min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework/js/prettify-min.js rename to pdviz/static/rest_framework/js/prettify-min.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/css/print.css b/pdviz/static/rest_framework_swagger/css/print.css similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/css/print.css rename to pdviz/static/rest_framework_swagger/css/print.css diff --git a/htdocs/pdviz/static/rest_framework_swagger/css/reset.css b/pdviz/static/rest_framework_swagger/css/reset.css similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/css/reset.css rename to pdviz/static/rest_framework_swagger/css/reset.css diff --git a/htdocs/pdviz/static/rest_framework_swagger/css/screen.css b/pdviz/static/rest_framework_swagger/css/screen.css similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/css/screen.css rename to pdviz/static/rest_framework_swagger/css/screen.css diff --git a/htdocs/pdviz/static/rest_framework_swagger/css/typography.css b/pdviz/static/rest_framework_swagger/css/typography.css similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/css/typography.css rename to pdviz/static/rest_framework_swagger/css/typography.css diff --git a/htdocs/pdviz/static/rest_framework_swagger/fonts/DroidSans-Bold.ttf b/pdviz/static/rest_framework_swagger/fonts/DroidSans-Bold.ttf similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/fonts/DroidSans-Bold.ttf rename to pdviz/static/rest_framework_swagger/fonts/DroidSans-Bold.ttf diff --git a/htdocs/pdviz/static/rest_framework_swagger/fonts/DroidSans.ttf b/pdviz/static/rest_framework_swagger/fonts/DroidSans.ttf similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/fonts/DroidSans.ttf rename to pdviz/static/rest_framework_swagger/fonts/DroidSans.ttf diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/collapse.gif b/pdviz/static/rest_framework_swagger/images/collapse.gif similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/collapse.gif rename to pdviz/static/rest_framework_swagger/images/collapse.gif diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/expand.gif b/pdviz/static/rest_framework_swagger/images/expand.gif similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/expand.gif rename to pdviz/static/rest_framework_swagger/images/expand.gif diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/explorer_icons.png b/pdviz/static/rest_framework_swagger/images/explorer_icons.png similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/explorer_icons.png rename to pdviz/static/rest_framework_swagger/images/explorer_icons.png diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/favicon-16x16.png b/pdviz/static/rest_framework_swagger/images/favicon-16x16.png similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/favicon-16x16.png rename to pdviz/static/rest_framework_swagger/images/favicon-16x16.png diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/favicon-32x32.png b/pdviz/static/rest_framework_swagger/images/favicon-32x32.png similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/favicon-32x32.png rename to pdviz/static/rest_framework_swagger/images/favicon-32x32.png diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/favicon.ico b/pdviz/static/rest_framework_swagger/images/favicon.ico similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/favicon.ico rename to pdviz/static/rest_framework_swagger/images/favicon.ico diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/logo_small.png b/pdviz/static/rest_framework_swagger/images/logo_small.png similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/logo_small.png rename to pdviz/static/rest_framework_swagger/images/logo_small.png diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/pet_store_api.png b/pdviz/static/rest_framework_swagger/images/pet_store_api.png similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/pet_store_api.png rename to pdviz/static/rest_framework_swagger/images/pet_store_api.png diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/throbber.gif b/pdviz/static/rest_framework_swagger/images/throbber.gif similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/throbber.gif rename to pdviz/static/rest_framework_swagger/images/throbber.gif diff --git a/htdocs/pdviz/static/rest_framework_swagger/images/wordnik_api.png b/pdviz/static/rest_framework_swagger/images/wordnik_api.png similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/images/wordnik_api.png rename to pdviz/static/rest_framework_swagger/images/wordnik_api.png diff --git a/htdocs/pdviz/static/rest_framework_swagger/init.js b/pdviz/static/rest_framework_swagger/init.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/init.js rename to pdviz/static/rest_framework_swagger/init.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/en.js b/pdviz/static/rest_framework_swagger/lang/en.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/en.js rename to pdviz/static/rest_framework_swagger/lang/en.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/es.js b/pdviz/static/rest_framework_swagger/lang/es.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/es.js rename to pdviz/static/rest_framework_swagger/lang/es.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/fr.js b/pdviz/static/rest_framework_swagger/lang/fr.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/fr.js rename to pdviz/static/rest_framework_swagger/lang/fr.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/geo.js b/pdviz/static/rest_framework_swagger/lang/geo.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/geo.js rename to pdviz/static/rest_framework_swagger/lang/geo.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/it.js b/pdviz/static/rest_framework_swagger/lang/it.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/it.js rename to pdviz/static/rest_framework_swagger/lang/it.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/ja.js b/pdviz/static/rest_framework_swagger/lang/ja.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/ja.js rename to pdviz/static/rest_framework_swagger/lang/ja.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/ko-kr.js b/pdviz/static/rest_framework_swagger/lang/ko-kr.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/ko-kr.js rename to pdviz/static/rest_framework_swagger/lang/ko-kr.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/pl.js b/pdviz/static/rest_framework_swagger/lang/pl.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/pl.js rename to pdviz/static/rest_framework_swagger/lang/pl.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/pt.js b/pdviz/static/rest_framework_swagger/lang/pt.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/pt.js rename to pdviz/static/rest_framework_swagger/lang/pt.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/ru.js b/pdviz/static/rest_framework_swagger/lang/ru.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/ru.js rename to pdviz/static/rest_framework_swagger/lang/ru.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/tr.js b/pdviz/static/rest_framework_swagger/lang/tr.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/tr.js rename to pdviz/static/rest_framework_swagger/lang/tr.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/translator.js b/pdviz/static/rest_framework_swagger/lang/translator.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/translator.js rename to pdviz/static/rest_framework_swagger/lang/translator.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/lang/zh-cn.js b/pdviz/static/rest_framework_swagger/lang/zh-cn.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/lang/zh-cn.js rename to pdviz/static/rest_framework_swagger/lang/zh-cn.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/o2c.html b/pdviz/static/rest_framework_swagger/o2c.html similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/o2c.html rename to pdviz/static/rest_framework_swagger/o2c.html diff --git a/htdocs/pdviz/static/rest_framework_swagger/swagger-ui.js b/pdviz/static/rest_framework_swagger/swagger-ui.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/swagger-ui.js rename to pdviz/static/rest_framework_swagger/swagger-ui.js diff --git a/htdocs/pdviz/static/rest_framework_swagger/swagger-ui.min.js b/pdviz/static/rest_framework_swagger/swagger-ui.min.js similarity index 100% rename from htdocs/pdviz/static/rest_framework_swagger/swagger-ui.min.js rename to pdviz/static/rest_framework_swagger/swagger-ui.min.js diff --git a/htdocs/pdviz/static/robots.txt b/pdviz/static/robots.txt similarity index 100% rename from htdocs/pdviz/static/robots.txt rename to pdviz/static/robots.txt diff --git a/pdviz/static/styles.css b/pdviz/static/styles.css new file mode 100644 index 0000000..efa0723 --- /dev/null +++ b/pdviz/static/styles.css @@ -0,0 +1,49 @@ +.page-title { + margin-top: 3em; +} + +.login { + margin-left: auto; + margin-right: auto; + max-width: 576px; + +} +.login .page-title { + margin-bottom: 3em; + } + +.login__option { + margin-bottom: 2em; + padding: 1em; +} + +.login__option.btn { + white-space: inherit; + +} +.login__help { + margin-top: 3em; +} + +.btn-lg { + font-size: 1.25rem; + line-height: 1.5; + border-radius: 4px; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-info { + color: #fff; + background-color: #00a49f; + border-color: #00a49f; +} + +.login .btn-neutral { + color: #212429; + background-color: #ebedf0; + border-color: #ebedf0; +} \ No newline at end of file diff --git a/htdocs/pdviz/templates/base.html b/pdviz/templates/pdviz/base.html similarity index 96% rename from htdocs/pdviz/templates/base.html rename to pdviz/templates/pdviz/base.html index 06d0746..b5987e3 100644 --- a/htdocs/pdviz/templates/base.html +++ b/pdviz/templates/pdviz/base.html @@ -140,14 +140,14 @@ Mercy Corps {% now "Y" %} - - Feedback - +{# #} +{# Feedback#} +{# #}
{% if GOOGLE_ANALYTICS_PROPERTY_ID %} - {% include "google_analytics.html" %} + {% include "pdviz/google_analytics.html" %} {% endif %} diff --git a/htdocs/pdviz/templates/google_analytics.html b/pdviz/templates/pdviz/google_analytics.html similarity index 100% rename from htdocs/pdviz/templates/google_analytics.html rename to pdviz/templates/pdviz/google_analytics.html diff --git a/htdocs/pdviz/templates/index.html b/pdviz/templates/pdviz/index.html similarity index 67% rename from htdocs/pdviz/templates/index.html rename to pdviz/templates/pdviz/index.html index 4fce775..40357b4 100644 --- a/htdocs/pdviz/templates/index.html +++ b/pdviz/templates/pdviz/index.html @@ -1,4 +1,4 @@ -{% extends 'base.html' %} +{% extends 'pdviz/base.html' %} {% load staticfiles %} {% block content %} @@ -10,8 +10,9 @@

About PDVIZ

The purpose of this tool is to enable RPDs and other proposal development decision-makers to plan better and more strategically around which proposal development opportunities to pursue.

-

- PDViz is an internally developed tool and further development of it will mostly depend on users feedback. To provide feedback, please click on the "Feedback" link at the bottom right corner of the page. -

+{# TODO: add info on how to get help#} +{#

#} +{# PDViz is an internally developed tool and further development of it will mostly depend on users feedback. To provide feedback, please click on the "Feedback" link at the bottom right corner of the page.#} +{#

#} {% endblock content %} diff --git a/pdviz/urls.py b/pdviz/urls.py new file mode 100644 index 0000000..c2436f3 --- /dev/null +++ b/pdviz/urls.py @@ -0,0 +1,44 @@ +from rest_framework import routers +from django.conf import settings +from django.urls import include, path, re_path +from django.conf.urls.static import static +from django.views.decorators.cache import never_cache, cache_page +from django.contrib import admin +from django.contrib.auth.views import LogoutView + +from .views import PDVIZLoginView, HomeView +from dataviz.api import * +from dataviz.views import GlobalDashboard, GlobalDashboardData + + +router = routers.DefaultRouter() +router.register('grants', GrantViewSet, base_name='grants') +router.register('grants_by_country', GrantsByCountryViewSet, base_name='grants_by_country') +router.register('donors', DonorViewSet, base_name='donors') +router.register('countries', CountryViewSet, base_name='countries') +router.register('donorcategories', DonorCategoryViewSet, base_name='donorcategories') +router.register('donordepartments', DonorDepartmentViewSet, base_name='donordepartments') +router.register('sector', SectorViewSet, base_name='sectors') +router.register('subsector', SubSectorViewSet, base_name='subsectors') +router.register('methodologies', MethodologyViewSet, base_name='methodologies') +router.register('themes', ThemeViewSet, base_name='themes') + + +urlpatterns = [ + path('admin/', admin.site.urls), + path('api/v1/', include(router.urls)), + path('accounts/login/', PDVIZLoginView.as_view(), name='login'), + path('accounts/logout/', LogoutView.as_view(), name='logout'), + path('', include('social_django.urls', namespace='social')), + # path('', include('django.contrib.auth.urls')), + re_path('^$', HomeView.as_view(), name='home'), + path('global_dashboard/', cache_page(60*60*12)(GlobalDashboard.as_view()), name='global_dashboard'), + path(r'global_dashboard_data/', cache_page(60*60*12)(GlobalDashboardData.as_view()), name='global_dashboard_data'), + #url(r'^dataviz/countries_by_region/(?P[-\w]+)/$', CountriesByRegion.as_view(), name='cbg'), + # TODO: add back feedback module? + # path(r'^feedback/', include(feedback.urls)), + +] + +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/htdocs/pdviz/utils.py b/pdviz/utils.py similarity index 100% rename from htdocs/pdviz/utils.py rename to pdviz/utils.py diff --git a/pdviz/views.py b/pdviz/views.py new file mode 100644 index 0000000..b908f62 --- /dev/null +++ b/pdviz/views.py @@ -0,0 +1,34 @@ +from urllib.parse import urlencode + +from django.http import HttpResponse +from django.views.generic.base import TemplateView +from django.contrib.auth.views import LoginView +from django.contrib.auth.mixins import LoginRequiredMixin +from django.urls import reverse + + +class HomeView(LoginRequiredMixin, TemplateView): + template_name = 'pdviz/index.html' + + +class PDVIZLoginView(LoginView): + def get(self, request, *args, **kwargs): + if request.is_ajax(): + # Some places of our code loads HTML directly into a modal via $.load() + # loading the login page (which uses base.html) blows up a lot of things + # so avoid this by sending back a simple string instead + response = HttpResponse('You are not logged in.') + # Header that jQuery AJAX can look for to see if a request was 302 redirected + # responseURL could also be used but is not supported in older browsers + response['Login-Screen'] = 'Login-Screen' + return response + + return super(PDVIZLoginView, self).get(request, *args, **kwargs) + + def get_context_data(self, *args, **kwargs): + context = super(PDVIZLoginView, self).get_context_data(*args, **kwargs) + context['okta_url'] = "{base}?{params}".format( + base=reverse('social:begin', kwargs={'backend': 'saml'}), + params=urlencode({'idp': 'okta'}) + ) + return context diff --git a/htdocs/pdviz/wsgi.py b/pdviz/wsgi.py similarity index 62% rename from htdocs/pdviz/wsgi.py rename to pdviz/wsgi.py index 4e8921f..0dc6641 100644 --- a/htdocs/pdviz/wsgi.py +++ b/pdviz/wsgi.py @@ -1,22 +1,14 @@ """ WSGI config for pdviz project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/ """ import os from os.path import abspath, dirname from sys import path +from django.core.wsgi import get_wsgi_application SITE_ROOT = dirname(dirname(abspath(__file__))) -#print(SITE_ROOT) path.append(SITE_ROOT) - -from django.core.wsgi import get_wsgi_application - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pdviz.settings.local") application = get_wsgi_application() diff --git a/requirements.in b/requirements.in new file mode 100644 index 0000000..010fe9a --- /dev/null +++ b/requirements.in @@ -0,0 +1,45 @@ +Django +pip-tools +mysqlclient +django-crispy-forms + +django-rest-swagger +djangorestframework +python-memcached +python3-saml +social-auth-app-django +social-auth-core[saml] +PyYAML + +# django-filter +# Jinja2 +# Markdown +# MarkupSafe +# MySQL-python + +# PyYAML +# certifi +# chardet +# coreapi +# coreschema +# django-braces + +# gdata +# google-api-python-client +# httplib2 +# idna +# itypes +# oauth2client +# openapi-codec +# pyasn1 +# pyasn1-modules +# python-ldap + +# pytz +# requests +# rsa +# selenium +# simplejson +# six +# uritemplate +# urllib3 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1987993 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,43 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile +# +certifi==2019.9.11 # via requests +chardet==3.0.4 # via requests +click==7.0 # via pip-tools +coreapi==2.3.3 # via django-rest-swagger, openapi-codec +coreschema==0.0.4 # via coreapi +defusedxml==0.6.0 # via python3-openid, python3-saml, social-auth-core +django-crispy-forms==1.7.2 +django-rest-swagger==2.2.0 +django==2.2.5 +djangorestframework==3.10.3 +idna==2.8 # via requests +isodate==0.6.0 # via python3-saml +itypes==1.1.0 # via coreapi +jinja2==2.10.1 # via coreschema +lxml==4.4.2 # via xmlsec +markupsafe==1.1.1 # via jinja2 +mysqlclient==1.4.4 +oauthlib==3.1.0 # via requests-oauthlib, social-auth-core +openapi-codec==1.3.2 # via django-rest-swagger +pip-tools==4.3.0 +pkgconfig==1.5.1 # via xmlsec +pyjwt==1.7.1 # via social-auth-core +python-memcached==1.59 +python3-openid==3.1.0 # via social-auth-core +python3-saml==1.9.0 +pytz==2019.2 # via django +pyyaml==5.2 +requests-oauthlib==1.3.0 # via social-auth-core +requests==2.22.0 # via coreapi, requests-oauthlib, social-auth-core +simplejson==3.16.0 # via django-rest-swagger +six==1.12.0 # via isodate, pip-tools, python-memcached, social-auth-app-django, social-auth-core +social-auth-app-django==3.1.0 +social-auth-core[saml]==3.2.0 +sqlparse==0.3.0 # via django +uritemplate==3.0.0 # via coreapi +urllib3==1.25.6 # via requests +xmlsec==1.3.3 # via python3-saml diff --git a/htdocs/pdviz/templates/404.html b/templates/404.html similarity index 100% rename from htdocs/pdviz/templates/404.html rename to templates/404.html diff --git a/htdocs/pdviz/templates/500.html b/templates/500.html similarity index 100% rename from htdocs/pdviz/templates/500.html rename to templates/500.html diff --git a/templates/registration/login.html b/templates/registration/login.html new file mode 100644 index 0000000..fe15535 --- /dev/null +++ b/templates/registration/login.html @@ -0,0 +1,76 @@ + +{% load i18n %} +{% load static %} + + + + + + + + + +
+ +
+ {% blocktrans %} +

Welcome to PDViz

+ {% endblocktrans %} +
+ + + + + +
+ +
+ +
+ + +