################################################# # IMPORTANT: DO NOT PIP FREEZE REQUIREMENTS.TXT!! """"""""""""""""""""""""""""""""""""""""""""""""" # ***IMPT Deployment Notes:*** # AWS has specific packages that are different to windows, so DON'T freeze requirements! # A backup copy as of 28Jun23 has been taken # This version has been tested and deployed for Elastic Beanstalk/CodePipeline # Python 3.7 running on 64bit Amazon Linux <-- This does NOT work on Amazon Linux 2023 due to pg_config incompatibility (amazon-linux-extras no longer exists on Amazon Linux 2023). # Note: Successfully deployed on the staging env with all ports open - This needs to be closed for security purposes! >> cd /boostly >> venv\Scripts\activate # Install the requirements pip install -r requirements.txt >> in TLD # One time setup to allow for easy running of Flask app >> set FLASK_APP=application.py # Test to see if it works >> flask run # To run app, in (venv) python boostly.py flask shell from boostly import app # FOR EB DEPLOYMENTS Make sure that the following are NOT in the requirements.txt file!! pypiwin32==223 pywin32==305 Make sure that main application is renamed to application.py and the flask app is also application and not another name. Refactor using Pycharm!! Make sure that .idea and __pycache__ files are deleted before upload user_1 = User(userFirstName='Chris', userLastName='DaTester', userEmail='chris.chonghuihui@gmail.com', userPassword='superDev!') #################################### # Tips & Tricks #---------------------------------- # To get out of venv >> venv\Scripts\deactivate ## Basic sqlite db connectivity # In TLD: > python >> from boostly import db >> db.create_all() ## To add a user, after <<flask shell>> and <<create_all()>>, create a user using e.g. user_1 = User(userEmail='new@test.com', userPassword="password!") db.session.add(user_1) db.session.commit() ## commits it to the DB ## Query users using: User.query.all() user = User.query.filter_by(userEmail="new@test.com".first() user.id ## Adding a task (tied to user defined above) task_1 = Task(taskTitle="Connect to DB", taskDescription="help!!!", userID=user.id, taskDue="02/03/23") db.session.add(task_1) db.session.commit() ## To clear db of all entries, use db.drop_all() from boostly.models import AvailTimes, Client, ClientCompany, ClientPref, Company, Event, PrefTimes, TempWaitAlert, User # Some adds from boostly import db db.create_all() from boostly.models import AvailTimes, Client, ClientCompany, ClientPref, Company, Event, PrefTimes, TempWaitAlert, User coy1 = Company(companyName="Lena Massage") db.session.add(coy1) db.session.commit() user1 = User(userFirstName="Testy", userLastName="Tester", userEmail="test@test.com", userPassword="$2b$12$6Lxi6jt8RtxNlggq9ugHlusxuDmbydw084Gl5IfQfcSVjERO6vtLu", companyid=1) db.session.add(user1) db.session.commit() staff1 = Staff(firstName="The", lastName="Therapist", prefName="Terry", email="terry@pist.com", service="", bookURL="", userid=1) client1 = Client(firstName="Richie", lastName="Rich", email="richie@rich.com", staffid=2) alert1 = TempWaitAlert(slotStartDateTime="2023-05-16 20:15:00", slotLength=45) alert2 = TempWaitAlert(slotStartDateTime="2023-06-01 11:30:00", slotLength=120) user1 = User(userFirstName="Testy", userLastName="Tester", userEmail="test@test.com", userPassword="$2b$12$6Lxi6jt8RtxNlggq9ugHlusxuDmbydw084Gl5IfQfcSVjERO6vtLu") staff1 = Staff(firstName="Testy", lastName="Therapist", prefName="Terry", email="terry@pist.com", service="", bookURL="", userid=1) client1 = Client(firstName="Baby", lastName="Yoda", email="yoda@client.com", mobile=220220222) # Prepopulating the db with timeslots # (Not sure if this is acceptable, but coded this way so that it's clear what availtime options there are) av1=AvailTimes(timeUnit='Monday') av2=AvailTimes(timeUnit='Tuesday') av3=AvailTimes(timeUnit='Wednesday') av4=AvailTimes(timeUnit='Thursday') av5=AvailTimes(timeUnit='Friday') av6=AvailTimes(timeUnit='Saturday') av7=AvailTimes(timeUnit='Sunday') db.session.add(av1) db.session.add(av2) db.session.add(av3) db.session.add(av4) db.session.add(av5) db.session.add(av6) db.session.add(av7) db.session.commit() cp1=ClientPref(minDuration=60) availList = [ AvailTimes('Monday AM'), AvailTimes('Monday PM'), AvailTimes('Tuesday AM'), AvailTimes('Tuesday PM'), AvailTimes('Wednesday AM'), AvailTimes('Wednesday PM'), AvailTimes('Thursday AM'), AvailTimes('Thursday PM'), AvailTimes('Friday AM'), AvailTimes('Friday PM'), AvailTimes('Saturday AM'), AvailTimes('Saturday PM'), AvailTimes('Sunday AM'), AvailTimes('Sunday PM')] for each in availList: db.session.add(each) db.session.commit() <button class="btn btn-success btn-sm rounded-0" type="button" data-toggle="tooltip" data-placement="top" title="Edit"><i class="fa fa-edit"></i></button> #### IMPORTANT!!! #### MAKE SURE THAT AWS SECURITY CREDENTIALS ARE SET FOR ELASTIC BEANSTALK! https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/deployment-beanstalk-specify-credentials.html # Go to https://us-east-1.console.aws.amazon.com/iamv2/home#/users/details/ses-smtp-user.20230619-171053?section=permissions # Under Security Credentials, select Create Access Key and make sure that you select the option for SES/AWS resources
csidon/BoostlyForTimely
An application that enhances an existing SaaS' (GetTimely.com) Waitlist Notification functionality. We wanted to experiment with the possibility of building on top existing apps without open API access. This app has a serverless and user-facing component. Hosted on ElasticBeanstalk w CodePipeline for continuous-delivery. More in ChrisDocumentation.
Python