--- /dev/null
+# Auto detect text files and perform LF normalization
+* text=auto
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+ <component name="NewModuleRootManager">
+ <content url="file://$MODULE_DIR$" />
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+ <component name="TestRunnerService">
+ <option name="PROJECT_TEST_RUNNER" value="Unittests" />
+ </component>
+</module>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
+ <component name="PyCharmProfessionalAdvertiser">
+ <option name="shown" value="true" />
+ </component>
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/flaskr.iml" filepath="$PROJECT_DIR$/.idea/flaskr.iml" />
+ </modules>
+ </component>
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
+ </component>
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ChangeListManager">
+ <list default="true" id="e00b4877-6392-4152-a4a7-f9ffd3e1faca" name="Default Changelist" comment="">
+ <change beforePath="$PROJECT_DIR$/flaskr.py" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr.py" afterDir="false" />
+ </list>
+ <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+ <option name="SHOW_DIALOG" value="false" />
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+ <option name="LAST_RESOLUTION" value="IGNORE" />
+ </component>
+ <component name="FileEditorManager">
+ <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+ <file pinned="false" current-in-tab="true">
+ <entry file="file://$PROJECT_DIR$/flaskr.py">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="520">
+ <caret line="122" lean-forward="true" selection-start-line="122" selection-end-line="122" />
+ <folding>
+ <element signature="e#18#33#0" expanded="true" />
+ </folding>
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/flaskr - Copy.py">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-460">
+ <caret line="55" column="10" selection-start-line="55" selection-start-column="10" selection-end-line="55" selection-end-column="10" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/sql/upload_file.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="40">
+ <caret line="2" column="19" lean-forward="true" selection-start-line="2" selection-start-column="19" selection-end-line="2" selection-end-column="19" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/templates/mediaserver_file_list.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="200">
+ <caret line="10" column="27" lean-forward="true" selection-start-line="10" selection-start-column="27" selection-end-line="10" selection-end-column="27" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/Readme.txt">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="160">
+ <caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/schema.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="400">
+ <caret line="26" column="25" selection-start-line="26" selection-start-column="25" selection-end-line="26" selection-end-column="25" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/templates/mediaserver_addFile.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="260">
+ <caret line="13" column="9" selection-start-line="13" selection-start-column="9" selection-end-line="13" selection-end-column="9" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/templates/dashboard.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7">
+ <caret line="15" column="21" selection-start-line="15" selection-start-column="21" selection-end-line="15" selection-end-column="21" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ <file pinned="false" current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/templates/add_item.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7">
+ <caret line="30" column="28" selection-start-line="30" selection-start-column="28" selection-end-line="30" selection-end-column="28" />
+ </state>
+ </provider>
+ </entry>
+ </file>
+ </leaf>
+ </component>
+ <component name="FindInProjectRecents">
+ <findStrings>
+ <find>add</find>
+ <find>/pcpart_add_part</find>
+ <find>add_part</find>
+ <find>download</find>
+ <find>pcparts_list</find>
+ <find>delete_part</find>
+ <find>part_details</find>
+ <find>mediaserver_download</find>
+ <find>delete</find>
+ <find>download_</find>
+ <find>default_path</find>
+ </findStrings>
+ </component>
+ <component name="Git.Settings">
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+ </component>
+ <component name="IdeDocumentHistory">
+ <option name="CHANGED_PATHS">
+ <list>
+ <option value="$PROJECT_DIR$/templates/pcparts/mediaserver_addFile.html" />
+ <option value="$PROJECT_DIR$/sql/select_mediaserver_file_list.sql" />
+ <option value="$PROJECT_DIR$/sql/delete_file.sql" />
+ <option value="$PROJECT_DIR$/sql/select_fileToDelete.sql" />
+ <option value="$PROJECT_DIR$/sql/select_fileToDownload.sql" />
+ <option value="$PROJECT_DIR$/templates/mediaserver_addFile.html" />
+ <option value="$PROJECT_DIR$/sql/select_settings.sql" />
+ <option value="$PROJECT_DIR$/sql/insert_default_settings.sql" />
+ <option value="$PROJECT_DIR$/sql/delete_settings.sql" />
+ <option value="$PROJECT_DIR$/templates/mediaserver_settings.html" />
+ <option value="$PROJECT_DIR$/Readme.txt" />
+ <option value="$PROJECT_DIR$/templates/layout.html" />
+ <option value="$PROJECT_DIR$/templates/dashboard.html" />
+ <option value="$PROJECT_DIR$/sql/upload_file.sql" />
+ <option value="$PROJECT_DIR$/schema.sql" />
+ <option value="$PROJECT_DIR$/templates/mediaserver_file_list.html" />
+ <option value="$PROJECT_DIR$/flaskr.py" />
+ </list>
+ </option>
+ </component>
+ <component name="ProjectFrameBounds" extendedState="6">
+ <option name="x" value="316" />
+ <option name="y" value="54" />
+ <option name="width" value="1129" />
+ <option name="height" value="1040" />
+ </component>
+ <component name="ProjectView">
+ <navigator proportions="" version="1">
+ <foldersAlwaysOnTop value="true" />
+ </navigator>
+ <panes>
+ <pane id="Scope" />
+ <pane id="ProjectPane">
+ <subPane>
+ <expand>
+ <path>
+ <item name="flaskr_mediaserver" type="b2602c69:ProjectViewProjectNode" />
+ <item name="flaskr_mediaserver" type="462c0819:PsiDirectoryNode" />
+ </path>
+ <path>
+ <item name="flaskr_mediaserver" type="b2602c69:ProjectViewProjectNode" />
+ <item name="flaskr_mediaserver" type="462c0819:PsiDirectoryNode" />
+ <item name="sql" type="462c0819:PsiDirectoryNode" />
+ </path>
+ <path>
+ <item name="flaskr_mediaserver" type="b2602c69:ProjectViewProjectNode" />
+ <item name="flaskr_mediaserver" type="462c0819:PsiDirectoryNode" />
+ <item name="templates" type="462c0819:PsiDirectoryNode" />
+ </path>
+ <path>
+ <item name="flaskr_mediaserver" type="b2602c69:ProjectViewProjectNode" />
+ <item name="flaskr_mediaserver" type="462c0819:PsiDirectoryNode" />
+ <item name="templates" type="462c0819:PsiDirectoryNode" />
+ <item name="pcparts" type="462c0819:PsiDirectoryNode" />
+ </path>
+ </expand>
+ <select />
+ </subPane>
+ </pane>
+ </panes>
+ </component>
+ <component name="PropertiesComponent">
+ <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+ <property name="settings.editor.selected.configurable" value="preferences.lookFeel" />
+ </component>
+ <component name="RecentsManager">
+ <key name="MoveFile.RECENT_KEYS">
+ <recent name="C:\Users\Joseph\Documents\GitHub\flaskr_mediaserver\templates" />
+ </key>
+ <key name="CopyFile.RECENT_KEYS">
+ <recent name="C:\Users\Joseph\Documents\GitHub\flaskr_mediaserver\templates" />
+ <recent name="C:\Users\Joseph\Documents\GitHub\flaskr_mediaserver\templates\pcparts" />
+ </key>
+ </component>
+ <component name="RunDashboard">
+ <option name="ruleStates">
+ <list>
+ <RuleState>
+ <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+ </RuleState>
+ <RuleState>
+ <option name="name" value="StatusDashboardGroupingRule" />
+ </RuleState>
+ </list>
+ </option>
+ </component>
+ <component name="RunManager">
+ <configuration default="true" type="PythonConfigurationType" factoryName="Python">
+ <module name="flaskr" />
+ <option name="INTERPRETER_OPTIONS" value="" />
+ <option name="PARENT_ENVS" value="true" />
+ <envs>
+ <env name="PYTHONUNBUFFERED" value="1" />
+ </envs>
+ <option name="SDK_HOME" value="C:\Program Files (x86)\Python37-32\python.exe" />
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/.." />
+ <option name="IS_MODULE_SDK" value="false" />
+ <option name="ADD_CONTENT_ROOTS" value="true" />
+ <option name="ADD_SOURCE_ROOTS" value="true" />
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$" />
+ <option name="PARAMETERS" value="" />
+ <option name="SHOW_COMMAND_LINE" value="false" />
+ <option name="EMULATE_TERMINAL" value="false" />
+ <option name="MODULE_MODE" value="false" />
+ <option name="REDIRECT_INPUT" value="false" />
+ <option name="INPUT_FILE" value="" />
+ <method v="2" />
+ </configuration>
+ </component>
+ <component name="SvnConfiguration">
+ <configuration />
+ </component>
+ <component name="TaskManager">
+ <task active="true" id="Default" summary="Default task">
+ <changelist id="e00b4877-6392-4152-a4a7-f9ffd3e1faca" name="Default Changelist" comment="" />
+ <created>1596848632498</created>
+ <option name="number" value="Default" />
+ <option name="presentableId" value="Default" />
+ <updated>1596848632498</updated>
+ </task>
+ <servers />
+ </component>
+ <component name="ToolWindowManager">
+ <frame x="-4" y="-4" width="1928" height="1164" extended-state="6" />
+ <editor active="true" />
+ <layout>
+ <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24960506" />
+ <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+ <window_info id="Favorites" order="2" side_tool="true" />
+ <window_info anchor="bottom" id="Message" order="0" />
+ <window_info anchor="bottom" id="Find" order="1" weight="0.3298279" />
+ <window_info anchor="bottom" id="Run" order="2" />
+ <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+ <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+ <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+ <window_info anchor="bottom" id="TODO" order="6" />
+ <window_info anchor="bottom" id="Version Control" order="7" />
+ <window_info anchor="bottom" id="Terminal" order="8" weight="0.3298279" />
+ <window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
+ <window_info anchor="bottom" id="Python Console" order="10" />
+ <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+ <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+ <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+ </layout>
+ </component>
+ <component name="editorHistoryManager">
+ <entry file="file://$PROJECT_DIR$/flaskr.db">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="64">
+ <caret line="21" column="11" lean-forward="true" selection-start-line="21" selection-start-column="11" selection-end-line="21" selection-end-column="11" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/select_all_items.sql">
+ <provider selected="true" editor-type-id="text-editor" />
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/pcparts_addPart.html">
+ <provider selected="true" editor-type-id="text-editor" />
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/pcparts_list.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="80">
+ <caret line="5" column="27" selection-start-line="5" selection-start-column="27" selection-end-line="5" selection-end-column="27" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/delete_file.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="16">
+ <caret line="1" column="25" selection-start-line="1" selection-start-column="25" selection-end-line="1" selection-end-column="25" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/select_build.sql">
+ <provider selected="true" editor-type-id="text-editor" />
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/select_mediaserver_file_list.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret column="18" selection-start-column="18" selection-end-column="18" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/select_fileToDelete.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret column="44" selection-start-column="44" selection-end-column="44" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/select_fileToDownload.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret column="36" selection-start-column="36" selection-end-column="36" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/insert_fan.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret selection-end-line="12" selection-end-column="17" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/delete_part.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret selection-end-line="1" selection-end-column="27" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/delete_settings.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret column="20" selection-start-column="20" selection-end-column="20" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/insert_settings.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="80">
+ <caret line="5" column="9" selection-start-line="5" selection-start-column="9" selection-end-line="5" selection-end-column="9" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/insert_case.sql">
+ <provider selected="true" editor-type-id="text-editor" />
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/select_settings.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state>
+ <caret column="22" selection-start-column="22" selection-end-column="22" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/mediaserver_settings.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="112">
+ <caret line="7" column="36" selection-start-line="7" selection-start-column="36" selection-end-line="7" selection-end-column="36" />
+ <folding>
+ <element signature="n#style#0;n#input#0;n#dd#0;n#dl#0;n#form#0;n#!!top" expanded="true" />
+ </folding>
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/layout.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7">
+ <caret line="16" column="11" selection-start-line="16" selection-start-column="11" selection-end-line="16" selection-end-column="11" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/login.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7" />
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/dashboard.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7">
+ <caret line="15" column="21" selection-start-line="15" selection-start-column="21" selection-end-line="15" selection-end-column="21" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/add_item.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7">
+ <caret line="30" column="28" selection-start-line="30" selection-start-column="28" selection-end-line="30" selection-end-column="28" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/pcparts_addBuild.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-7">
+ <caret line="25" column="19" selection-start-line="25" selection-start-column="19" selection-end-line="25" selection-end-column="19" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/schema.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="400">
+ <caret line="26" column="25" selection-start-line="26" selection-start-column="25" selection-end-line="26" selection-end-column="25" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/flaskr - Copy.py">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="-460">
+ <caret line="55" column="10" selection-start-line="55" selection-start-column="10" selection-end-line="55" selection-end-column="10" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/item_list.html">
+ <provider selected="true" editor-type-id="text-editor" />
+ </entry>
+ <entry file="file://$PROJECT_DIR$/sql/upload_file.sql">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="40">
+ <caret line="2" column="19" lean-forward="true" selection-start-line="2" selection-start-column="19" selection-end-line="2" selection-end-column="19" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/Readme.txt">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="160">
+ <caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/mediaserver_addFile.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="260">
+ <caret line="13" column="9" selection-start-line="13" selection-start-column="9" selection-end-line="13" selection-end-column="9" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/templates/mediaserver_file_list.html">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="200">
+ <caret line="10" column="27" lean-forward="true" selection-start-line="10" selection-start-column="27" selection-end-line="10" selection-end-column="27" />
+ </state>
+ </provider>
+ </entry>
+ <entry file="file://$PROJECT_DIR$/flaskr.py">
+ <provider selected="true" editor-type-id="text-editor">
+ <state relative-caret-position="520">
+ <caret line="122" lean-forward="true" selection-start-line="122" selection-end-line="122" />
+ <folding>
+ <element signature="e#18#33#0" expanded="true" />
+ </folding>
+ </state>
+ </provider>
+ </entry>
+ </component>
+</project>
\ No newline at end of file
--- /dev/null
+#!/usr/bin/env python
+import sys
+from lib2to3.main import main
+
+sys.exit(main("lib2to3.fixes"))
--- /dev/null
+run in command prompt before running app:
+SET FLASK_APP=C:\Users\Joseph\Documents\GitHub\flaskr_mediaserver\flaskr.py
+
+then init the db:
+flask initdb
+
+then start server:
+flask run -h 127.0.0.1 -p 5000
+
+username for testing is:
+admin
+password for 'admin' user is:
+testing
--- /dev/null
+MoSCoW | Done? | Component | Task |
+---------|------------|------------|---------------------------------|
+M [X] Store Create an item
+M [ ] Store Delete an item
+M [ ] Store Update an item
+M [X] Store Vew a list of all items
+
+
+M [X] pcParts Central URL dashboard
+M [X] pcParts View a list of all parts
+M [X] pcParts View a part's details
+M [X] pcParts Create a part
+M [X] pcParts Update a part
+M [X] pcParts Delete a part
+
+M [X] pcParts Create a build
+M [X] pcParts Select a build upon part creation
+W [S] pcParts Add a part upon build creation
+M [ ] pcParts Update a build
+M [ ] pcParts Delete a build
+M [X] pcParts View a list of all builds
+
+M [ ] pcParts Flag a part is for sale on what platform
+S [ ] pcParts Identify who is selling a part
+
+
+
+M [ ] pcParts View a list of benchmarks
+M [ ] pcParts Update a benchmark
+M [ ] pcParts Create a benchmark
+M [ ] pcParts Delete a benchmark
+W [S] pcParts Add a benchmark upon build creation benchmark is part of a build in GUI
+W [S] pcParts Select a build upon benchmark creation benchmark is simply name and type
+
+
+M [ ] General Preview a list of uploaded file names
+S [ ] General Preview pictures
+
+
+
+
+TODO LIST:
+
+1| Forms/Python - Update part details list for all parts (currently set to only SSD)
+2| Forms/Python - Add update part to all parts (currently only SSD)
+3| GUI - Create required fields on parts
\ No newline at end of file
--- /dev/null
+# all the imports
+import os
+import sqlite3
+from flask import Flask, request, session, g, redirect, url_for, abort, \
+ render_template, flash
+
+""" ---------------- ---------------- App Init ---------------- ---------------- """
+# create our little application :)
+app = Flask(__name__)
+app.config.from_object(__name__)
+
+# Load default config and override config from an environment variable
+app.config.update(dict(
+ DATABASE=os.path.join(app.root_path, 'flaskr.db'),
+ SECRET_KEY='development key',
+ USERNAME='admin',
+ PASSWORD='testing'
+))
+app.config.from_envvar('FLASKR_SETTINGS', silent=True)
+
+""" ---------------- ---------------- Database Functions ---------------- ---------------- """
+def connect_db():
+ #Connects to the specific database
+ rv = sqlite3.connect(app.config['DATABASE'])
+ rv.row_factory = sqlite3.Row
+ return rv
+
+def get_db():
+ #Opens a new database connection if there is none yet for the current application context
+ if not hasattr(g, 'sqlite_db'):
+ g.sqlite_db = connect_db()
+ return g.sqlite_db
+
+@app.teardown_appcontext
+def close_db(error):
+ #Closes the database again at the end of the request
+ if hasattr(g, 'sqlite_db'):
+ g.sqlite_db.close()
+
+
+def init_db():
+ db = get_db()
+ with app.open_resource('schema.sql', mode='r') as f:
+ db.cursor().executescript(f.read())
+ #db.execute('PRAGMA FOREIGN_KEYS=ON')
+ #db.execute('PRAGMA foreign_keys = "1"')
+ db.commit()
+
+@app.cli.command('initdb')
+def initdb_command():
+ #Initializes the database
+ init_db()
+ print 'Initialized the database.'
+
+
+""" ---------------- ---------------- General Functions ---------------- ---------------- """
+#Login
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+ error = None
+ if request.method == 'POST':
+ if request.form['username'] != app.config['USERNAME']:
+ error = 'Invalid username'
+ elif request.form['password'] != app.config['PASSWORD']:
+ error = 'Invalid password'
+ else:
+ session['logged_in'] = True
+ flash('You were logged in')
+
+ return redirect(url_for('item_list'))
+ return render_template('login.html', error=error)
+
+#Logout
+@app.route('/logout')
+def logout():
+ session.pop('logged_in', None)
+ flash('You were logged out')
+ return redirect(url_for('item_list'))
+
+#Upload
+@app.route("/upload", methods=["POST"])
+def upload():
+ uploaded_files = flask.request.files.getlist("file[]")
+ print uploaded_files
+ return ""
+
+#Get row count of a table
+def get_next_row(currentTable):
+ sql_string = open('sql/select_row_count.sql', 'r').read()
+ sql_string = sql_string.replace("currentTable", currentTable)
+ db = get_db()
+ cur = db.execute(sql_string)
+ row_count = cur.fetchone()
+ return row_count
+
+""" ---------------- ---------------- Main Routes ---------------- ---------------- """
+#Display Data - Dashboard
+@app.route('/')
+def dashboard():
+ return render_template('dashboard.html')
+
+""" ---------------- ---------------- List Parts ---------------- ---------------- """
+#Select all parts and display webpage
+@app.route('/pcparts_list')
+def pcparts_list():
+ sql_string = open('sql/select_all_pcparts.sql', 'r').read()
+ db = get_db()
+ cur = db.execute(sql_string)
+ items = cur.fetchall()
+ abc = db.execute('PRAGMA foreign_keys')
+ abcX = abc.fetchall()
+ print "FOREIGN KEY STATUS:"
+ print abcX
+ print "-----------------------"
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ abc = db.execute('PRAGMA foreign_keys')
+ abcY = abc.fetchall()
+ print "FOREIGN KEY STATUS:"
+ print abcY
+ print "-----------------------"
+ #Display the page
+ # items ==> list of columns and respective rows for all PC parts
+ return render_template('pcparts_list.html', items=items)
+
+
+#Select all builds and display webpage
+@app.route('/pcparts_listBuilds')
+def pcparts_listBuilds():
+ #Select all builds
+ pcBuildList = get_pcBuildList()
+ #Display the page
+ # pcBuildList ==> list of columns and respective rows for all PC builds
+ return render_template('pcparts_listBuilds.html', pcBuildList=pcBuildList)
+
+#Get a part
+def get_part(pcPartId):
+ sql_string = open('sql/select_part.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute(sql_string, [pcPartId])
+ part_row = cur.fetchone()
+ #Return row of part details
+ return part_row
+
+
+#Get a part's details
+def get_part_details(pcPartId, pcPartType):
+ sql_string = open('sql/select_part_details.sql', 'r').read()
+ sql_string = sql_string.replace("tableName", pcPartType)
+ print "sql_string"
+ print sql_string
+ print "sql_string"
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute(sql_string, [pcPartId])
+ part_details_row = cur.fetchone()
+ #Return row of part details
+ return part_details_row
+
+#Display Data - a part's details
+@app.route('/pcparts_list/<int:pcPartId>/<pcPartType>/part_details/')
+def part_details(pcPartId, pcPartType):
+ selected_row = get_part_details(pcPartId, pcPartType)
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+ return render_template('/pcparts/select_ssd.html', pcPartId=pcPartId, selected_row=selected_row, pcPartType=pcPartType)
+
+def fetch_parts():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+
+ #Fetch Mobo List
+ sql_string = open('sql/select_moboList.sql', 'r').read()
+ result = db.execute(sql_string)
+ moboList = result.fetchall()
+
+ #Fetch Case List
+ sql_string = open('sql/select_caseList.sql', 'r').read()
+ result = db.execute(sql_string)
+ caseList = result.fetchall()
+
+ #Fetch PSU List
+ sql_string = open('sql/select_psuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ psuList = result.fetchall()
+
+ #Fetch RAM List
+ sql_string = open('sql/select_ramList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ramList = result.fetchall()
+
+ #Fetch GPU List
+ sql_string = open('sql/select_gpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ gpuList = result.fetchall()
+
+ #Fetch SSD List
+ sql_string = open('sql/select_ssdList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ssdList = result.fetchall()
+
+ #Fetch HDD List
+ sql_string = open('sql/select_hddList.sql', 'r').read()
+ result = db.execute(sql_string)
+ hddList = result.fetchall()
+
+ #Fetch CPU List
+ sql_string = open('sql/select_cpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuList = result.fetchall()
+
+ #Fetch CPU Cooling List
+ sql_string = open('sql/select_cpuCoolList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuCoolList = result.fetchall()
+
+ #Fetch Fan List
+ sql_string = open('sql/select_fanList.sql', 'r').read()
+ result = db.execute(sql_string)
+ fanList = result.fetchall()
+
+ #Fetch LED Kit List
+ sql_string = open('sql/select_ledkitList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ledkitList = result.fetchall()
+
+ #Fetch OS List
+ sql_string = open('sql/select_osList.sql', 'r').read()
+ result = db.execute(sql_string)
+ osList = result.fetchall()
+
+ dataList = []
+ dataList.append(moboList)
+ dataList.append(caseList)
+ dataList.append(psuList)
+ dataList.append(ramList)
+ dataList.append(gpuList)
+ dataList.append(ssdList)
+ dataList.append(hddList)
+ dataList.append(cpuList)
+ dataList.append(cpuCoolList)
+ dataList.append(fanList)
+ dataList.append(ledkitList)
+ dataList.append(osList)
+
+ return dataList
+
+
+
+#
+#
+# check out ebay API
+# check out ebay API
+# check out ebay API
+# check out ebay API
+#
+#
+""" ---------------- ---------------- PC Builds ---------------- ----------------"""
+""" ---------------- Add PC Build ----------------"""
+#Display Form - Add a New Build
+@app.route('/pcparts_addBuild.html', methods=['GET', 'POST'])
+def pcparts_addBuild():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+
+ #Fetch Mobo List
+ sql_string = open('sql/select_moboList.sql', 'r').read()
+ result = db.execute(sql_string)
+ moboList = result.fetchall()
+
+ #Fetch Case List
+ sql_string = open('sql/select_caseList.sql', 'r').read()
+ result = db.execute(sql_string)
+ caseList = result.fetchall()
+
+ #Fetch PSU List
+ sql_string = open('sql/select_psuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ psuList = result.fetchall()
+
+ #Fetch RAM List
+ sql_string = open('sql/select_ramList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ramList = result.fetchall()
+
+ #Fetch GPU List
+ sql_string = open('sql/select_gpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ gpuList = result.fetchall()
+
+ #Fetch SSD List
+ sql_string = open('sql/select_ssdList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ssdList = result.fetchall()
+
+ #Fetch HDD List
+ sql_string = open('sql/select_hddList.sql', 'r').read()
+ result = db.execute(sql_string)
+ hddList = result.fetchall()
+
+ #Fetch CPU List
+ sql_string = open('sql/select_cpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuList = result.fetchall()
+
+ #Fetch CPU Cooling List
+ sql_string = open('sql/select_cpuCoolList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuCoolList = result.fetchall()
+
+ #Fetch Fan List
+ sql_string = open('sql/select_fanList.sql', 'r').read()
+ result = db.execute(sql_string)
+ fanList = result.fetchall()
+
+ #Fetch LED Kit List
+ sql_string = open('sql/select_ledkitList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ledkitList = result.fetchall()
+
+ #Fetch OS List
+ sql_string = open('sql/select_osList.sql', 'r').read()
+ result = db.execute(sql_string)
+ osList = result.fetchall()
+
+ return render_template('pcparts_addBuild.html', moboList=moboList,
+ caseList=caseList,
+ psuList=psuList,
+ ramList=ramList,
+ gpuList=gpuList,
+ ssdList=ssdList,
+ hddList=hddList,
+ cpuList=cpuList,
+ cpuCoolList=cpuCoolList,
+ fanList=fanList,
+ ledkitList=ledkitList,
+ osList=osList)
+
+def get_pcBuildList():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute('SELECT * FROM pcBuild')
+ pcBuildList = cur.fetchall()
+ return pcBuildList
+
+#Submit POST - Add a New Build
+@app.route('/pcpart_add_build', methods=['GET', 'POST'])
+def add_build():
+ if not session.get('logged_in'):
+ abort(401)
+ sql_string = open('sql/insert_build.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string, [request.form['pcBuild_name'],
+ request.form['pcBuild_type'],
+ request.form['pcBuild_notes'],
+ request.form['pcBuild_avgPartAge'],
+ request.form['pcBuild_mobo_id'],
+ request.form['pcBuild_case_id'],
+ request.form['pcBuild_ram_id'],
+ request.form['pcBuild_gpu_id'],
+ request.form['pcBuild_ssd_id'],
+ request.form['pcBuild_hdd_id'],
+ request.form['pcBuild_cpu_id'],
+ request.form['pcBuild_psu_id'],
+ request.form['pcBuild_cpuCool_id'],
+ request.form['pcBuild_fan_id'],
+ request.form['pcBuild_ledkit_id'],
+ request.form['pcBuild_os_id'],
+ request.form['pcBuild_colorScheme']])
+ db.commit()
+
+ return redirect(url_for('pcparts_listBuilds'))
+
+
+""" ---------------- ---------------- Add Part ---------------- ----------------"""
+""" ---------------- Add Part - Generic ----------------"""
+#Display Form - Add a New Part
+@app.route('/pcparts_addPart.html', methods=['GET', 'POST'])
+def pcparts_addPart():
+ pcBuildList = get_pcBuildList()
+
+ return render_template('pcparts_addPart.html', pcBuildList=pcBuildList)
+
+#Submit POST - Add a New Part
+@app.route('/pcpart_add_part', methods=['GET', 'POST'])
+def add_part():
+ if not session.get('logged_in'):
+ abort(401)
+
+ sql_string = open('sql/insert_part.sql', 'r').read()
+ request_string = ""
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string, [request.form['pcPart_type'],
+ request.form['pcPart_name'],
+ request.form['pcPart_modelNumber'],
+ request.form['pcPart_price'],
+ request.form['pcPart_desc'],
+ request.form['pcPart_brand'],
+ request.form['pcPart_condition'],
+ request.form['pcPart_notes'],
+ request.form['pcPart_age'],
+ request.form['pcPart_pcBuild_id']])
+ db.commit()
+
+ #return redirect(url_for('pcparts_addPart_ssd'))
+ return redirect(url_for('display_addPart_details'))
+
+""" ---------------- Add Part - Specific ----------------"""
+
+#Display Form - Add Part Details - Generic
+@app.route('/display_addPart_details.html', methods=['GET', 'POST'])
+def display_addPart_details():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute('SELECT max(pcPart_id) FROM pcPart')
+ maxRowCount = cur.fetchall()
+ currentPart = maxRowCount[0][0]
+ print "currentPart"
+ print currentPart
+ print "currentPart"
+ sql_string = "SELECT pcPart_type FROM pcPart WHERE pcPart_id = currentPart"
+ print "sql_string"
+ print sql_string
+ print "sql_string"
+ sql_string = sql_string.replace("currentPart", str(currentPart))
+ get_partType = db.execute(sql_string)
+ partTypeX = get_partType.fetchone()
+ partType = partTypeX[0]
+ print "partType"
+ print partType
+ print "partType"
+ return render_template('display_addPart_details.html', currentPart=currentPart, partType=partType)
+
+#
+#
+# return render_template('display_addPart_details.html', currentPart=currentPart, partType=partType,
+# moboList=dataList[0], caseList=dataList[1], psuList=dataList[2],
+# ramList=dataList[3], gpuList=dataList[4], ssdList=dataList[5],
+# hddList=dataList[6], cpuList=dataList[7], cpuCoolList=dataList[8],
+# fanList=dataList[9], ledkitList=dataList[10], osList=dataList[11]
+#
+#
+
+
+#Submit POST - Add a New Part Details - Generic
+@app.route('/pcpart/add_part_details', methods=['POST'])
+def add_part_details():
+ if not session.get('logged_in'):
+ abort(401)
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ #SSD
+ print "request.form['pc_part_id'] "
+ print request.form['pc_part_id']
+ print "request.form['pc_part_id'] "
+ if request.form['part_type'] == "ssd":
+ sql_string = open('sql/insert_ssd.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['ssd_formFactor'],
+ request.form['ssd_size'],
+ request.form['ssd_interface'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #RAM
+ elif request.form['part_type'] == "ram":
+ sql_string = open('sql/insert_ram.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['ram_kitSize'],
+ request.form['ram_stickSize'],
+ request.form['ram_speed'],
+ request.form['ram_type'],
+ request.form['ram_casLatency'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #HDD
+ elif request.form['part_type'] == "hdd":
+ sql_string = open('sql/insert_hdd.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['hdd_formFactor'],
+ request.form['hdd_size'],
+ request.form['hdd_interface'],
+ request.form['hdd_cache'],
+ request.form['hdd_rpm'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #CASE
+ elif request.form['part_type'] == "case":
+ sql_string = open('sql/insert_case.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['case_formFactor'],
+ request.form['case_width'],
+ request.form['case_height'],
+ request.form['case_length'],
+ request.form['case_525bay'],
+ request.form['case_350bay'],
+ request.form['case_250bay'],
+ request.form['case_80fan'],
+ request.form['case_120fan'],
+ request.form['case_140fan'],
+ request.form['case_240fan'],
+ request.form['case_otherFan'],
+ request.form['case_fpSpk'],
+ request.form['case_fpMic'],
+ request.form['case_fpUSB3'],
+ request.form['case_fpUSB2'],
+ request.form['case_psuSlots'],
+ request.form['case_waterSlots'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #GPU
+ elif request.form['part_type'] == "gpu":
+ sql_string = open('sql/insert_gpu.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['gpu_vramType'],
+ request.form['gpu_vramSize'],
+ request.form['gpu_slotWidth'],
+ request.form['gpu_interface'],
+ request.form['gpu_6pin'],
+ request.form['gpu_8pin'],
+ request.form['gpu_clockSpeed'],
+ request.form['gpu_memClockSpeed'],
+ request.form['gpu_busBandwidth'],
+ request.form['gpu_crossfire'],
+ request.form['gpu_sli'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #PSU
+ elif request.form['part_type'] == "psu":
+ sql_string = open('sql/insert_psu.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['psu_watt'],
+ request.form['psu_effiency'],
+ request.form['psu_8pin'],
+ request.form['psu_6pin'],
+ request.form['psu_4pin'],
+ request.form['psu_molex'],
+ request.form['psu_sata'],
+ request.form['psu_floppy'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #OS
+ elif request.form['part_type'] == "os":
+ sql_string = open('sql/insert_os.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['os_type'],
+ request.form['os_bit'],
+ request.form['os_version'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #CPU Cooler
+ elif request.form['part_type'] == "cpuCool":
+ sql_string = open('sql/insert_cpuCool.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['cpuCool_type'],
+ request.form['cpuCool_socketList'],
+ request.form['cpuCool_fanCount'],
+ request.form['cpuCool_fanSize'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #Motherboard
+ elif request.form['part_type'] == "mobo":
+ sql_string = open('sql/insert_mobo.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['mobo_ramType'],
+ request.form['mobo_CPUsocket'],
+ request.form['mobo_dimmSlots'],
+ request.form['mobo_pciSlots'],
+ request.form['mobo_pcie16Slots'],
+ request.form['mobo_pcie8Slots'],
+ request.form['mobo_pcie4Slots'],
+ request.form['mobo_pcie1Slots'],
+ request.form['mobo_chipset'],
+ request.form['mobo_cpu4pin'],
+ request.form['mobo_cpu8pin'],
+ request.form['mobo_cpu6pin'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #Fan
+ elif request.form['part_type'] == "fan":
+ sql_string = open('sql/insert_fan.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['fan_size'],
+ request.form['fan_type'],
+ request.form['fan_color'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #LED Kit
+ elif request.form['part_type'] == "ledkit":
+ sql_string = open('sql/insert_ledkit.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['ledkit_color'],
+ request.form['ledkit_type'],
+ request.form['ledkit_notes'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #Processor
+ elif request.form['part_type'] == "cpu":
+ sql_string = open('sql/insert_cpu.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['cpu_socket'],
+ request.form['cpu_cores'],
+ request.form['cpu_threads'],
+ request.form['cpu_frequency'],
+ request.form['cpu_cache'],
+ request.form['cpu_wattage'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ else:
+ pass
+
+#Display Form - Add Part Details - SSD
+@app.route('/pcparts_add_ssd.html', methods=['GET', 'POST'])
+def pcparts_addPart_ssd():
+ currentTable = "pcPart"
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute('SELECT max(pcPart_id) FROM pcPart')
+ maxRowCount = cur.fetchall()
+ currentPart = maxRowCount[0][0]
+ return render_template('pcparts_addPart_ssd.html', currentPart=currentPart)
+
+#Submit POST - Add a New Part Details - SSD
+@app.route('/pcpart/add_ssd', methods=['POST'])
+def add_ssd():
+ if not session.get('logged_in'):
+ abort(401)
+ sql_string = open('sql/insert_ssd.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string,
+ [request.form['ssd_formFactor'],
+ request.form['ssd_size'],
+ request.form['ssd_interface'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('dashboard'))
+
+
+""" ---------------- ---------------- Update Part ---------------- ----------------"""
+#Display Form - Update a part
+@app.route('/pcparts/updatePart.html/', methods=['GET', 'POST'])
+def display_update_part():
+ sql_string = open('sql/update_part.sql', 'r').read()
+ #db = get_db()
+ #db.execute('PRAGMA FOREIGN_KEYS=ON')
+ selected_row = get_part(request.form['part_to_update'])
+ #partId_to_update = request.form['part_to_update']
+ #Display the page
+ # partId_to_update ==> current part id to update
+ # selected_row ==> the part's details
+ return render_template('/pcparts/updatePart.html', selected_row=selected_row)
+
+
+#Submit POST - Update a Part
+@app.route('/pcparts/update_part', methods=['GET', 'POST'])
+def update_part():
+ if not session.get('logged_in'):
+ abort(401)
+ sql_string = open('sql/update_part.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string,[request.form['pcPart_type'], request.form['pcPart_name'], request.form['pcPart_modelNumber'], request.form['pcPart_price'], request.form['pcPart_desc'], request.form['pcPart_brand'], request.form['pcPart_condition'], request.form['pcPart_notes'], request.form['pcPart_age'], request.form['pcPart_id']])
+ db.commit()
+ flash('Part successfully updated!')
+ return redirect(url_for('display_update_part_details', pcPartId=int(request.form['pcPart_id'])))
+
+
+#Display Form - Update a part's details
+@app.route('/pcparts/<int:pcPartId>/update_part_details.html', methods=['GET', 'POST'])
+def display_update_part_details(pcPartId):
+ selected_row = get_part_details(pcPartId)
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+ return render_template('/pcparts/updatePart_details.html', selected_row=selected_row)
+
+#Submit POST - Update a Part's Details
+@app.route('/pcparts/update_part_details/', methods=['GET', 'POST'])
+def update_part_details():
+ sql_string = open('sql/update_part_ssd.sql', 'r').read()
+ #sql_string = sql_string.replace("pcPart_id", str(pcPartId))
+ #part_table = "ssd"
+ db = get_db()
+ db.execute('PRAGMA FOREIGN_KEYS=ON')
+ db.execute(sql_string,[ request.form['ssd_formFactor'],
+ request.form['ssd_size'],
+ request.form['ssd_interface'],
+ request.form['ssd_pcPart_id']])
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+ db.commit()
+ flash('Part details successfully updated!')
+ #return render_template('pcparts_list.html')
+ return pcparts_list()
+
+""" ---------------- ---------------- Delete Part ---------------- ----------------"""
+@app.route('/delete_part', methods=['POST'])
+def delete_part():
+ sql_string = open('sql/delete_part.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA FOREIGN_KEYS=ON')
+ db.execute(sql_string,[request.form['part_to_delete']])
+ db.commit()
+ flash('Part deleted from database!')
+ return redirect(url_for('pcparts_list'))
+
+
+""" ---------------- ---------------- List PC Parts ---------------- ---------------- """
+@app.route('/pcparts/pcparts_ram')
+def pcparts_ram():
+ return render_template('pcparts_ram.html')
+
+@app.route('/pcparts/list_pcparts_ssd')
+def list_pcparts_ssd():
+ return render_template('list_pcparts_ssd.html')
+
+@app.route('/pcparts/pcparts_hdd')
+def pcparts_hdd():
+ return render_template('pcparts_hdd.html')
+
+@app.route('/pcparts/pcparts_case')
+def pcparts_case():
+ return render_template('pcparts_case.html')
+
+@app.route('/pcparts/pcparts_gpu')
+def pcparts_gpu():
+ return render_template('pcparts_gpu.html')
+
+@app.route('/pcparts/pcparts_psu')
+def pcparts_psu():
+ return render_template('pcparts_psu.html')
+
+@app.route('/pcparts/pcparts_os')
+def pcparts_os():
+ return render_template('pcparts_os.html')
+
+@app.route('/pcparts/pcparts_cpuCool')
+def pcparts_cpuCool():
+ return render_template('pcparts_cpuCool.html')
+
+@app.route('/pcparts/pcparts_mobo')
+def pcparts_mobo():
+ return render_template('pcparts_mobo.html')
+
+@app.route('/pcparts/pcparts_fan')
+def pcparts_fan():
+ return render_template('pcparts_fan.html')
+
+@app.route('/pcparts/pcparts_ledkit')
+def pcparts_ledkit():
+ return render_template('pcparts_ledkit.html')
+
+@app.route('/pcparts/pcparts_cpu')
+def pcparts_cpu():
+ return render_template('pcparts_cpu.html')
+
+#def pcparts_ssd():
+ #print "OOOOOOOOOOOOOOOOOOOOOO"
+ #print selected_row
+ #print "OOOOOOOOOOOOOOOOOOOOOO"
+ #print "PC PART ID: " + str(pcPartId) + " ---"
+ #sql_string = open('select_ssd.sql', 'r').read()
+ #sql_string = sql_string.replace("pcPart_id", str(pcPartId))
+ #db = get_db()
+ #cur = db.execute(sql_string, [pcPartId])
+ #items = cur.fetchall()
+
+
+""" ---------------- ---------------- List Items ---------------- ---------------- """
+#Display Data - List All Items
+@app.route('/item_list')
+def item_list():
+ sql_string = open('sql/select_all_items.sql', 'r').read()
+ db = get_db()
+ cur = db.execute(sql_string)
+ items = cur.fetchall()
+ return render_template('item_list.html', items=items)
+
+#Display Form - Add Item
+@app.route('/add_item')
+def add_item():
+ return render_template('add_item.html')
+
+#Submit POST - Add Item
+@app.route('/add', methods=['POST'])
+def submit_item():
+ if not session.get('logged_in'):
+ abort(401)
+ db = get_db()
+ db.execute('insert into item (item_name, item_subtitle, \
+ item_desc, item_category, item_condition, item_conditionDesc, item_cost) \
+ values (?, ?, ?, ?, ?, ?, ?)',
+ [request.form['item_name'],
+ request.form['item_subtitle'],
+ request.form['item_desc'],
+ request.form['item_category'],
+ request.form['item_condition'],
+ request.form['item_conditionDesc'],
+ request.form['item_cost']])
+ db.commit()
+ flash('New item was added to database!')
+ return redirect(url_for('item_list'))
+
+
+
+
--- /dev/null
+# all the imports
+import os, time
+from datetime import date
+import sqlite3
+import sys
+from flask import Flask, request, session, g, redirect, url_for, abort, \
+ render_template, flash, send_from_directory
+from werkzeug.utils import secure_filename
+from flask_script import Manager, Server
+
+
+""" ---------------- ---------------- App Init ---------------- ---------------- """
+UPLOAD_FOLDER = 'c:/Users/Joseph/Downloads/Media_Server_Upload'
+ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
+DOWNLOAD_FROM_DIRECTORY = 'c:/Users/Joseph/Downloads/Media_Server_Upload'
+WORK_DIRECTORY = 'c:/Users/Joseph/Documents/GitHub/flaskr_mediaserver/'
+SQL_DIRECTORY = 'sql/'
+
+# create our little application :)
+app = Flask(__name__)
+
+app.config.from_object(__name__)
+app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
+app.config['DOWNLOAD_FROM_DIRECTORY'] = DOWNLOAD_FROM_DIRECTORY
+# Load default config and override config from an environment variable
+app.config.update(dict(
+ DATABASE=os.path.join(app.root_path, 'flaskr.db'),
+ SECRET_KEY='development key',
+ USERNAME='admin',
+ PASSWORD='testing'
+))
+app.config.from_envvar('FLASKR_SETTINGS', silent=True)
+
+# Called in
+def allowed_file(filename):
+ return '.' in filename and \
+ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
+
+
+
+
+
+""" ---------------- ---------------- Database Functions ---------------- ---------------- """
+def connect_db():
+ #Connects to the specific database
+ rv = sqlite3.connect(app.config['DATABASE'])
+ rv.row_factory = sqlite3.Row
+ return rv
+
+def get_db():
+ #Opens a new database connection if there is none yet for the current application context
+ if not hasattr(g, 'sqlite_db'):
+ g.sqlite_db = connect_db()
+ return g.sqlite_db
+
+@app.teardown_appcontext
+def close_db(error):
+ #Closes the database again at the end of the request
+ if hasattr(g, 'sqlite_db'):
+ g.sqlite_db.close()
+
+
+def init_db():
+ db = get_db()
+ with app.open_resource('schema.sql', mode='r') as f:
+ db.cursor().executescript(f.read())
+ #db.execute('PRAGMA FOREIGN_KEYS=ON')
+ #db.execute('PRAGMA foreign_keys = "1"')
+ db.commit()
+
+@app.cli.command('initdb')
+def initdb_command():
+ #Initializes the database
+ init_db()
+ print('Initialized the database.')
+
+
+
+
+
+""" ---------------- ---------------- General Functions ---------------- ---------------- """
+#Login
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+ error = None
+ if request.method == 'POST':
+ if request.form['username'] != app.config['USERNAME']:
+ error = 'Invalid username'
+ elif request.form['password'] != app.config['PASSWORD']:
+ error = 'Invalid password'
+ else:
+ session['logged_in'] = True
+ flash('You were logged in')
+
+ #return redirect(url_for('item_list'))
+ return render_template('dashboard.html')
+ return render_template('login.html', error=error)
+
+#Logout
+@app.route('/logout')
+def logout():
+ session.pop('logged_in', None)
+ flash('You were logged out')
+ #return redirect(url_for('item_list'))
+ return render_template('dashboard.html')
+
+
+#Get row count of a table
+def get_next_row(currentTable):
+ sql_string = open('sql/select_row_count.sql', 'r').read()
+ sql_string = sql_string.replace("currentTable", currentTable)
+ db = get_db()
+ cur = db.execute(sql_string)
+ row_count = cur.fetchone()
+ return row_count
+
+""" ---------------- ---------------- Main Routes ---------------- ---------------- """
+#Display Data - Dashboard
+@app.route('/')
+def dashboard():
+ return render_template('dashboard.html')
+
+
+
+#Show the settings page
+# Need to add in DB: a table and place to put the settings like file server save location
+@app.route('/mediaserver_settings', methods=['GET', 'POST'])
+def mediaserver_settings():
+ db = get_db()
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'select_settings.sql', 'r').read()
+ cur = db.execute(sql_string)
+ default_upload_path = cur.fetchall()
+ print("default_upload_path")
+ print(default_upload_path[0])
+ print("default_upload_path")
+ return render_template('mediaserver_settings.html', default_upload_path=default_upload_path)
+
+
+@app.route('/save_settings', methods=['POST'])
+def mediaserver_save_settings():
+ # add db stuff here to add the save location to db
+ # or can use a text file to store the data
+ # then need to retrieve the save location foZr use
+ db = get_db()
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'delete_settings.sql', 'r').read()
+ db.execute(sql_string)
+ db.commit()
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'insert_settings.sql', 'r').read()
+ db.execute(sql_string, [request.form['server_file_path']])
+ db.commit()
+ app.config['UPLOAD_FOLDER'] = request.form['server_file_path']
+ app.config['DOWNLOAD_FROM_DIRECTORY'] = request.form['server_file_path']
+
+
+ return redirect(url_for('mediaserver_settings'))
+
+
+
+"""
+Use DB to store filenames and folders
+get filenames and folders using DB select when displaying webpage
+"""
+
+#Select all files and display webpage
+@app.route('/mediaserver_list')
+def mediaserver_file_list():
+ # sql_string = open('sql/select_all_pcparts.sql', 'r').read()
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'select_mediaserver_file_list.sql', 'r').read()
+ #Need to insert into sql folder hiearchy of file (add column to db: file_path
+
+
+ db = get_db()
+ cur = db.execute(sql_string)
+ items = cur.fetchall()
+
+ #Get array of files and folders in the download directory
+ files_and_folders = os.listdir(app.config['DOWNLOAD_FROM_DIRECTORY'])
+ print("AAAAAAA")
+ print(files_and_folders)
+ print("AAAAAAA")
+ print("AAAAAAA")
+ print(files_and_folders)
+ print("AAAAAAA")
+
+
+
+ #Will use this for later (will have to build path_of_file from SQL select statement)
+ #Only if we need creation time (c) or modified time (m) from the OS when file is being downloaded
+ #Create array to store date.time of files in download directory
+ files_creation_time = []
+
+ for file in files_and_folders:
+ path_of_file = app.config['DOWNLOAD_FROM_DIRECTORY'] + "/" + file
+ print("last modified: %s" % time.ctime(os.path.getctime(path_of_file)))
+ files_creation_time.append(time.ctime(os.path.getctime(path_of_file)))
+ #print("created: %s" % time.ctime(os.path.getctime(file)))
+
+ #return render_template('mediaserver_file_list.html', files_and_folders=files_and_folders)
+ return render_template('mediaserver_file_list.html', items=items)
+
+
+
+#@app.route('/get-files/<path:path>',methods = ['GET','POST'])
+#def get_files(path):
+#
+# """Download a file."""
+# try:
+# return send_from_directory(DOWNLOAD_DIRECTORY, path, as_attachment=True)
+# except FileNotFoundError:
+# abort(404)
+
+@app.route('/mediaserver_download_file', methods=['POST'])
+def mediaserver_download_file():
+
+ # Select from DB the file (find filename, return row)
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'select_fileToDownload.sql', 'r').read()
+ db = get_db()
+ #abc = db.execute('PRAGMA FOREIGN_KEYS=ON')
+ file = db.execute(sql_string,[request.form['file_to_download']])
+ #db.commit()
+ DownloadFileList = file.fetchall()
+ #print("AAAAAAA 5555555 AAAAA")
+ #print(DownloadFileList[0][2])
+ #a11 = str(DownloadFileList[0][2])
+ #print(a11)
+ #a12 = a11.split('.')
+ #print(a12)
+ abc = DownloadFileList[0][2].split('\\')
+ file_path = abc[0]
+ #print("file_path")
+ #print(file_path)
+ #print("AAAAAAA 5555555 AAAAA")
+
+ # file_path - filepath of the file to download
+ # DownloadFileList - file name of the file to download
+ try:
+ return send_from_directory(file_path, DownloadFileList[0][1], as_attachment=True)
+ except FileNotFoundError:
+ abort(404)
+
+ flash('File downloaded from OS disk!')
+ return redirect(url_for('mediaserver_file_list'))
+
+
+""" ---------------- ---------------- Delete Part ---------------- ----------------"""
+@app.route('/mediaserver_delete_file', methods=['POST'])
+def mediaserver_delete_file():
+
+ # Need OS operations to locate the file to delete it instead of SQL
+ # save the file to the OS' hard drive
+ # file.delete(os.path.join(app.config['UPLOAD_FOLDER'], filename))
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'select_fileToDelete.sql', 'r').read()
+ db = get_db()
+ filepath_of_file_to_delete = db.execute(sql_string,[request.form['file_to_delete']])
+ #print(filepath_of_file_to_delete)
+ db_files = filepath_of_file_to_delete.fetchall()
+ #print("db_files.file_id")
+ #print(db_files[0][0])
+ #print("db_files.file_id")
+ os.remove(db_files[0][0])
+
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'delete_file.sql', 'r').read()
+
+ #abc = db.execute('PRAGMA FOREIGN_KEYS=ON')
+ db.execute(sql_string,[request.form['file_to_delete']])
+ db.commit()
+ flash('File data deleted from database and file deleted from Operating System!')
+ return redirect(url_for('mediaserver_file_list'))
+
+
+# save the file to the OS' hard drive
+#file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
+
+
+#Display Data - a part's details
+#@app.route('/pcparts_list/<int:pcPartId>/<pcPartType>/part_details/')
+#def part_details(pcPartId, pcPartType):
+# selected_row = get_part_details(pcPartId, pcPartType)
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+# return render_template('/pcparts/select_ssd.html', pcPartId=pcPartId, selected_row=selected_row, pcPartType=pcPartType)
+
+
+
+
+# Display Form - Add a New File
+@app.route('/mediaserver_addFile.html', methods=['GET', 'POST'])
+def mediaserver_addFiles():
+ #pcBuildList = get_pcBuildList()
+
+ return render_template('mediaserver_addFile.html')
+
+
+
+# Submit POST - Add a New File
+# This is the executive command (not browsable web page)
+@app.route('/mediaserver_addFile', methods=['GET', 'POST'])
+def add_file():
+ if not session.get('logged_in'):
+ abort(401)
+
+
+
+ if request.method == 'POST':
+ # check if the post request has the file part
+ if 'file' not in request.files:
+ flash('No file part')
+ return redirect(request.url)
+ file = request.files['file']
+ # If the user does not select a file, the browser submits an
+ # empty file without a filename.
+ if file.filename == '':
+ flash('No selected file')
+ return redirect(request.url)
+ #if file and allowed_file(file.filename):
+ if file:
+
+
+ filename = secure_filename(file.filename)
+
+ # insert file path here (also includes file name)
+ filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
+ #filepath = app.config['UPLOAD_FOLDER'] + '/'
+
+
+
+ # save the file to the OS' hard drive
+ file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
+ #Get filesize (in bytes)
+ filesize = os.path.getsize(os.path.join(app.config['UPLOAD_FOLDER'], filename))
+
+ # Need to add file and file info to sqlite database
+ db = get_db()
+ #sql_string = open('c:/Users/Joseph/Documents/GitHub/flaskr_mediaserver/sql/upload_file.sql', 'r').read()
+ sql_string = open(WORK_DIRECTORY + SQL_DIRECTORY + 'upload_file.sql', 'r').read()
+ db.execute(sql_string, [filename,
+ filepath,
+ filesize,
+ date.today()
+ ])
+ db.commit()
+ return redirect(url_for('add_file', name=filename))
+
+ else:
+ flash('File extension not supported!')
+
+ return render_template('mediaserver_addFile.html')
+
+#Submit POST - Add a New File
+#@app.route('/mediaserver_addFile', methods=['GET', 'POST'])
+#def add_file():
+# if not session.get('logged_in'):
+# abort(401)
+#
+# db = get_db()
+# sql_string = open('c:/Users/Joseph/Documents/GitHub/flaskr_mediaserver/sql/upload_file.sql', 'r').read()
+# db.execute(sql_string, [request.form['file_name'],
+# request.form['file_data']
+# ])
+# db.commit()
+#
+ #return redirect(url_for('dashboard'))
+ #return render_template('dashboard.html')
+# return render_template('mediaserver_addFile.html')
+
+
+
+
--- /dev/null
+# all the imports
+import os
+import sqlite3
+from flask import Flask, request, session, g, redirect, url_for, abort, \
+ render_template, flash
+
+""" ---------------- ---------------- App Init ---------------- ---------------- """
+# create our little application :)
+app = Flask(__name__)
+app.config.from_object(__name__)
+
+# Load default config and override config from an environment variable
+app.config.update(dict(
+ DATABASE=os.path.join(app.root_path, 'flaskr.db'),
+ SECRET_KEY='development key',
+ USERNAME='admin',
+ PASSWORD='testing'
+))
+app.config.from_envvar('FLASKR_SETTINGS', silent=True)
+
+""" ---------------- ---------------- Database Functions ---------------- ---------------- """
+def connect_db():
+ #Connects to the specific database
+ rv = sqlite3.connect(app.config['DATABASE'])
+ rv.row_factory = sqlite3.Row
+ return rv
+
+def get_db():
+ #Opens a new database connection if there is none yet for the current application context
+ if not hasattr(g, 'sqlite_db'):
+ g.sqlite_db = connect_db()
+ return g.sqlite_db
+
+@app.teardown_appcontext
+def close_db(error):
+ #Closes the database again at the end of the request
+ if hasattr(g, 'sqlite_db'):
+ g.sqlite_db.close()
+
+
+def init_db():
+ db = get_db()
+ with app.open_resource('schema.sql', mode='r') as f:
+ db.cursor().executescript(f.read())
+ #db.execute('PRAGMA FOREIGN_KEYS=ON')
+ #db.execute('PRAGMA foreign_keys = "1"')
+ db.commit()
+
+@app.cli.command('initdb')
+def initdb_command():
+ #Initializes the database
+ init_db()
+ print 'Initialized the database.'
+
+
+""" ---------------- ---------------- General Functions ---------------- ---------------- """
+#Login
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+ error = None
+ if request.method == 'POST':
+ if request.form['username'] != app.config['USERNAME']:
+ error = 'Invalid username'
+ elif request.form['password'] != app.config['PASSWORD']:
+ error = 'Invalid password'
+ else:
+ session['logged_in'] = True
+ flash('You were logged in')
+
+ return redirect(url_for('item_list'))
+ return render_template('login.html', error=error)
+
+#Logout
+@app.route('/logout')
+def logout():
+ session.pop('logged_in', None)
+ flash('You were logged out')
+ return redirect(url_for('item_list'))
+
+#Upload
+@app.route("/upload", methods=["POST"])
+def upload():
+ uploaded_files = flask.request.files.getlist("file[]")
+ print uploaded_files
+ return ""
+
+#Get row count of a table
+def get_next_row(currentTable):
+ sql_string = open('sql/select_row_count.sql', 'r').read()
+ sql_string = sql_string.replace("currentTable", currentTable)
+ db = get_db()
+ cur = db.execute(sql_string)
+ row_count = cur.fetchone()
+ return row_count
+
+""" ---------------- ---------------- Main Routes ---------------- ---------------- """
+#Display Data - Dashboard
+@app.route('/')
+def dashboard():
+ return render_template('dashboard.html')
+
+""" ---------------- ---------------- List Parts ---------------- ---------------- """
+#Select all parts and display webpage
+@app.route('/pcparts_list')
+def pcparts_list():
+ sql_string = open('sql/select_all_pcparts.sql', 'r').read()
+ db = get_db()
+ cur = db.execute(sql_string)
+ items = cur.fetchall()
+ abc = db.execute('PRAGMA foreign_keys')
+ abcX = abc.fetchall()
+ print "FOREIGN KEY STATUS:"
+ print abcX
+ print "-----------------------"
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ abc = db.execute('PRAGMA foreign_keys')
+ abcY = abc.fetchall()
+ print "FOREIGN KEY STATUS:"
+ print abcY
+ print "-----------------------"
+ #Display the page
+ # items ==> list of columns and respective rows for all PC parts
+ return render_template('pcparts_list.html', items=items)
+
+
+#Select all builds and display webpage
+@app.route('/pcparts_listBuilds')
+def pcparts_listBuilds():
+ #Select all builds
+ pcBuildList = get_pcBuildList()
+ #Display the page
+ # pcBuildList ==> list of columns and respective rows for all PC builds
+ return render_template('pcparts_listBuilds.html', pcBuildList=pcBuildList)
+
+#Get a part
+def get_part(pcPartId):
+ sql_string = open('sql/select_part.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute(sql_string, [pcPartId])
+ part_row = cur.fetchone()
+ #Return row of part details
+ return part_row
+
+
+#Get a part's details
+def get_part_details(pcPartId, pcPartType):
+ sql_string = open('sql/select_part_details.sql', 'r').read()
+ sql_string = sql_string.replace("tableName", pcPartType)
+ print "sql_string"
+ print sql_string
+ print "sql_string"
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute(sql_string, [pcPartId])
+ part_details_row = cur.fetchone()
+ #Return row of part details
+ return part_details_row
+
+#Display Data - a part's details
+@app.route('/pcparts_list/<int:pcPartId>/<pcPartType>/part_details/')
+def part_details(pcPartId, pcPartType):
+ selected_row = get_part_details(pcPartId, pcPartType)
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+ return render_template('/pcparts/select_ssd.html', pcPartId=pcPartId, selected_row=selected_row, pcPartType=pcPartType)
+
+def fetch_parts():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+
+ #Fetch Mobo List
+ sql_string = open('sql/select_moboList.sql', 'r').read()
+ result = db.execute(sql_string)
+ moboList = result.fetchall()
+
+ #Fetch Case List
+ sql_string = open('sql/select_caseList.sql', 'r').read()
+ result = db.execute(sql_string)
+ caseList = result.fetchall()
+
+ #Fetch PSU List
+ sql_string = open('sql/select_psuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ psuList = result.fetchall()
+
+ #Fetch RAM List
+ sql_string = open('sql/select_ramList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ramList = result.fetchall()
+
+ #Fetch GPU List
+ sql_string = open('sql/select_gpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ gpuList = result.fetchall()
+
+ #Fetch SSD List
+ sql_string = open('sql/select_ssdList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ssdList = result.fetchall()
+
+ #Fetch HDD List
+ sql_string = open('sql/select_hddList.sql', 'r').read()
+ result = db.execute(sql_string)
+ hddList = result.fetchall()
+
+ #Fetch CPU List
+ sql_string = open('sql/select_cpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuList = result.fetchall()
+
+ #Fetch CPU Cooling List
+ sql_string = open('sql/select_cpuCoolList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuCoolList = result.fetchall()
+
+ #Fetch Fan List
+ sql_string = open('sql/select_fanList.sql', 'r').read()
+ result = db.execute(sql_string)
+ fanList = result.fetchall()
+
+ #Fetch LED Kit List
+ sql_string = open('sql/select_ledkitList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ledkitList = result.fetchall()
+
+ #Fetch OS List
+ sql_string = open('sql/select_osList.sql', 'r').read()
+ result = db.execute(sql_string)
+ osList = result.fetchall()
+
+ dataList = []
+ dataList.append(moboList)
+ dataList.append(caseList)
+ dataList.append(psuList)
+ dataList.append(ramList)
+ dataList.append(gpuList)
+ dataList.append(ssdList)
+ dataList.append(hddList)
+ dataList.append(cpuList)
+ dataList.append(cpuCoolList)
+ dataList.append(fanList)
+ dataList.append(ledkitList)
+ dataList.append(osList)
+
+ return dataList
+
+
+
+#
+#
+# check out ebay API
+# check out ebay API
+# check out ebay API
+# check out ebay API
+#
+#
+""" ---------------- ---------------- PC Builds ---------------- ----------------"""
+""" ---------------- Add PC Build ----------------"""
+#Display Form - Add a New Build
+@app.route('/pcparts_addBuild.html', methods=['GET', 'POST'])
+def pcparts_addBuild():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+
+ #Fetch Mobo List
+ sql_string = open('sql/select_moboList.sql', 'r').read()
+ result = db.execute(sql_string)
+ moboList = result.fetchall()
+
+ #Fetch Case List
+ sql_string = open('sql/select_caseList.sql', 'r').read()
+ result = db.execute(sql_string)
+ caseList = result.fetchall()
+
+ #Fetch PSU List
+ sql_string = open('sql/select_psuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ psuList = result.fetchall()
+
+ #Fetch RAM List
+ sql_string = open('sql/select_ramList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ramList = result.fetchall()
+
+ #Fetch GPU List
+ sql_string = open('sql/select_gpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ gpuList = result.fetchall()
+
+ #Fetch SSD List
+ sql_string = open('sql/select_ssdList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ssdList = result.fetchall()
+
+ #Fetch HDD List
+ sql_string = open('sql/select_hddList.sql', 'r').read()
+ result = db.execute(sql_string)
+ hddList = result.fetchall()
+
+ #Fetch CPU List
+ sql_string = open('sql/select_cpuList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuList = result.fetchall()
+
+ #Fetch CPU Cooling List
+ sql_string = open('sql/select_cpuCoolList.sql', 'r').read()
+ result = db.execute(sql_string)
+ cpuCoolList = result.fetchall()
+
+ #Fetch Fan List
+ sql_string = open('sql/select_fanList.sql', 'r').read()
+ result = db.execute(sql_string)
+ fanList = result.fetchall()
+
+ #Fetch LED Kit List
+ sql_string = open('sql/select_ledkitList.sql', 'r').read()
+ result = db.execute(sql_string)
+ ledkitList = result.fetchall()
+
+ #Fetch OS List
+ sql_string = open('sql/select_osList.sql', 'r').read()
+ result = db.execute(sql_string)
+ osList = result.fetchall()
+
+ return render_template('pcparts_addBuild.html', moboList=moboList,
+ caseList=caseList,
+ psuList=psuList,
+ ramList=ramList,
+ gpuList=gpuList,
+ ssdList=ssdList,
+ hddList=hddList,
+ cpuList=cpuList,
+ cpuCoolList=cpuCoolList,
+ fanList=fanList,
+ ledkitList=ledkitList,
+ osList=osList)
+
+def get_pcBuildList():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute('SELECT * FROM pcBuild')
+ pcBuildList = cur.fetchall()
+ return pcBuildList
+
+#Submit POST - Add a New Build
+@app.route('/pcpart_add_build', methods=['GET', 'POST'])
+def add_build():
+ if not session.get('logged_in'):
+ abort(401)
+ sql_string = open('sql/insert_build.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string, [request.form['pcBuild_name'],
+ request.form['pcBuild_type'],
+ request.form['pcBuild_notes'],
+ request.form['pcBuild_avgPartAge'],
+ request.form['pcBuild_mobo_id'],
+ request.form['pcBuild_case_id'],
+ request.form['pcBuild_ram_id'],
+ request.form['pcBuild_gpu_id'],
+ request.form['pcBuild_ssd_id'],
+ request.form['pcBuild_hdd_id'],
+ request.form['pcBuild_cpu_id'],
+ request.form['pcBuild_psu_id'],
+ request.form['pcBuild_cpuCool_id'],
+ request.form['pcBuild_fan_id'],
+ request.form['pcBuild_ledkit_id'],
+ request.form['pcBuild_os_id'],
+ request.form['pcBuild_colorScheme']])
+ db.commit()
+
+ return redirect(url_for('pcparts_listBuilds'))
+
+
+""" ---------------- ---------------- Add Part ---------------- ----------------"""
+""" ---------------- Add Part - Generic ----------------"""
+#Display Form - Add a New Part
+@app.route('/pcparts_addPart.html', methods=['GET', 'POST'])
+def pcparts_addPart():
+ pcBuildList = get_pcBuildList()
+
+ return render_template('pcparts_addPart.html', pcBuildList=pcBuildList)
+
+#Submit POST - Add a New Part
+@app.route('/pcpart_add_part', methods=['GET', 'POST'])
+def add_part():
+ if not session.get('logged_in'):
+ abort(401)
+
+ sql_string = open('sql/insert_part.sql', 'r').read()
+ request_string = ""
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string, [request.form['pcPart_type'],
+ request.form['pcPart_name'],
+ request.form['pcPart_modelNumber'],
+ request.form['pcPart_price'],
+ request.form['pcPart_desc'],
+ request.form['pcPart_brand'],
+ request.form['pcPart_condition'],
+ request.form['pcPart_notes'],
+ request.form['pcPart_age'],
+ request.form['pcPart_pcBuild_id']])
+ db.commit()
+
+ #return redirect(url_for('pcparts_addPart_ssd'))
+ return redirect(url_for('display_addPart_details'))
+
+""" ---------------- Add Part - Specific ----------------"""
+
+#Display Form - Add Part Details - Generic
+@app.route('/display_addPart_details.html', methods=['GET', 'POST'])
+def display_addPart_details():
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute('SELECT max(pcPart_id) FROM pcPart')
+ maxRowCount = cur.fetchall()
+ currentPart = maxRowCount[0][0]
+ print "currentPart"
+ print currentPart
+ print "currentPart"
+ sql_string = "SELECT pcPart_type FROM pcPart WHERE pcPart_id = currentPart"
+ print "sql_string"
+ print sql_string
+ print "sql_string"
+ sql_string = sql_string.replace("currentPart", str(currentPart))
+ get_partType = db.execute(sql_string)
+ partTypeX = get_partType.fetchone()
+ partType = partTypeX[0]
+ print "partType"
+ print partType
+ print "partType"
+ return render_template('display_addPart_details.html', currentPart=currentPart, partType=partType)
+
+#
+#
+# return render_template('display_addPart_details.html', currentPart=currentPart, partType=partType,
+# moboList=dataList[0], caseList=dataList[1], psuList=dataList[2],
+# ramList=dataList[3], gpuList=dataList[4], ssdList=dataList[5],
+# hddList=dataList[6], cpuList=dataList[7], cpuCoolList=dataList[8],
+# fanList=dataList[9], ledkitList=dataList[10], osList=dataList[11]
+#
+#
+
+
+#Submit POST - Add a New Part Details - Generic
+@app.route('/pcpart/add_part_details', methods=['POST'])
+def add_part_details():
+ if not session.get('logged_in'):
+ abort(401)
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ #SSD
+ print "request.form['pc_part_id'] "
+ print request.form['pc_part_id']
+ print "request.form['pc_part_id'] "
+ if request.form['part_type'] == "ssd":
+ sql_string = open('sql/insert_ssd.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['ssd_formFactor'],
+ request.form['ssd_size'],
+ request.form['ssd_interface'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #RAM
+ elif request.form['part_type'] == "ram":
+ sql_string = open('sql/insert_ram.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['ram_kitSize'],
+ request.form['ram_stickSize'],
+ request.form['ram_speed'],
+ request.form['ram_type'],
+ request.form['ram_casLatency'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #HDD
+ elif request.form['part_type'] == "hdd":
+ sql_string = open('sql/insert_hdd.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['hdd_formFactor'],
+ request.form['hdd_size'],
+ request.form['hdd_interface'],
+ request.form['hdd_cache'],
+ request.form['hdd_rpm'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #CASE
+ elif request.form['part_type'] == "case":
+ sql_string = open('sql/insert_case.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['case_formFactor'],
+ request.form['case_width'],
+ request.form['case_height'],
+ request.form['case_length'],
+ request.form['case_525bay'],
+ request.form['case_350bay'],
+ request.form['case_250bay'],
+ request.form['case_80fan'],
+ request.form['case_120fan'],
+ request.form['case_140fan'],
+ request.form['case_240fan'],
+ request.form['case_otherFan'],
+ request.form['case_fpSpk'],
+ request.form['case_fpMic'],
+ request.form['case_fpUSB3'],
+ request.form['case_fpUSB2'],
+ request.form['case_psuSlots'],
+ request.form['case_waterSlots'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #GPU
+ elif request.form['part_type'] == "gpu":
+ sql_string = open('sql/insert_gpu.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['gpu_vramType'],
+ request.form['gpu_vramSize'],
+ request.form['gpu_slotWidth'],
+ request.form['gpu_interface'],
+ request.form['gpu_6pin'],
+ request.form['gpu_8pin'],
+ request.form['gpu_clockSpeed'],
+ request.form['gpu_memClockSpeed'],
+ request.form['gpu_busBandwidth'],
+ request.form['gpu_crossfire'],
+ request.form['gpu_sli'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #PSU
+ elif request.form['part_type'] == "psu":
+ sql_string = open('sql/insert_psu.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['psu_watt'],
+ request.form['psu_effiency'],
+ request.form['psu_8pin'],
+ request.form['psu_6pin'],
+ request.form['psu_4pin'],
+ request.form['psu_molex'],
+ request.form['psu_sata'],
+ request.form['psu_floppy'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #OS
+ elif request.form['part_type'] == "os":
+ sql_string = open('sql/insert_os.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['os_type'],
+ request.form['os_bit'],
+ request.form['os_version'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #CPU Cooler
+ elif request.form['part_type'] == "cpuCool":
+ sql_string = open('sql/insert_cpuCool.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['cpuCool_type'],
+ request.form['cpuCool_socketList'],
+ request.form['cpuCool_fanCount'],
+ request.form['cpuCool_fanSize'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #Motherboard
+ elif request.form['part_type'] == "mobo":
+ sql_string = open('sql/insert_mobo.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['mobo_ramType'],
+ request.form['mobo_CPUsocket'],
+ request.form['mobo_dimmSlots'],
+ request.form['mobo_pciSlots'],
+ request.form['mobo_pcie16Slots'],
+ request.form['mobo_pcie8Slots'],
+ request.form['mobo_pcie4Slots'],
+ request.form['mobo_pcie1Slots'],
+ request.form['mobo_chipset'],
+ request.form['mobo_cpu4pin'],
+ request.form['mobo_cpu8pin'],
+ request.form['mobo_cpu6pin'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #Fan
+ elif request.form['part_type'] == "fan":
+ sql_string = open('sql/insert_fan.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['fan_size'],
+ request.form['fan_type'],
+ request.form['fan_color'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #LED Kit
+ elif request.form['part_type'] == "ledkit":
+ sql_string = open('sql/insert_ledkit.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['ledkit_color'],
+ request.form['ledkit_type'],
+ request.form['ledkit_notes'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ #Processor
+ elif request.form['part_type'] == "cpu":
+ sql_string = open('sql/insert_cpu.sql', 'r').read()
+ db.execute(sql_string,
+ [request.form['cpu_socket'],
+ request.form['cpu_cores'],
+ request.form['cpu_threads'],
+ request.form['cpu_frequency'],
+ request.form['cpu_cache'],
+ request.form['cpu_wattage'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('pcparts_list'))
+ else:
+ pass
+
+#Display Form - Add Part Details - SSD
+@app.route('/pcparts_add_ssd.html', methods=['GET', 'POST'])
+def pcparts_addPart_ssd():
+ currentTable = "pcPart"
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ cur = db.execute('SELECT max(pcPart_id) FROM pcPart')
+ maxRowCount = cur.fetchall()
+ currentPart = maxRowCount[0][0]
+ return render_template('pcparts_addPart_ssd.html', currentPart=currentPart)
+
+#Submit POST - Add a New Part Details - SSD
+@app.route('/pcpart/add_ssd', methods=['POST'])
+def add_ssd():
+ if not session.get('logged_in'):
+ abort(401)
+ sql_string = open('sql/insert_ssd.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string,
+ [request.form['ssd_formFactor'],
+ request.form['ssd_size'],
+ request.form['ssd_interface'],
+ request.form['pc_part_id']])
+ db.commit()
+ flash('New part was added to database!')
+ return redirect(url_for('dashboard'))
+
+
+""" ---------------- ---------------- Update Part ---------------- ----------------"""
+#Display Form - Update a part
+@app.route('/pcparts/updatePart.html/', methods=['GET', 'POST'])
+def display_update_part():
+ sql_string = open('sql/update_part.sql', 'r').read()
+ #db = get_db()
+ #db.execute('PRAGMA FOREIGN_KEYS=ON')
+ selected_row = get_part(request.form['part_to_update'])
+ #partId_to_update = request.form['part_to_update']
+ #Display the page
+ # partId_to_update ==> current part id to update
+ # selected_row ==> the part's details
+ return render_template('/pcparts/updatePart.html', selected_row=selected_row)
+
+
+#Submit POST - Update a Part
+@app.route('/pcparts/update_part', methods=['GET', 'POST'])
+def update_part():
+ if not session.get('logged_in'):
+ abort(401)
+ sql_string = open('sql/update_part.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA foreign_keys=ON')
+ db.execute(sql_string,[request.form['pcPart_type'], request.form['pcPart_name'], request.form['pcPart_modelNumber'], request.form['pcPart_price'], request.form['pcPart_desc'], request.form['pcPart_brand'], request.form['pcPart_condition'], request.form['pcPart_notes'], request.form['pcPart_age'], request.form['pcPart_id']])
+ db.commit()
+ flash('Part successfully updated!')
+ return redirect(url_for('display_update_part_details', pcPartId=int(request.form['pcPart_id'])))
+
+
+#Display Form - Update a part's details
+@app.route('/pcparts/<int:pcPartId>/update_part_details.html', methods=['GET', 'POST'])
+def display_update_part_details(pcPartId):
+ selected_row = get_part_details(pcPartId)
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+ return render_template('/pcparts/updatePart_details.html', selected_row=selected_row)
+
+#Submit POST - Update a Part's Details
+@app.route('/pcparts/update_part_details/', methods=['GET', 'POST'])
+def update_part_details():
+ sql_string = open('sql/update_part_ssd.sql', 'r').read()
+ #sql_string = sql_string.replace("pcPart_id", str(pcPartId))
+ #part_table = "ssd"
+ db = get_db()
+ db.execute('PRAGMA FOREIGN_KEYS=ON')
+ db.execute(sql_string,[ request.form['ssd_formFactor'],
+ request.form['ssd_size'],
+ request.form['ssd_interface'],
+ request.form['ssd_pcPart_id']])
+ #Display the page
+ # pcPartId ==> current part id
+ # selected_row ==> the part's details
+ db.commit()
+ flash('Part details successfully updated!')
+ #return render_template('pcparts_list.html')
+ return pcparts_list()
+
+""" ---------------- ---------------- Delete Part ---------------- ----------------"""
+@app.route('/delete_part', methods=['POST'])
+def delete_part():
+ sql_string = open('sql/delete_part.sql', 'r').read()
+ db = get_db()
+ abc = db.execute('PRAGMA FOREIGN_KEYS=ON')
+ db.execute(sql_string,[request.form['part_to_delete']])
+ db.commit()
+ flash('Part deleted from database!')
+ return redirect(url_for('pcparts_list'))
+
+
+""" ---------------- ---------------- List PC Parts ---------------- ---------------- """
+@app.route('/pcparts/pcparts_ram')
+def pcparts_ram():
+ return render_template('pcparts_ram.html')
+
+@app.route('/pcparts/list_pcparts_ssd')
+def list_pcparts_ssd():
+ return render_template('list_pcparts_ssd.html')
+
+@app.route('/pcparts/pcparts_hdd')
+def pcparts_hdd():
+ return render_template('pcparts_hdd.html')
+
+@app.route('/pcparts/pcparts_case')
+def pcparts_case():
+ return render_template('pcparts_case.html')
+
+@app.route('/pcparts/pcparts_gpu')
+def pcparts_gpu():
+ return render_template('pcparts_gpu.html')
+
+@app.route('/pcparts/pcparts_psu')
+def pcparts_psu():
+ return render_template('pcparts_psu.html')
+
+@app.route('/pcparts/pcparts_os')
+def pcparts_os():
+ return render_template('pcparts_os.html')
+
+@app.route('/pcparts/pcparts_cpuCool')
+def pcparts_cpuCool():
+ return render_template('pcparts_cpuCool.html')
+
+@app.route('/pcparts/pcparts_mobo')
+def pcparts_mobo():
+ return render_template('pcparts_mobo.html')
+
+@app.route('/pcparts/pcparts_fan')
+def pcparts_fan():
+ return render_template('pcparts_fan.html')
+
+@app.route('/pcparts/pcparts_ledkit')
+def pcparts_ledkit():
+ return render_template('pcparts_ledkit.html')
+
+@app.route('/pcparts/pcparts_cpu')
+def pcparts_cpu():
+ return render_template('pcparts_cpu.html')
+
+#def pcparts_ssd():
+ #print "OOOOOOOOOOOOOOOOOOOOOO"
+ #print selected_row
+ #print "OOOOOOOOOOOOOOOOOOOOOO"
+ #print "PC PART ID: " + str(pcPartId) + " ---"
+ #sql_string = open('select_ssd.sql', 'r').read()
+ #sql_string = sql_string.replace("pcPart_id", str(pcPartId))
+ #db = get_db()
+ #cur = db.execute(sql_string, [pcPartId])
+ #items = cur.fetchall()
+
+
+""" ---------------- ---------------- List Items ---------------- ---------------- """
+#Display Data - List All Items
+@app.route('/item_list')
+def item_list():
+ sql_string = open('sql/select_all_items.sql', 'r').read()
+ db = get_db()
+ cur = db.execute(sql_string)
+ items = cur.fetchall()
+ return render_template('item_list.html', items=items)
+
+#Display Form - Add Item
+@app.route('/add_item')
+def add_item():
+ return render_template('add_item.html')
+
+#Submit POST - Add Item
+@app.route('/add', methods=['POST'])
+def submit_item():
+ if not session.get('logged_in'):
+ abort(401)
+ db = get_db()
+ db.execute('insert into item (item_name, item_subtitle, \
+ item_desc, item_category, item_condition, item_conditionDesc, item_cost) \
+ values (?, ?, ?, ?, ?, ?, ?)',
+ [request.form['item_name'],
+ request.form['item_subtitle'],
+ request.form['item_desc'],
+ request.form['item_category'],
+ request.form['item_condition'],
+ request.form['item_conditionDesc'],
+ request.form['item_cost']])
+ db.commit()
+ flash('New item was added to database!')
+ return redirect(url_for('item_list'))
+
+
+
+
--- /dev/null
+--Users table
+drop table if exists user;
+create table user (
+ user_id integer primary key autoincrement,
+ user_name text not null,
+ user_password text not null
+);
+--Basic info about an item
+drop table if exists item;
+create table item (
+ item_id integer primary key autoincrement,
+ item_name text,
+ item_subtitle text,
+ item_desc text,
+ item_category text,
+ item_condition text,
+ item_conditionDesc text,
+ item_cost numeric,
+ item_returnPolicyDesc text,
+ item_insertDate datetime
+);
+
+
+--File Upload/Download Data
+drop table if exists file;
+create table file (
+ file_id integer primary key autoincrement,
+ file_name text,
+ file_path text,
+ file_size numeric,
+ file_today_date text
+);
+--Settings Data
+drop table if exists settings;
+create table settings (
+ settings_id integer primary key autoincrement,
+ settings_uploadFilePath text
+);
+
+INSERT INTO settings (settings_uploadFilePath) VALUES ('c:/Users/Joseph/Downloads/Media_Server_Upload');
+
+
+
+--Item Condition for a particular item
+drop table if exists itemCondition;
+create table itemCondition (
+ itemCondition_id integer primary key autoincrement,
+ itemCondition_name text
+);
+--Shipping info for a particular item
+drop table if exists itemShipping;
+create table itemShipping (
+ itemShipping_id integer primary key autoincrement,
+ itemShipping_method text,
+ itemShipping_weight numeric,
+ itemShipping_boxType text,
+ itemShipping_boxWidth numeric,
+ itemShipping_boxHeight numeric,
+ itemShipping_boxLength numeric,
+ itemShipping_handlingDuration datetime,
+ itemShipping_itemLocation text,
+ itemShipping_item_id integer,
+ FOREIGN KEY(itemShipping_item_id) REFERENCES item(item_id)
+);
+--Pictures for a particular item
+drop table if exists itemPicture;
+create table itemPicture (
+ itemPicture_id integer primary key autoincrement,
+ itemPicture_data blob,
+ itemPicture_caption text,
+ itemPicture_item_id integer,
+ FOREIGN KEY(itemPicture_item_id) REFERENCES item(item_id)
+);
+--Metrics for a particular item (will need to allow for adding new specs on the fly)
+drop table if exists itemSpecs;
+create table itemSpecs (
+ itemSpecs_id integer primary key autoincrement,
+ itemSpecs_name text,
+ itemSpecs_value text,
+ itemSpecs_item_id integer,
+ FOREIGN KEY(itemSpecs_item_id) REFERENCES item(item_id)
+);
+--Ebay-specific Item Data
+drop table if exists itemEbay;
+create table itemEbay (
+ itemEbay_id integer primary key autoincrement,
+ itemEbay_bid text,
+ itemEbay_buyItNow numeric,
+ itemEbay_reservePrice numeric,
+ itemEbay_fpQuantity integer,
+ itemEbay_fpBestOffer numeric,
+ itemEbay_fpMin numeric,
+ itemEbay_fpMax numeric,
+ itemEbay_duration datetime,
+ itemEbay_insertionFee numeric,
+ itemEbay_tax numeric,
+ itemEbay_item_id integer,
+ FOREIGN KEY(itemEbay_item_id) REFERENCES item(item_id)
+);
+--Table of PC Builds
+drop table if exists pcBuild;
+create table pcBuild (
+ pcBuild_id integer primary key autoincrement,
+ pcBuild_name text,
+ pcBuild_type text,
+ pcBuild_notes text,
+ pcBuild_avgPartAge numeric,
+ pcBuild_mobo_id integer,
+ pcBuild_case_id integer,
+ pcBuild_ram_id integer,
+ pcBuild_gpu_id integer,
+ pcBuild_ssd_id integer,
+ pcBuild_hdd_id integer,
+ pcBuild_cpu_id integer,
+ pcBuild_psu_id integer,
+ pcBuild_cpuCool_id integer,
+ pcBuild_fan_id integer,
+ pcBuild_ledkit_id integer,
+ pcBuild_os_id integer,
+ pcBuild_colorScheme text
+);
+--General PC Part Info
+drop table if exists pcPart;
+create table pcPart (
+ pcPart_id integer primary key autoincrement,
+ pcPart_type text,
+ pcPart_name text,
+ pcPart_modelNumber text,
+ pcPart_price numeric,
+ pcPart_desc text,
+ pcPart_brand text,
+ pcPart_condition text,
+ pcPart_notes text,
+ pcPart_age integer,
+ pcPart_pcBuild_id integer
+);
+--RAM Part-Specific Info
+drop table if exists ram;
+create table ram (
+ ram_id integer primary key autoincrement,
+ ram_kitSize text,
+ ram_stickSize integer,
+ ram_speed integer,
+ ram_type text,
+ ram_casLatency text,
+ ram_pcPart_id integer,
+ FOREIGN KEY(ram_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Solid State Drive Part-Specific Info
+drop table if exists ssd;
+create table ssd (
+ ssd_id integer primary key autoincrement,
+ ssd_formFactor text,
+ ssd_size integer,
+ ssd_interface text,
+ ssd_pcPart_id integer,
+ FOREIGN KEY(ssd_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+
+--HDD Part-Specific Info
+drop table if exists hdd;
+create table hdd (
+ hdd_id integer primary key autoincrement,
+ hdd_formFactor text,
+ hdd_size integer,
+ hdd_interface text,
+ hdd_cache integer,
+ hdd_rpm integer,
+ hdd_pcPart_id integer,
+ FOREIGN KEY(hdd_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Case Part-Specific Info
+drop table if exists cases;
+create table cases (
+ case_id integer primary key autoincrement,
+ case_formFactor text,
+ case_width numeric,
+ case_height numeric,
+ case_length numeric,
+ case_525bay integer,
+ case_350bay integer,
+ case_250bay integer,
+ case_80fan integer,
+ case_120fan integer,
+ case_140fan integer,
+ case_240fan integer,
+ case_otherFan text,
+ case_fpSpk integer,
+ case_fpMic integer,
+ case_fpUSB3 integer,
+ case_fpUSB2 integer,
+ case_psuSlots integer,
+ case_waterSlots text,
+ case_pcPart_id integer,
+ FOREIGN KEY(case_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Video Card Part-Specific Info
+drop table if exists gpu;
+create table gpu (
+ gpu_id integer primary key autoincrement,
+ gpu_vramType text,
+ gpu_vramSize text,
+ gpu_slotWidth text,
+ gpu_interface text,
+ gpu_6pin integer,
+ gpu_8pin integer,
+ gpu_clockSpeed numeric,
+ gpu_memClockSpeed numeric,
+ gpu_busBandwidth numeric,
+ gpu_crossfire integer,
+ gpu_sli integer,
+ gpu_pcPart_id integer,
+ FOREIGN KEY(gpu_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Power Supply Part-Specific Info
+drop table if exists psu;
+create table psu (
+ psu_id integer primary key autoincrement,
+ psu_watt integer,
+ psu_effiency text,
+ psu_8pin integer,
+ psu_6pin integer,
+ psu_4pin integer,
+ psu_molex integer,
+ psu_sata integer,
+ psu_floppy integer,
+ psu_pcPart_id integer,
+ FOREIGN KEY(psu_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Operating System Part-Specific Info
+drop table if exists os;
+create table os (
+ os_id integer primary key autoincrement,
+ os_type text,
+ os_bit integer,
+ os_version text,
+ os_pcPart_id integer,
+ FOREIGN KEY(os_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--CPU Cooler Part-Specific Info
+drop table if exists cpuCool;
+create table cpuCool (
+ cpuCool_id integer primary key autoincrement,
+ cpuCool_type text,
+ cpuCool_socketList text,
+ cpuCool_fanCount integer,
+ cpuCool_fanSize text,
+ cpuCool_pcPart_id integer,
+ FOREIGN KEY(cpuCool_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Motherboard Part-Specific Info
+drop table if exists mobo;
+create table mobo (
+ mobo_id integer primary key autoincrement,
+ mobo_ramType text,
+ mobo_CPUsocket text,
+ mobo_dimmSlots integer,
+ mobo_pciSlots integer,
+ mobo_pcie16Slots integer,
+ mobo_pcie8Slots integer,
+ mobo_pcie4Slots integer,
+ mobo_pcie1Slots integer,
+ mobo_chipset text,
+ mobo_cpu4pin integer,
+ mobo_cpu8pin integer,
+ mobo_cpu6pin integer,
+ mobo_pcPart_id integer,
+ FOREIGN KEY(mobo_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--Case Fans Part-Specific Info
+drop table if exists fan;
+create table fan (
+ fan_id integer primary key autoincrement,
+ fan_size integer,
+ fan_type text,
+ fan_color text,
+ fan_pcPart_id integer,
+ FOREIGN KEY(fan_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--LED Kits Part-Specific Info
+drop table if exists ledkit;
+create table ledkit (
+ ledkit_id integer primary key autoincrement,
+ ledkit_color text,
+ ledkit_type text,
+ ledkit_notes text,
+ ledkit_pcPart_id integer,
+ FOREIGN KEY(ledkit_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+--CPU Part-Specific Info
+drop table if exists cpu;
+create table cpu (
+ cpu_id integer primary key autoincrement,
+ cpu_socket text,
+ cpu_cores integer,
+ cpu_threads integer,
+ cpu_frequency numeric,
+ cpu_cache integer,
+ cpu_wattage integer,
+ cpu_pcPart_id integer,
+ FOREIGN KEY(cpu_pcPart_id) REFERENCES pcPart(pcPart_id) ON DELETE CASCADE
+);
+
+
+
+--Benchmark general data for a particular PC
+drop table if exists pcBenchmark;
+create table pcBenchmark (
+ pcBenchmark_id integer primary key autoincrement,
+ pcBenchmark_notes text,
+ pcBenchmark_score text,
+ pcBenchmark_fps text,
+ pcBenchmark_pcBuild_id integer,
+ FOREIGN KEY(pcBenchmark_pcBuild_id) REFERENCES pcBuild(pcBuild_id)
+);
+
+--Picture storage for a particular PC's benchmarks
+drop table if exists pcBenchmarkPictures;
+create table pcBenchmarkPictures (
+ pcBenchmarkPictures_id integer primary key autoincrement,
+ pcBenchmarkPictures_data blob,
+ pcBenchmarkPictures_pcBenchmark_id integer,
+ FOREIGN KEY(pcBenchmarkPictures_pcBenchmark_id) REFERENCES pcBenchmark(pcBenchmark_id)
+);
+
+--List of applications / games available for selection
+drop table if exists benchmarkAppList;
+create table benchmarkAppList (
+ benchmarkAppList_id integer primary key autoincrement,
+ --Type: either game or non-game
+ benchmarkAppList_type text,
+ benchmarkAppList_name text,
+ benchmarkAppList_desc text
+);
+
+
+
+INSERT INTO user
+ (user_name,
+ user_password)
+ VALUES ("admin",
+ "testing");
+/* INSERT INTO pcPart
+ (pcPart_type,
+ pcPart_name,
+ pcPart_modelNumber)
+ VALUES ("psu",
+ "Antec 500W",
+ "AN500W");
+INSERT INTO psu
+ (psu_watt,
+ psu_effiency,
+ psu_pcPart_id)
+ VALUES (500,
+ "80plus",
+ 1);
+
+
+INSERT INTO pcPart
+ (pcPart_type,
+ pcPart_name,
+ pcPart_modelNumber)
+ VALUES ("psu",
+ "Thermaltake 750W",
+ "TT750W");
+INSERT INTO psu
+ (psu_watt,
+ psu_effiency,
+ psu_pcPart_id)
+ VALUES (750,
+ "titanium",
+ 2);
+
+INSERT INTO pcBuild
+ (pcBuild_name,
+ pcBuild_type,
+ pcBuild_ssd_id)
+ VALUES ("Test PC Build",
+ "Gaming",
+ 1); */
+
+
\ No newline at end of file
--- /dev/null
+DELETE FROM file
+ WHERE file_id = ?
\ No newline at end of file
--- /dev/null
+DELETE FROM pcPart
+ WHERE pcPart_id = ?
\ No newline at end of file
--- /dev/null
+DELETE FROM settings
\ No newline at end of file
--- /dev/null
+INSERT INTO pcBuild
+ (
+ pcBuild_name,
+ pcBuild_type,
+ pcBuild_notes,
+ pcBuild_avgPartAge,
+ pcBuild_mobo_id,
+ pcBuild_case_id,
+ pcBuild_ram_id,
+ pcBuild_gpu_id,
+ pcBuild_ssd_id,
+ pcBuild_hdd_id,
+ pcBuild_cpu_id,
+ pcBuild_psu_id,
+ pcBuild_cpuCool_id,
+ pcBuild_fan_id,
+ pcBuild_ledkit_id,
+ pcBuild_os_id,
+ pcBuild_colorScheme
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO cases
+ (
+ case_formFactor,
+ case_width,
+ case_height,
+ case_length,
+ case_525bay,
+ case_350bay,
+ case_250bay,
+ case_80fan,
+ case_120fan,
+ case_140fan,
+ case_240fan,
+ case_otherFan,
+ case_fpSpk,
+ case_fpMic,
+ case_fpUSB3,
+ case_fpUSB2,
+ case_psuSlots,
+ case_waterSlots,
+ case_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO cpu
+ (
+ cpu_socket,
+ cpu_cores,
+ cpu_threads,
+ cpu_frequency,
+ cpu_cache,
+ cpu_wattage,
+ cpu_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO cpuCool
+ (
+ cpuCool_type,
+ cpuCool_socketList,
+ cpuCool_fanCount,
+ cpuCool_fanSize,
+ cpuCool_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO fan
+ (
+ fan_size,
+ fan_type,
+ fan_color,
+ fan_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO gpu
+ (
+ gpu_vramType,
+ gpu_vramSize,
+ gpu_slotWidth,
+ gpu_interface,
+ gpu_6pin,
+ gpu_8pin,
+ gpu_clockSpeed,
+ gpu_memClockSpeed,
+ gpu_busBandwidth,
+ gpu_crossfire,
+ gpu_sli,
+ gpu_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO hdd
+ (
+ hdd_formFactor,
+ hdd_size,
+ hdd_interface,
+ hdd_cache,
+ hdd_rpm,
+ hdd_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO ledkit
+ (
+ ledkit_color,
+ ledkit_type,
+ ledkit_notes,
+ ledkit_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO mobo
+ (
+ mobo_ramType,
+ mobo_CPUsocket,
+ mobo_dimmSlots,
+ mobo_pciSlots,
+ mobo_pcie8Slots,
+ mobo_pcie4Slots,
+ mobo_pcie1Slots,
+ mobo_chipset,
+ mobo_cpu4pin,
+ mobo_cpu8pin,
+ mobo_cpu6pin,
+ mobo_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO os
+ (
+ os_type,
+ os_bit,
+ os_version,
+ os_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO pcPart
+ (
+ pcPart_type,
+ pcPart_name,
+ pcPart_modelNumber,
+ pcPart_price,
+ pcPart_desc,
+ pcPart_brand,
+ pcPart_condition,
+ pcPart_notes,
+ pcPart_age,
+ pcPart_pcBuild_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO psu
+ (
+ psu_watt,
+ psu_effiency,
+ psu_8pin,
+ psu_6pin,
+ psu_4pin,
+ psu_molex,
+ psu_sata,
+ psu_floppy,
+ psu_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO ram
+ (
+ ram_kitSize,
+ ram_stickSize,
+ ram_speed,
+ ram_type,
+ ram_casLatency,
+ ram_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO settings
+ (
+ settings_uploadFilePath
+ ) VALUES
+ (
+ ?
+ )
\ No newline at end of file
--- /dev/null
+INSERT INTO ssd
+ (
+ ssd_formFactor,
+ ssd_size,
+ ssd_interface,
+ ssd_pcPart_id
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+SELECT
+ item_name,
+ item_subtitle,
+ item_category,
+ item_condition,
+ item_conditionDesc,
+ item_cost
+ FROM item
+ ORDER BY item_id
+ DESC
\ No newline at end of file
--- /dev/null
+SELECT
+ pcPart_id,
+ pcPart_type,
+ pcPart_name,
+ pcPart_modelNumber,
+ pcPart_price,
+ pcPart_desc,
+ pcPart_brand,
+ pcPart_condition,
+ pcPart_notes,
+ pcPart_age
+ FROM pcPart
+ ORDER BY pcPart_id
+ DESC
\ No newline at end of file
--- /dev/null
+SELECT *
+ FROM pcBuild AS A
+ JOIN pcPart AS B
+ ON A.pcBuild_id = B.pcPart_pcBuild_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN cases AS B
+ ON A.pcPart_id = B.case_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN cpuCool AS B
+ ON A.pcPart_id = B.cpuCool_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN cpu AS B
+ ON A.pcPart_id = B.cpu_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN fan AS B
+ ON A.pcPart_id = B.fan_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT file_path FROM file WHERE file_id = ?
\ No newline at end of file
--- /dev/null
+SELECT * FROM file WHERE file_id = ?
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN gpu AS B
+ ON A.pcPart_id = B.gpu_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN hdd AS B
+ ON A.pcPart_id = B.hdd_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN ledkit AS B
+ ON A.pcPart_id = B.ledkit_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT * FROM file
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN mobo AS B
+ ON A.pcPart_id = B.mobo_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN os AS B
+ ON A.pcPart_id = B.os_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT * FROM pcPart WHERE pcPart_id = ?
\ No newline at end of file
--- /dev/null
+SELECT * FROM tableName WHERE tableName_pcPart_id = ?
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN psu AS B
+ ON A.pcPart_id = B.psu_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN ram AS B
+ ON A.pcPart_id = B.ram_pcPart_id;
\ No newline at end of file
--- /dev/null
+SELECT COUNT(*) FROM currentTable
\ No newline at end of file
--- /dev/null
+SELECT * FROM settings
\ No newline at end of file
--- /dev/null
+SELECT pcPart_id, pcPart_name, pcPart_modelNumber, pcPart_price
+ FROM pcPart AS A
+ JOIN ssd AS B
+ ON A.pcPart_id = B.ssd_pcPart_id;
\ No newline at end of file
--- /dev/null
+UPDATE pcPart
+ SET
+ pcPart_type = ?,
+ pcPart_name = ?,
+ pcPart_modelNumber = ?,
+ pcPart_price = ?,
+ pcPart_desc = ?,
+ pcPart_brand = ?,
+ pcPart_condition = ?,
+ pcPart_notes = ?,
+ pcPart_test = ?,
+ pcPart_age = ?
+ WHERE pcPart_id = ?
\ No newline at end of file
--- /dev/null
+UPDATE ssd
+ SET
+ ssd_formFactor = ?,
+ ssd_size = ?,
+ ssd_interface = ?
+ WHERE ssd_pcPart_id = ?
\ No newline at end of file
--- /dev/null
+INSERT INTO file
+ (
+ file_name,
+ file_path,
+ file_size,
+ file_today_date
+ )
+ VALUES (
+ ?,
+ ?,
+ ?,
+ ?
+ )
\ No newline at end of file
--- /dev/null
+body { font-family: sans-serif; background: #C29A97; }
+/*body { margin-left: 10%; margin-right: 10%; font-family: sans-serif; background: #eee; }
+a, h1, h2 { color: #377ba8; } */
+a, h1, h2 { color: blue; }
+h1, h2 { font-family: 'Georgia', serif; margin: 0; }
+h1 { border-bottom: 2px solid #eee; }
+h2 { font-size: 1.2em; }
+
+/*
+.page { margin: 2em auto; width: 35em; border: 5px solid #ccc;
+ padding: 0.8em; background: white; }
+*/
+.page { margin: 2em auto; width: auto; border: 5px solid #ccc;
+ padding: 0.8em; background: #EEE8BC; }
+.items { list-style: none; margin: 0; padding: 0; }
+.items li { margin: 0.8em 1.2em; }
+.items li h2 { margin-left: -1em; }
+.add-item { font-size: 0.9em; border-bottom: 1px solid #ccc; }
+.add-item dl { font-weight: bold; }
+.metanav { text-align: right; font-size: 0.8em; padding: 0.3em;
+ margin-bottom: 1em; background: #fafafa; }
+.flash { background: #cee5F5; padding: 0.5em;
+ border: 1px solid #aacbe2; }
+.error { background: #f0d6d6; padding: 0.5em; }
+
+
+
+/* Style the list */
+ul.tab {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
+ border: 1px solid #ccc;
+ background-color: #f1f1f1;
+}
+
+/* Float the list items side by side */
+ul.tab li {float: left;}
+
+/* Style the links inside the list items */
+ul.tab li a {
+ display: inline-block;
+ color: black;
+ text-align: center;
+ padding: 14px 16px;
+ text-decoration: none;
+ transition: 0.3s;
+ font-size: 17px;
+}
+
+
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ {% if session.logged_in %}
+ <form action="{{ url_for('submit_item') }}" enctype=multipart/form-data method=post class=add-item>
+ <dl>
+ <dt>Item Name:
+ <dd><input type=text style='width:92%' name=item_name>
+ <dt>Item Subtitle:
+ <dd><input type=text style='width:92%' name=item_subtitle>
+ <dt>Item Description:
+ <dd><textarea name=item_desc rows=8 style='width:92%'></textarea>
+ <!-- <dd><textarea name=item_desc rows=8 cols=80></textarea> -->
+ <dt>Item Category:
+ <dd><input type=text size=60 name=item_category>
+ <dt>Item Condition:
+ <dd><select name=item_condition >
+ <option value="used">Used</option>
+ <option value="new">New</option>
+ <option value="newOther">New (other)</option>
+ <option value="manuRefurb">Manufacturer Refurbished</option>
+ <option value="forParts">For Parts or Not Working</option>
+ <option value="sellerRefurb">Seller Refurbished</option>
+ </select>
+ <dt>Item Condition Description:
+ <dd><textarea name=item_conditionDesc style='width:50%' cols=40></textarea>
+ <dt>Item Cost:
+ <dd><input type=text size=7 name=item_cost>
+ <dt>Item Pictures:
+ <dd><input type=file name=item_pictures multiple>
+ <dt>Add Item:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <ul class=items>
+ {% for item in items %}
+ <li><h2>{{ item.item_name }}</h2>{{ item.item_subtitle|safe }}
+ {{ item.item_desc|safe }}
+ {{ item.item_category|safe }}
+ {{ item.item_condition|safe }}
+ {{ item.item_conditionDesc|safe }}
+ {{ item.item_cost|safe }}
+ {% else %}
+ <li><em>No Items Found!</em>
+ {% endfor %}
+ </ul>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ <li><h2>Dashboard</h2>
+ <li><b>Landing Page</b>
+ <li><em>Welcome to the dashboard!</em>
+ </br>
+ <li><em>New Stuff</em>
+ </br>
+ <a href="{{ url_for('mediaserver_addFiles') }}">Upload a File</a>
+ </br>
+ <a href="{{ url_for('mediaserver_file_list') }}">View Files</a>
+ </br>
+ <a href="{{ url_for('mediaserver_settings') }}">Settings</a>
+ </br>
+ </br>
+ </ul>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ <li><h2>PC Parts - Add Part - Details</h2>
+ </br>
+ {% if session.logged_in %}
+ <!-- ADD PART - SOLID STATE DRIVE -->
+ {% if partType == "ssd" %}
+ <li><b>Add SSD Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Form Factor:
+ <dd><input type=text size=25 name=ssd_formFactor placeholder="2.5 inches">
+ <dt>Storage Capacity:
+ <dd><input type=text size=7 name=ssd_size placeholder="256"> GB
+ <dt>Interface:
+ <dd><input type=text size=25 name=ssd_interface placeholder="e.g. SATA3">
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - RAM -->
+ {% if partType == "ram" %}
+ <li><b>Add RAM Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Kit Size:
+ <dd><input type=text size=25 name=ram_kitSize placeholder="e.g. 2"> Sticks
+ <dt>Stick Size:
+ <dd><input type=text size=7 name=ram_stickSize placeholder="e.g. 8"> GB
+ <dt>Speed:
+ <dd><input type=text size=7 name=ram_speed placeholder="e.g. 2400"> MHz
+ <dt>Type:
+ <dd><select name=ram_type >
+ <option value="simm">SIMM</option>
+ <option value="sdram">SDRAM</option>
+ <option value="ddr1">DDR1</option>
+ <option value="ddr2">DDR2</option>
+ <option value="ddr3">DDR3</option>
+ <option value="ddr4">DDR4</option>
+ </select>
+ <dt>CAS Latency:
+ <dd><input type=text size=25 name=ram_casLatency placeholder="e.g. 9"> CL
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - HDD -->
+ {% if partType == "hdd" %}
+ <li><b>Add HDD Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Form Factor:
+ <dd><input type=text size=25 name=hdd_formFactor placeholder="e.g. 3.5 inch">
+ <dt>Size:
+ <dd><input type=text size=7 name=hdd_size placeholder="e.g. 2000"> GB
+ <dt>Interface:
+ <dd><input type=text size=7 name=hdd_interface placeholder="e.g. SATA3">
+ <dt>Cache:
+ <dd><input type=text size=7 name=hdd_cache placeholder="e.g. 128"> MB
+ <dt>RPM:
+ <dd><input type=text size=7 name=hdd_rpm placeholder="e.g. 7200">
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - CASE -->
+ {% if partType == "case" %}
+ <li><b>Add Case Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Form Factor: <input type=text size=25 name=case_formFactor placeholder="e.g. ITX, mATX, ATX, eATX">
+ <dt>Width: <input type=number size=7 name=case_width placeholder="e.g. 12.5"> Inches
+ <dt>Height: <input type=number size=7 name=case_height placeholder="e.g. 16.25"> Inches
+ <dt>Length: <input type=number size=7 name=case_length placeholder="e.g. 18.5"> Inches
+ <dt>5.25" Bays:<input type=number size=7 name=case_525bay placeholder="e.g. 5">
+ <dt>3.5" Bays:<input type=number size=7 name=case_350bay placeholder="e.g. 4">
+ <dt>2.5" Bays:<input type=number size=7 name=case_250bay placeholder="e.g. 2">
+ <dd>
+ <dt>80mm Fan Slots:<input type=number size=7 name=case_80fan placeholder="e.g. 0">
+ <dt>120mm Fan Slots:<input type=number size=7 name=case_120fan placeholder="e.g. 4">
+ <dt>140mm Fan Slots:<input type=number size=7 name=case_140fan placeholder="e.g. 1">
+ <dt>240mm Fan Slots:<input type=number size=7 name=case_240fan placeholder="e.g. 2">
+ <dt>Other Fan Slots:<input type=text size=15 name=case_otherFan placeholder="e.g. 2x 100mm">
+ <dd>
+ <dt>Front Speaker Jack:<input type=number size=7 name=case_fpSpk placeholder="e.g. 1">
+ <dt>Front Microphone Jack:<input type=number size=7 name=case_fpMic placeholder="e.g. 1">
+ <dt>Front USB 3.0 Slots:<input type=number size=7 name=case_fpUSB3 placeholder="e.g. 2">
+ <dt>Front USB 2.0 Slots:<input type=number size=7 name=case_fpUSB2 placeholder="e.g. 2">
+ <dd>
+ <dt>Case PSU Slots:<input type=number size=7 name=case_psuSlots placeholder="e.g. 1">
+ <dt>Watercooler Slots:<input type=text size=15 name=case_waterSlots placeholder="e.g. 1x 240mm, 1x 120mm">
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - GPU -->
+ {% if partType == "gpu" %}
+ <li><b>Add Video Card Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>VRAM Type: <input type=text size=7 name=gpu_vramType placeholder="e.g. GDDR5">
+ <dt>VRAM Size: <input type=number size=7 name=gpu_vramSize placeholder="e.g. 8192"> MB
+ <dt>Slot Width: <input type=number size=7 name=gpu_slotWidth placeholder="e.g. 2"> Slots
+ <dt>Interface: <input type=number size=7 name=gpu_interface placeholder="e.g. PCIEx16 3.0"> Inches
+ <dt>6-pin Power Connectors::
+ <dd><select name=gpu_6pin >
+ <option value="0">0</option>
+ <option value="1">1</option>
+ <option value="2">2</option>
+ <option value="3">3</option>
+ </select>
+ <dt>8-pin Power Connectors::
+ <dd><select name=gpu_8pin >
+ <option value="0">0</option>
+ <option value="1">1</option>
+ <option value="2">2</option>
+ <option value="3">3</option>
+ </select>
+ <dt>Clock Speed:<input type=number size=7 name=gpu_clockSpeed placeholder="e.g. 1766"> MHz
+ <dd>
+ <dt>Memory Clock Speed:<input type=number size=7 name=gpu_memClockSpeed placeholder="e.g. 4333"> MHz
+ <dt>Bus Bandwidth:<input type=number size=7 name=gpu_busBandwidth placeholder="e.g. 512"> bit
+ <dt>Crossfire:<input type=checkbox name=gpu_crossfire>
+ <dt>SLI:<input type=checkbox name=gpu_sli>
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - PSU -->
+ {% if partType == "psu" %}
+ <li><b>Add Power Supply Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Wattage: <input type=text size=7 name=psu_watt placeholder="e.g. 750"> Watts
+ <dt>Efficency:
+ <dd><select name=psu_effiency >
+ <option value="none">Not Certified</option>
+ <option value="plus">80 Plus</option>
+ <option value="bronze">80 Plus Bronze</option>
+ <option value="silver">80 Plus Silver</option>
+ <option value="gold">80 Plus Gold</option>
+ <option value="platinum">80 Plus Platinum</option>
+ <option value="titanium">80 Plus Titanium</option>
+ </select>
+ <dt>8-pin Connectors: <input type=number size=7 name=psu_8pin placeholder="e.g. 1">
+ <dt>6-pin Connectors: <input type=number size=7 name=psu_6pin placeholder="e.g. 2">
+ <dt>4-pin Connectors: <input type=number size=7 name=psu_4pin placeholder="e.g. 1">
+ <dt>Molex Connectors: <input type=number size=7 name=psu_molex placeholder="e.g. 4">
+ <dt>SATA Connectors: <input type=number size=7 name=psu_sata placeholder="e.g. 4">
+ <dt>Floppy Connectors: <input type=number size=7 name=psu_floppy placeholder="e.g. 1">
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - OS -->
+ {% if partType == "os" %}
+ <li><b>Add Operating System Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Type: <input type=text size=7 name=os_type placeholder="e.g. Windows 7">
+ <dt>Bit:
+ <dd><select name=os_bit >
+ <option value="32">32</option>
+ <option value="64">64</option>
+ </select>
+ <dt>Version: <input type=text size=7 name=os_version placeholder="e.g. Professional">
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - CPU Cooler -->
+ {% if partType == "cpuCool" %}
+ <li><b>Add Processor Cooler Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Type:
+ <dd><select name=cpuCool_type >
+ <option value="air">Air</option>
+ <option value="water">Water</option>
+ </select>
+ <dt>Socket List: <input type=text size=15 name=cpuCool_socketList placeholder="e.g. LGA1151/2011v3, AM2/3/3+">
+ <dt>Fan Count: <input type=number size=7 name=cpuCool_fanCount placeholder="e.g. 4">
+ <dt>Fan Size: <input type=number size=7 name=cpuCool_fanSize placeholder="e.g. 120">mm
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - Motherboard -->
+ {% if partType == "mobo" %}
+ <li><b>Add Motherboard Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>RAM Type:
+ <dd><select name=mobo_ramType >
+ <option value="simm">SIMM</option>
+ <option value="sdram">SDRAM</option>
+ <option value="ddr1">DDR1</option>
+ <option value="ddr2">DDR2</option>
+ <option value="ddr3">DDR3</option>
+ <option value="ddr4">DDR4</option>
+ </select>
+ <dt>CPU Socket: <input type=text size=7 name=mobo_CPUsocket placeholder="e.g. LGA2011v3">
+ <dt>DIMM Slots: <input type=number size=7 name=mobo_dimmSlots placeholder="e.g. 4">
+ <dt>PCI Slots: <input type=number size=7 name=mobo_pciSlots placeholder="e.g. 2">
+ <dt>PCIEx16 Slots: <input type=number size=7 name=mobo_pcie16Slots placeholder="e.g. 2">
+ <dt>PCIEx8 Slots: <input type=number size=7 name=mobo_pcie8Slots placeholder="e.g. 0">
+ <dt>PCIEx4 Slots: <input type=number size=7 name=mobo_pcie4Slots placeholder="e.g. 0">
+ <dt>PCIEx1 Slots: <input type=number size=7 name=mobo_pcie1Slots placeholder="e.g. 2">
+ <dt>Chipset: <input type=text size=10 name=mobo_chipset placeholder="e.g. Intel X99">
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - Fan -->
+ {% if partType == "fan" %}
+ <li><b>Add Fan Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Fan Size: <input type=number size=7 name=fan_size placeholder="e.g. 120">mm
+ <dt>Fan Type: <input type=text size=7 name=fan_type placeholder="e.g. Radiator">
+ <dt>Fan Color: <input type=text size=7 name=fan_color placeholder="e.g. Red">
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - LED Kit -->
+ {% if partType == "ledkit" %}
+ <li><b>Add LED Kit Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Color: <input type=text size=7 name=ledkit_color placeholder="e.g. RGB">
+ <dt>Type: <input type=text size=15 name=ledkit_type placeholder="e.g. LED Magnetic Strip">
+ <dt>Notes: <textarea type=text style='width:50%' rows=4 name=ledkit_notes placeholder="e.g. Comes with remote control"></textarea>
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <!-- ADD PART - CPU -->
+ {% if partType == "cpu" %}
+ <li><b>Add Processor Specifics</b>
+ <form action="{{ url_for('add_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <input type=hidden name=part_type value="{{ partType }}"></input>
+ <dl>
+ <dt>Socket: <input type=text size=7 name=cpu_socket placeholder="e.g. LGA2011v3">
+ <dt>Cores: <input type=number size=7 name=cpu_cores placeholder="e.g. 6">
+ <dt>Threads: <input type=number size=7 name=cpu_threads placeholder="e.g. 12">
+ <dt>Frequency: <input type=number size=7 name=cpu_frequency placeholder="e.g. 3.8"> GHz
+ <dt>L3 Cache: <input type=number size=7 name=cpu_cache placeholder="e.g. 12"> MB
+ <dt>Wattage: <input type=number size=7 name=cpu_wattage placeholder="e.g. 125"> Watts
+ <dd>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ {% endif %}
+ <ul class=items>
+{% endblock %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ {% for item in items %}
+ <li>
+ <h2>{{ item.item_name }}</h2>
+ {{ item.item_subtitle|safe }}
+ {{ item.item_desc }}
+ {{ item.item_category|safe }}
+ {{ item.item_condition|safe }}
+ {{ item.item_conditionDesc|safe }}
+ {{ item.item_cost|safe }}
+ {% else %}
+ <li>
+ <em>No Items Found!</em>
+ {% endfor %}
+ </ul>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+<!doctype html>
+<title>Flaskr</title>
+<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
+<div class=page>
+ <h1>Flaskr</h1>
+ <div class=metanav>
+ {% if not session.logged_in %}
+ <a href="{{ url_for('login') }}">Log In</a>
+ {% else %}
+ <a href="{{ url_for('logout') }}">Log Out</a>
+ </br>
+ <a href="{{ url_for('dashboard') }}">Dashboard</a>
+ </br>
+ {% endif %}
+ </div>
+ {% for message in get_flashed_messages() %}
+ <div class=flash>{{ message }}</div>
+ {% endfor %}
+ {% block body %}{% endblock %}
+</div>
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <h2>Login</h2>
+ {% if error %}<p class=error><strong>Error:</strong> {{ error }}{% endif %}
+ <form action="{{ url_for('login') }}" method=post>
+ <dl>
+ <dt>Username:
+ <dd><input type=text name=username>
+ <dt>Password:
+ <dd><input type=password name=password>
+ <dd><input type=submit value=Login>
+ </dl>
+ </form>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ {% if session.logged_in %}
+
+ <!-- url_for - is name of definition called upon form action -->
+ <form action="{{ url_for('add_file') }}" method=post class=add-item enctype="multipart/form-data">
+ <dl>
+ <dt>File Upload:
+ <dd><input type=file style='width:92%' name=file>
+ <dt>Add File:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ </br>
+ <a href="{{ url_for('mediaserver_file_list') }}">View Files</a>
+ </br>
+ {% endif %}
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ {% for item in items %}
+ <li>
+ <h2>File Name:</h2> {{ item.file_name }}
+ <dl>
+ <dt><b>File path on server:</b> {{ item.file_path }}
+ {% if item.file_size >= 1000000 %}
+ <dt><b>File size on server:</b> {{ item.file_size / 1000000 }} megabytes
+ {% endif %}
+ {% if item.file_size >= 1000 %}
+ {% if item.file_size < 1000000 %}
+ <dt><b>File size on server:</b> {{ item.file_size / 1000 }} kilobytes
+ {% endif %}
+ {% endif %}
+ {% if item.file_size < 1000 %}
+ <dt><b>File size on server:</b> {{ item.file_size }} bytes
+ {% endif %}
+ <dt><b>File Upload Date:</b> {{ item.file_today_date }}
+ <dd>
+ </dl>
+ <form action="{{ url_for('mediaserver_download_file') }}" method=post class=add-item>
+ <input type=hidden name=file_to_download value="{{ item.file_id }}"></input>
+ <input type=submit value="Download"></input>
+ </form>
+ <form action="{{ url_for('mediaserver_delete_file') }}" method=post class=add-item>
+ <input type=hidden name=file_to_delete value="{{ item.file_id }}"></input>
+ <input type=submit value="Delete"></input>
+ </form>
+ {% else %}
+ <li>
+ <em>No Items Found!</em>
+ {% endfor %}
+ </ul>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ {% if session.logged_in %}
+ <b>Upload File path on server:</b> {{ default_upload_path[0].settings_uploadFilePath }}
+
+ <form action="{{ url_for('mediaserver_save_settings') }}" method=post class=add-item">
+ <dl>
+ <dt>Save Location on Server:
+ <dd><input type=text style='width:92%' name=server_file_path>
+ <dt>Save Settings:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ <li><h2>PC Parts - Solid State Drives</h2>
+ <li><b>List of Solid State Drives</b>
+ <li><b>PC PART ID: {{ pcPartId }}</b>
+ <br /> <b>Form Factor:</b>
+ {{ selected_row.ssd_formFactor }}
+ <br /> <b>Storage Capacity:</b>
+ {{ selected_row.ssd_size|safe }} MB
+ <br /> <b>Interface:</b>
+ {{ selected_row.ssd_interface }}
+ {% if session.logged_in %}
+ <form action="{{ url_for('display_update_part_details', pcPartId = selected_row.ssd_pcPart_id)}}" enctype=multipart/form-data method=post class=add-item>
+ <dt>Edit Part:
+ <dd><input type=submit value=Edit>
+ </dl>
+ </form>
+ {% endif %}
+ </ul>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ {% if session.logged_in %}
+ <form action="{{ url_for('update_part') }}" method=post class=add-item>
+ <dl>
+ <dt>Part Name:
+ <dd><input type=text style='width:92%' name=pcPart_name value="{{ selected_row.pcPart_name }}">
+ <dt>Part Type:
+ <dd><select name=pcPart_type value="{{ selected_row.pcPart_type }}">
+ <option value="cpu">Processor</option>
+ <option value="ram">Memory</option>
+ <option value="mobo">Motherboard</option>
+ <option value="ssd">Solid State Drive</option>
+ <option value="hdd">Hard Disk Drive</option>
+ <option value="case">Case</option>
+ <option value="gpu">Video Card</option>
+ <option value="psu">Power Supply</option>
+ <option value="os">Operating System</option>
+ <option value="cpuCool">CPU Cooler</option>
+ <option value="fan">Fan</option>
+ <option value="ledkit">LED Kit</option>
+ <option value="misc">Miscellaneous</option>
+ </select>
+ <dt>Part Model Number:
+ <dd><input type=text size=30 name=pcPart_modelNumber value="{{ selected_row.pcPart_modelNumber }}">
+ <dt>Part Price:
+ <dd><input type=text size=7 name=pcPart_price value="{{ selected_row.pcPart_price }}"> Dollars
+ <dt>Part Description:
+ <dd><textarea name=pcPart_desc style='width:50%' rows=8>{{ selected_row.pcPart_desc }}</textarea>
+ <dt>Part Brand:
+ <dd><input type=text size=30 name=pcPart_brand value="{{ selected_row.pcPart_brand }}">
+ <dt>Part Condition:
+ <dd><textarea name=pcPart_condition style='width:50%' rows=8>{{ selected_row.pcPart_condition }}</textarea>
+ <dt>Part Notes:
+ <dd><textarea name=pcPart_notes style='width:50%' rows=8>{{ selected_row.pcPart_notes }}</textarea>
+ <dt>Part Age:
+ <dd><input type=number step=any min=0 size=3 name=pcPart_age value="{{ selected_row.pcPart_age }}"> Years
+ <input type=hidden name=pcPart_id value="{{ selected_row.pcPart_id }}"></input>
+ <dt>Update Part:
+ <dd><input type=submit value=Update>
+ </dl>
+ </form>
+ {% endif %}
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ <li><h2>PC Parts - Update Part - SSD</h2>
+ <li><b>Update Solid State Specifics</b>
+ </br>
+ {% if session.logged_in %}
+ <form action="{{ url_for('update_part_details') }}" enctype=multipart/form-data method=post class=add-item>
+ <dl>
+ <dt>Form Factor:
+ <dd><input type=text size=25 name=ssd_formFactor value="{{ selected_row.ssd_formFactor }}">
+ <dt>Storage Capacity:
+ <dd><input type=text size=7 name=ssd_size value="{{ selected_row.ssd_size }}"> MB
+ <dt>Interface:
+ <dd><input type=text size=25 name=ssd_interface value="{{ selected_row.ssd_interface }}">
+ <input type=hidden name=ssd_pcPart_id value="{{ selected_row.ssd_pcPart_id }}"></input>
+ <dt>Update Part:
+ <dd><input type=submit value=Update>
+ </dl>
+ </form>
+ {% endif %}
+ <ul class=items>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ {% if session.logged_in %}
+ <form action="{{ url_for('add_build') }}" method=post class=add-item>
+ <dl>
+ <dt>Build Name:
+ <dd><input type=text style='width:92%' name=pcBuild_name placeholder="Thermaltake_Black_i5">
+ <dt>Build Type:
+ <dd><input type=text size=30 name=pcBuild_type placeholder="Gaming">
+ <dt>Select Motherboard:
+ <dd><select name=pcBuild_mobo_id >
+ <option value="null">None</option>
+ {% for part in moboList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Case:
+ <dd><select name=pcBuild_case_id >
+ <option value="null">None</option>
+ {% for part in caseList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select PSU:
+ <dd><select name=pcBuild_psu_id >
+ <option value="null">None</option>
+ {% for part in psuList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select RAM:
+ <dd><select name=pcBuild_ram_id >
+ <option value="null">None</option>
+ {% for part in ramList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Video Card:
+ <dd><select name=pcBuild_gpu_id >
+ <option value="null">None</option>
+ {% for part in gpuList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Solid State Drive:
+ <dd><select name=pcBuild_ssd_id >
+ <option value="null">None</option>
+ {% for part in ssdList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Hard Disk Drive:
+ <dd><select name=pcBuild_hdd_id >
+ <option value="null">None</option>
+ {% for part in hddList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Processor:
+ <dd><select name=pcBuild_cpu_id >
+ <option value="null">None</option>
+ {% for part in cpuList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select CPU Cooler:
+ <dd><select name=pcBuild_cpuCool_id >
+ <option value="null">None</option>
+ {% for part in cpuCoolList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Hard Disk Drive:
+ <dd><select name=pcBuild_fan_id >
+ <option value="null">None</option>
+ {% for part in fanList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select LED Kit:
+ <dd><select name=pcBuild_ledkit_id >
+ <option value="null">None</option>
+ {% for part in ledkitList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>Select Operating System:
+ <dd><select name=pcBuild_os_id >
+ <option value="null">None</option>
+ {% for part in osList %}
+ <option value="{{ part.pcPart_id }}">{{ part.pcPart_name }} , {{ part.pcPart_modelNumber }} , {{ part.pcPart_price }} </option>
+ {% endfor %}
+ </select>
+ <dt>PC Build Notes:
+ <dd><textarea name=pcBuild_notes style='width:50%' rows=8></textarea>
+ <dt>Average Part Age:
+ <dd><input type=number size=7 name=pcBuild_avgPartAge placeholder="2"> Years
+ <dt>Color Scheme:
+ <dd><input type=text size=15 name=pcBuild_colorScheme placeholder="Red and Black">
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ {% if session.logged_in %}
+ <form action="{{ url_for('add_part') }}" method=post class=add-item>
+ <dl>
+ <dt>Part Name:
+ <dd><input type=text style='width:92%' name=pcPart_name>
+ <dt>Part Type:
+ <dd><select name=pcPart_type >
+ <option value="cpu">Processor</option>
+ <option value="ram">Memory</option>
+ <option value="mobo">Motherboard</option>
+ <option value="ssd">Solid State Drive</option>
+ <option value="hdd">Hard Disk Drive</option>
+ <option value="case">Case</option>
+ <option value="gpu">Video Card</option>
+ <option value="psu">Power Supply</option>
+ <option value="os">Operating System</option>
+ <option value="cpuCool">CPU Cooler</option>
+ <option value="fan">Fan</option>
+ <option value="ledkit">LED Kit</option>
+ <option value="misc">Miscellaneous</option>
+ </select>
+ <dt>Part Model Number:
+ <dd><input type=text size=30 name=pcPart_modelNumber>
+ <dt>Part Price: <input type=text size=7 name=pcPart_price> Dollars
+ <dd>
+ <dt>Part Description:
+ <dd><textarea name=pcPart_desc style='width:50%' rows=8></textarea>
+ <dt>Part Brand: <input type=text size=30 name=pcPart_brand>
+ <dd>
+ <dt>Part Condition:
+ <dd><textarea name=pcPart_condition style='width:50%' rows=8></textarea>
+ <dt>Part Notes:
+ <dd><textarea name=pcPart_notes style='width:50%' rows=8></textarea>
+ <dt>Part Age:
+ <dd><input type=number step=any min=0 size=3 name=pcPart_age> Years
+ <dt>PC Build:
+ <dd><select name=pcPart_pcBuild_id >
+ <option value="null">None</option>
+ {% for pcBuild in pcBuildList %}
+ <option value="{{ pcBuild.pcBuild_id }}">{{ pcBuild.pcBuild_name }} , {{ pcBuild.pcBuild_type }} </option>
+ {% endfor %}
+ </select>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ <li><h2>PC Parts - Add Part - SSD</h2>
+ <li><b>Add Solid State Specifics</b>
+ </br>
+ {% if session.logged_in %}
+ <form action="{{ url_for('add_ssd') }}" enctype=multipart/form-data method=post class=add-item>
+ <dl>
+ <dt>Form Factor:
+ <dd><input type=text size=25 name=ssd_formFactor>
+ <dt>Storage Capacity:
+ <dd><input type=text size=7 name=ssd_size> MB
+ <dt>Interface:
+ <dd><input type=text size=25 name=ssd_interface>
+ <input type=hidden name=pc_part_id value="{{ currentPart }}"></input>
+ <dt>Add Part:
+ <dd><input type=submit value=Submit>
+ </dl>
+ </form>
+ {% endif %}
+ <ul class=items>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ {% for item in items %}
+ <li>
+ <h2>Part Name: <a href="{{ url_for('part_details', pcPartId=item.pcPart_id, pcPartType=item.pcPart_type) }}">{{ item.pcPart_name }}</a></h2>
+ <dl>
+ <dt><b>Part Type:</b> {{ item.pcPart_type|safe }}
+ <dt><b>Part Model Number:</b> {{ item.pcPart_modelNumber }}
+ <dt><b>Part Price:</b> ${{ item.pcPart_price }}
+ <dt><b>Part Description:</b>
+ <dd>{{ item.pcPart_desc }}
+ <dt><b>Part Brand:</b> {{ item.pcPart_brand }}
+ <dt><b>Part Condition:</b>
+ <dd>{{ item.pcPart_condition }}
+ <dt><b>Part Notes:</b>
+ <dd>{{ item.pcPart_notes }}
+ <dt><b>Part Age:</b> {{ item.pcPart_age }} years
+ <dd>
+ </dl>
+ <form action="{{ url_for('delete_part') }}" method=post class=add-item>
+ <input type=hidden name=part_to_delete value="{{ item.pcPart_id }}"></input>
+ <input type=submit value="Delete"></input>
+ </form>
+ <form action="{{ url_for('display_update_part') }}" method=post class=add-item>
+ <input type=hidden name=part_to_update value="{{ item.pcPart_id }}"></input>
+ <input type=submit value="Edit"></input>
+ </form>
+ {% else %}
+ <li>
+ <em>No Items Found!</em>
+ {% endfor %}
+ </ul>
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+ <ul class=items>
+ {% for pcBuild in pcBuildList %}
+ <li>
+ <h2>Build Name: <a href="{{ url_for('build_details', pcBuildId=pcBuild.pcBuild_id) }}">{{ pcBuild.pcBuild_name }}</a></h2>
+ <dl>
+ <dt><b>Type:</b> {{ pcBuild.pcBuild_type|safe }}
+ <dt><b>Avg Part Age:</b> {{ pcBuild.pcBuild_avgPartAge }} years
+ <dt><b>Color Scheme:</b> {{ pcBuild.pcBuild_colorScheme }}
+ <dt><b>Notes:</b>
+ <dd>{{ pcBuild.pcBuild_notes }}
+ <dd>
+ </dl>
+ <form action="{{ url_for('delete_build') }}" method=post class=add-item>
+ <input type=hidden name=build_to_delete value="{{ pcBuild.pcBuild_id }}"></input>
+ <input type=submit value="Delete"></input>
+ </form>
+ <form action="{{ url_for('display_update_build') }}" method=post class=add-item>
+ <input type=hidden name=build_to_update value="{{ pcBuild.pcBuild_id }}"></input>
+ <input type=submit value="Edit"></input>
+ </form>
+ {% else %}
+ <li>
+ <em>No Items Found!</em>
+ {% endfor %}
+ </ul>
+{% endblock %}
\ No newline at end of file