BCStudentSoftwareDevTeam / cas

0 stars 1 forks source link

[TOC]

Installation

Requirements

Creating Development Environment

  1. Fork the repository from BitBucket and rename to your project.

  2. If working on a local machine, then clone the repo from your terminal

git clone https://username@bitbucket.org/username/repositoryname.git
source setup.sh
python create_db.py
python app.py

NOTE: The application is running over HTTPS. Therefore, make sure to change the link from bash http://IP_ADDRESS:8080 to https://IP_ADDRESS:8080

NOTE: You may need to change the username and password located on lines 19 and 20 of app/secret_config.yaml to match your SQL login information.

You can now check your localhost to see if it deployed correctly.

  1. If working on a cloud9 account follow instructions below to create a new workspace.
    1. Input your project name and description
    2. Get the git URL of your forked reposistory from BitBucket
    3. You should get the SSH URL, it should look something like: git@bitbucket.org:username/repositoryname.git
    4. Now paste the git URL into "Clone from Git URL" field in cloud9.
      source setup.sh
      python create_db.py
      python app.py

      If you are succesful you will see something like:

      Starting application
      Running server at http://0.0.0.0:8080/

      Click the link in your terminal to check if it is deployed correctly.

Working with the flask template

File Hierarchy

- Project Name
   - App
      -static
      -templates
        -start.html
      - __init__.py
      - allImports.py
      - config.yaml
      - models.py
      - start.py # this an example of a python file that renders a page
   - Data
       - db.sqlite
   - Venv
   - app.py
   - create_db.py
   - setup.sh

Above you will find the file structure for the flask template. You will be mostly working with the app/ directory. Some important files and directories.

Example for creating a new view

If I wanted to create a new webpage then I would do the following.

{% block body %}

Header 1

Example Paragraph

{% endblock %}

* Import the python file you created inside the \_\_init\_\_.py file.
```Python
from app import example.py

Reading and Writing to the database

In order to read from a database you will need to make a query to get the data. You can find out more about queries at the peewee site one quick example of a query would be the following:

query = tableName.get( condition = something )

This will return a python object that will have the data as attributes. You can pass this object to the html file. You can access this data by typing query.Column.

NOTE: Needs more details on asking query to finish reading and writing to the database.

Documentation links

To run mysql migration scripts (mysql_migration.py and migrate_data.py)

  1. Create mysql database: mysql-ctl install
  2. Look for the below section in config.yaml and edit with your cloud9 username db_name: c9 host: localhost password: '' username: nelsonk
  3. Run python mysql_migration.py which will create the mysql tables
  4. Run python migrate_data.py to transfer data from db.sqlite to newly created mysql. Depending on which version of the Cas db.sqlite you have, you might need to run python update_schema.py first. Also make sure that the models.py file is directed towards the sqlite database file.

If it is directed towards sqlite, the code to create the database connection will look like this:

Create a database

from app.loadConfig import *
here = os.path.dirname(__file__)
cfg       = load_config(os.path.join(here, 'config.yaml'))
db    = os.path.join(here,'../',cfg['databases']['dev'])
# mainDB    = SqliteDatabase(cfg['databases']['dev'])
mainDB    = SqliteDatabase(db,
                          pragmas = ( ('busy_timeout',  100),
                                      ('journal_mode', 'WAL')
                                  ),
                          threadlocals = True
                          )
  1. Once you run the migrate_data script, if successful, all data from the db.sqlite should have migrated to the mysql database created at step 1.

  2. Now, to run the application with the newly created mysql table, make sure that models.py is directed towards mysql: If it is directed towards mysql, the code to create the database connection will look like this:

    Create a database

    from app.loadConfig import * dir_name = os.path.dirname(file) # Return the directory name of pathname file cfg = load_config(os.path.join(dir_name, 'config.yaml')) db_name = cfg['db']['db_name'] host = cfg['db']['host'] username = cfg['db']['username'] password = cfg['db']['password']

    mainDB = MySQLDatabase ( db_name, host = host, user = username, passwd = password)

**** I would highly suggest that you keep two models.py files one with sqlite and one with mysql so you could transition between the two if needs be.

  1. Delete all the db.sqlite files or rename them something other than db.sqlite
  2. Run python app.py and everything should work as usual

If when you run the application, you don't have access to the admin menu, simply edit Scott Heggen's isadmin field to 1 using the steps below.

With mysql, you will not be able to use DB browser to visualize the data like we used to with sqlite. You will have to run:

  1. mysql-ctl cli in the terminal
  2. use c9; *remember that c9 is the default name for any mysql database created on cloud9 ex. update user set isadmin=1 where username = 'heggens';
  3. then you can type any SQL commands you want to see any data you want