PyArk / conference-website

Website for the 2019 PyArk conference
4 stars 1 forks source link

Add first start logic for setting up static data and default conference #12

Open bheklilr opened 6 years ago

bheklilr commented 6 years ago

@adamclmns knows how to set up a django app so it has first start logic. This can be used to make setting up the server easier, including creating a default conference. Once this server is initially deployed we won't really need this, as it'll pull existing data from the database.

adamclmns commented 6 years ago
"""
Attempting to make my own management command to pre-populate 
things like the carousel, event_details, and navbar for easier testing and re-install 
"""
from django.core.management.base import BaseCommand
from webapp.models import Registry, NavItem, CarouselImage, Post
from django.contrib.auth.models import User
from weddingsite import settings
import os
import getpass
from django.core.management import call_command

# TO-DOCS: https://github.com/aljosa/django-tinymce
CAROUSEL_ROOT = os.path.join(settings.MEDIA_ROOT, 'carousel')
REGISTRY_ROOT = os.path.join(settings.MEDIA_ROOT, 'registry')

DUMMY_POST_MESSAGE = """
            <p>
            Bacon ipsum dolor amet tenderloin jerky strip steak alcatra hamburger 
            salami doner t-bone flank pancetta kielbasa ball tip. Corned beef tail 
            frankfurter kevin cow chuck. T-bone short ribs beef filet mignon porchetta 
            drumstick pig short loin, frankfurter strip steak chuck fatback jowl. 
            Ribeye meatloaf ground round pancetta brisket. Tongue meatball salami swine 
            short loin filet mignon hamburger. Fatback sausage pancetta ground round 
            t-bone tail ham drumstick swine tenderloin picanha spare ribs. Pork belly 
            hamburger shank alcatra venison salami short ribs turkey capicola brisket.
            </p>
            <table>
            <tr>
                <td>TEST</td><td>TEST2</td><td>test3</td>
            </tr>
            <tr>
                <td>Thing</td><td>Thing2</td><td>Thing3</td>
            </td>
            </table><p>
            Short loin pastrami pork prosciutto, pig turkey tail. Shoulder pork belly
            tail alcatra, shank rump jerky short ribs salami ground round beef ribs frankfurter. 
            Bacon t-bone pancetta, ball tip meatloaf jowl doner salami biltong sirloin swine 
            burgdoggen fatback ground round. Pastrami pork loin beef fatback turkey tail 
            turducken spare ribs. Short ribs pancetta prosciutto, cupim cow capicola bacon turkey 
            boudin frankfurter shoulder beef ribs t-bone salami andouille. Venison strip steak 
            kielbasa, porchetta burgdoggen picanha pastrami jowl chuck biltong rump. Ham beef 
            chicken, pork capicola short loin shoulder.
            </p><p>
            Sausage tongue porchetta jowl pork loin hamburger. Fatback flank brisket, hamburger 
            meatloaf tenderloin sirloin tail beef porchetta drumstick pork chop meatball filet 
            mignon chicken. Ribeye alcatra picanha porchetta, t-bone kielbasa andouille. Rump
            sausage ham swine. Kevin beef ribs frankfurter spare ribs. Shankle jerky boudin 
            sausage meatball short ribs venison, tri-tip turducken. Brisket tenderloin venison 
            flank.
            </p>
            """

class Command(BaseCommand):
    args = '<param arg switch ...>'
    help = 'Help us Obi Wan, you\'re our only hope. '

    def _create_Nav(self):
        print("Create default Nav items")

        nav1 = NavItem(label="Wedding Registries",
                       uri="/registries", active=False, sort_priority=1)
        nav1.save()

        nav2 = NavItem(label="Event Details", uri="/event_details",
                       active=False, sort_priority=2)
        nav2.save()

        nav3 = NavItem(label="Admin", uri="/admin",
                       active=False, sort_priority=3)
        nav3.save()
        print("Success!")

    def _create_Post(self):
        print("Create Placeholder Posts")
        post1 = Post(headline="Announcement for an Event!",
                     message_body=DUMMY_POST_MESSAGE)
        post1.save()

        post2 = Post(headline="Another Update, Posted later",
                     message_body=DUMMY_POST_MESSAGE)
        post2.save()
        print("Success!")

    # Re-Create IMG entries based on what's already present in the /media/
    # folder.
    def _recreate_carousel_images(self):

        list_of_files = []
        print("Creating carousels")
        try:
            list_of_files = os.listdir(CAROUSEL_ROOT)
        except FileNotFoundError:
            print("No images found, or no media folder created yet.")
            print(
                "Please upload images via the admin page after creating a new superuser. ")
        if len(list_of_files) > 0:
            for filename in list_of_files:
                if filename.endswith('.jpg'):
                    image = CarouselImage(img_file='carousel/'+filename, active=True)
                    image.save()
            print("Success!")
        else:
            print("No Carousel Images Set")

    def _create_registry(self):

        print("Creating registries")
        reg1 = Registry(active=True, location="Amazon.com",
                        url="https://amazon.com")
        reg1.save()
        reg2 = Registry(active=True, location="Target",
                        url="https://target.com")
        reg2.save()
        print("Success")

    def _create_user_interactive(self):
        print('...calling createsuperuser')
        call_command('createsuperuser')

    def _handle_migrations(self):
        print('...calling flush')
        call_command('flush')
        print('...calling makemigrations')
        call_command('makemigrations')
        print('...calling migrate')
        call_command('migrate')
        print('Success!')

    def _collect_static_resources(self):
        print("collecting static resources for deployment")
        call_command('collectstatic')
        print('Success')

    def _start_application(self):
        print('Starting Server')
        call_command('runserver')

    def handle(self, *args, **options):
        # Clear the database, and re-apply schema
        self._handle_migrations()
        # Pull in all the static resources
        self._collect_static_resources()
        # Populate the database
        self._create_Nav()
        self._create_Post()
        self._recreate_carousel_images()
        self._create_registry()
        # Create Super user
        self._create_user_interactive()
        print("The application is starting for testing...")
        self._start_application()

https://bitbucket.org/adamclmns/adamandmelissatietheknot/src/master/weddingsite/webapp/management/commands/install_webapp.py

Code was taken from my wedding site project on BitBucket. I can provide permissions to those who need it to emulate this code.