Skip to content

Commit

Permalink
Release Django sever (#82)
Browse files Browse the repository at this point in the history
* Updating README.md to include a troubleshooting section.

* Updating config.yml to run build pipeline against branches that start with 'chore/.*'.

* fix: change header in electron side to headers

* fix: remove csrftoken from cookie

* Storing username in session data.

* Removing extra import.

* Fixing syntax issue.

* Add basic logging.

* fix: readd csrftoken key to request-wrapper cookie

* Adding logging to registration views.

* Adding logging messages to Django views.

* Fixing syntax error.

* Fixing syntax errors.

* Update request session upon change password to success to keep user logged in

* Add basic logging.

* Adding logging to registration views.

* Adding logging messages to Django views.

* Fixing syntax error.

* Fixing syntax errors.

* Fixing syntax error.s

* Add date-time-field format for live_by and fix version_update_scheduler

* [FEAT] - Added future version route (#71)

* Storing username in session data.

* Removing extra import.

* Fixing syntax issue.

* Storing session data.

* Storing username in session.

* Fixing merge conflict.

* Update accounts model password length to be 12.

* Creating simple tool to parse patchnotes for PATCHNOTES: keyword.

* Polishing script to pull patchnotes from github.

* [FIX] - Exception Handling done in views (#73)

* [FIX] - Exception Handling done in views

* Fix syntax

* Revert "Fix/Update-accounts-model-password"

* Moving LOG_LEVEL config to config file.

* Update config_template to include log levels.

* Updating circleci config to also automatically run the build pipeline against reverted pull requests.

* feat: component container for preAuth routes

* feat: add api calls for password reset and change

* feat: add password reset page

* chore: rename some variables for better conventions

* Creating script to scrape patchnotes from github pull requests.

* Add button to disconnect a players character, and also delete a players cached data.

* feat: finish upload form and subheader for pages

* fix: some spacing changes

* Add constants and actions for delete cache feature.

* fix: add differentiation between normal requests and authRequests

* Add ability to specify start date and end date for patchnotes.

* Updated argument comments.

* Remove redundant troubleshooting section.

* Fixing some bugs.

* Adding requirements.txt.

* feat: add spinner to show fetching state

* feat: add alerts functionality

* feat: add timer for clearing alerts

* Adding support for deleting hash_cache.json

* Removing some debug statements and fixing typos.

* Disable character DC UI.

* Feature/upload front end (#79)

* feat: add drag and drop functionality for uploader
- add base Forgot Password page

* fix: connect proper prop values

* feat: remove some unused imports

* feat: create button form buttons for navigation

* style: add some formatting to buttons

* feat: adjustments to spacing and rendering formOverview

* logic for file uploads, missing some details and integration w/ React front end

* changed package-lock.json

* feat: add drag and drop functionality for uploader
- add base Forgot Password page

* fix: connect proper prop values

* feat: remove some unused imports

* feat: create button form buttons for navigation

* style: add some formatting to buttons

* feat: adjustments to spacing and rendering formOverview

* changed package-lock.json

* interfacing with electron

* syncing machines

* syncing

* switching machines

* working product

* feat: add drag and drop functionality for uploader
- add base Forgot Password page

* fix: connect proper prop values

* feat: remove some unused imports

* feat: create button form buttons for navigation

* style: add some formatting to buttons

* feat: adjustments to spacing and rendering formOverview

* changed package-lock.json

* feat: add drag and drop functionality for uploader
- add base Forgot Password page

* logic for file uploads, missing some details and integration w/ React front end

* changed package-lock.json

* interfacing with electron

* syncing machines

* syncing

* switching machines

* working product

* fix bug

* cleaning up

Co-authored-by: William Situ <[email protected]>

* Using proper import for request.

* style: add some padding to main container

* fix: electron js lines

Co-authored-by: Truman Wang <[email protected]>
Co-authored-by: William Situ <[email protected]>
Co-authored-by: allenaerostar <[email protected]>
Co-authored-by: Kevin Xu <[email protected]>
  • Loading branch information
5 people authored Jan 28, 2020
1 parent 878aa29 commit 9f3f001
Show file tree
Hide file tree
Showing 66 changed files with 2,564 additions and 622 deletions.
1 change: 1 addition & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ protected-only: &protected-only
- /fix[/].*/
- /chore[/].*/
- /deploy[/].*/
- /revert-.*/

version: 2
jobs:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{
"SECRET_KEY": "<MY_SECRET_KEY>",
"DEBUG": false,
"LOG_LEVEL_DEV": "DEBUG",
"LOG_LEVEL_DEFAULT": "INFO",
"ALLOWED_HOSTS": [
"<IP ADDR>",
],
Expand Down Expand Up @@ -37,4 +39,4 @@
"PORT": "<PORT>",
},
}
}
}
20 changes: 20 additions & 0 deletions dietstory-routing/dietstory-routing/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,26 @@
},
]

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'default-logger': {
'handlers': ['console'],
'level': secret_config['LOG_LEVEL_DEFAULT'],
},
'dev-logger': {
'handlers': ['console'],
'level': secret_config['LOG_LEVEL_DEV']
}
},
}

WSGI_APPLICATION = 'dietstory-routing.wsgi.application'


Expand Down
2 changes: 2 additions & 0 deletions dietstory-routing/docker/run_tests
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ CMD cd /mnt \
&& echo '{ \
"SECRET_KEY": "hello_world", \
"DEBUG": true, \
"LOG_LEVEL_DEV": "DEBUG", \
"LOG_LEVEL_DEFAULT": "INFO", \
"ALLOWED_HOSTS": [], \
"DATABASES": {"default": {}}, \
"EMAIL_BACKEND": "", \
Expand Down
65 changes: 65 additions & 0 deletions dietstory-routing/game_asset_manager/test/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import registration
import game_asset_manager
import json
from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from django.utils import timezone
import registration.verification as verification

class FutureVersionViewTest(TestCase):
POST_GAME_VERSIONS_URL='/game-files/version'
GET_FUTURE_VERSION_URL='/game-files/future-versions'

USERNAME = 'username'
PASSWORD = 'password'

def setUp(self):
registration.models.Accounts.objects.create(name=FutureVersionViewTest.USERNAME, password=FutureVersionViewTest.PASSWORD, email='[email protected]',birthday='1990-01-01', tempban=timezone.localtime(), verified = 1, adminlevel=2)

# Live version is v2.0
game_asset_manager.models.GameVersions.objects.create(major_ver=0, minor_ver=1, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=0, minor_ver=2, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=1, minor_ver=0, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=1, minor_ver=1, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=1, minor_ver=2, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=2, minor_ver=0, is_live=1)
game_asset_manager.models.GameVersions.objects.create(major_ver=2, minor_ver=1, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=2, minor_ver=2, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=3, minor_ver=0, is_live=0)
game_asset_manager.models.GameVersions.objects.create(major_ver=3, minor_ver=1, is_live=0)

def test_get_all_future_versions(self):
self.client.login(username=FutureVersionViewTest.USERNAME, password=FutureVersionViewTest.PASSWORD)
response = self.client.get(FutureVersionViewTest.GET_FUTURE_VERSION_URL,
{
'versionid':'v1.0'
})

expected = {
"future_versions": [
{"major_ver": 2, "minor_ver": 0},
{"major_ver": 2, "minor_ver": 1},
{"major_ver": 2, "minor_ver": 2},
{"major_ver": 3, "minor_ver": 0},
{"major_ver": 3, "minor_ver": 1},
{"major_ver": 1, "minor_ver": 1},
{"major_ver": 1, "minor_ver": 2}
]}

self.assertTrue(json.loads(response.content.decode('utf8')) == expected)

def test_get_future_versions_from_live(self):
self.client.login(username=FutureVersionViewTest.USERNAME, password=FutureVersionViewTest.PASSWORD)
response = self.client.get(FutureVersionViewTest.GET_FUTURE_VERSION_URL)

expected = {
"future_versions": [
{"major_ver": 3, "minor_ver": 0},
{"major_ver": 3, "minor_ver": 1},
{"major_ver": 2, "minor_ver": 1},
{"major_ver": 2, "minor_ver": 2}
]}

self.assertTrue(json.loads(response.content.decode('utf8')) == expected)

1 change: 1 addition & 0 deletions dietstory-routing/game_asset_manager/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
path('download', views.DownloadView.as_view()),
path('upload', views.UploadView.as_view()),
path('version', views.GameVersionView.as_view()),
path('future-versions', views.FutureVersionView.as_view()),
path('hashes', views.ReturnHashesView.as_view()),
]
2 changes: 1 addition & 1 deletion dietstory-routing/game_asset_manager/validate_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def clean(self):


class SubmitGameVersionForm(GameMetadataForm):
live_by = forms.DateTimeField(required=False)
live_by = forms.DateTimeField(input_formats=['%Y-%m-%d %H:%M:%S'], required=False)

class SubmitGameFileForm(GameMetadataForm):
file_hash = forms.CharField(max_length=50)
Expand Down
57 changes: 55 additions & 2 deletions dietstory-routing/game_asset_manager/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,46 @@ def get(self, request, *args, **kwargs):
{'message': 'File not found.'},
status=status.HTTP_404_NOT_FOUND)


class FutureVersionView(views.APIView):
permission_classes = (permissions.IsAdminUser,)

def get(self, request, *args, **kwargs):
"""
summary: Provides all future versions greater than live
description: Returns a list version numbers that are in the future
"""
params = GameMetadataForm(request.GET)

if not params.is_valid():
return JsonResponse(
{'message': 'Invalid version reference'},
status=status.HTTP_400_BAD_REQUEST)

# Get the base referenced version
major, minor = params.get_version_values()
try:
if major == None and minor == None:
ref_game_version = GameVersions.objects.get(is_live=True)
else:
ref_game_version = GameVersions.objects.get(major_ver=major, minor_ver=minor)
except GameVersions.DoesNotExist:
ref_game_version = None

if ref_game_version == None:
return JsonResponse(
{'message': 'No referenced game version found.'},
status=status.HTTP_400_BAD_REQUEST)

# Filter for all versions greater than referenced version
version_queryset = GameVersions.objects.filter(major_ver__gt=ref_game_version.major_ver) | GameVersions.objects.filter(major_ver=ref_game_version.major_ver, minor_ver__gt=ref_game_version.minor_ver)
res = [ {'major_ver': version.major_ver, 'minor_ver': version.minor_ver} for version in version_queryset ]

return JsonResponse(
{'future_versions': res},
status=status.HTTP_200_OK)


class GameVersionView(views.APIView):
def has_permissions(self, request, view):

Expand Down Expand Up @@ -160,6 +200,18 @@ def post(self, request, *args, **kwargs):
"""
summary: Post Game Version
description: Submit game version with live by time.
parameters:
- name: versionid
schema:
type: string
description: >
versionid is in the form of ^[vV]?([0-9]*)[.]([0-9]*)$.
- name: live_by
schema:
type: string
format: date-time
description: >
live_by is in the form of YYYY-MM-DD hh:mm:ss.
tags:
- GameVersionView
responses:
Expand Down Expand Up @@ -229,7 +281,8 @@ def post(self, request, *args, **kwargs):
{'message': 'Invalid live by time requested'},
status=status.HTTP_400_BAD_REQUEST)

version_update_scheduler.add_job(update_game_version, 'date', run_date=game_version.live_by, args=[game_version.major_ver, game_version.minor_ver])
elif live_by:
version_update_scheduler.add_job(update_game_version, 'date', run_date=live_by, args=[major_ver, minor_ver])

add_game_version(major_ver, minor_ver, live_by)

Expand Down Expand Up @@ -300,7 +353,7 @@ def get(self, request, *args, **kwargs):
description: Invalid Version Id provided
"""

params = GameMetadataForm(request.data)
params = GameMetadataForm(request.GET)

# Check for valid parameters
if not params.is_valid():
Expand Down
8 changes: 5 additions & 3 deletions dietstory-routing/game_version_updater/updateGameVersion.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@


def add_all_game_version_update_jobs(job_scheduler):

try:
print("Starting initialization of jobs.")

Expand All @@ -16,7 +15,8 @@ def add_all_game_version_update_jobs(job_scheduler):

print("Ending initialization of jobs.")
except Exception as e:
print("Fail to reinitialize all required jobs.")
print(e)
raise e


def update_game_version(major_ver, minor_ver):
Expand All @@ -36,6 +36,7 @@ def update_game_version(major_ver, minor_ver):
print("Updating game version finished.")
except Exception as e:
print(e)
raise e


def add_game_version(major_ver, minor_ver, live_by):
Expand All @@ -55,4 +56,5 @@ def add_game_version(major_ver, minor_ver, live_by):
file.save()

except Exception as e:
print(e)
print(e)
raise e
9 changes: 6 additions & 3 deletions dietstory-routing/game_version_updater/updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@


def start():
version_update_scheduler.start()
add_all_game_version_update_jobs(version_update_scheduler)

version_update_scheduler.start()
try:
add_all_game_version_update_jobs(version_update_scheduler)
except Exception as e:
print("Fail to reinitialize all required jobs.")


version_update_scheduler = BackgroundScheduler()
Loading

0 comments on commit 9f3f001

Please sign in to comment.