Copied over old code to get started
authorPerfectfire33 <perfectfireiii@gmail.com>
Wed, 29 Jun 2022 02:32:38 +0000 (22:32 -0400)
committerPerfectfire33 <perfectfireiii@gmail.com>
Wed, 29 Jun 2022 02:32:38 +0000 (22:32 -0400)
79 files changed:
.gitattributes [new file with mode: 0644]
.idea/encodings.xml [new file with mode: 0644]
.idea/flaskr.iml [new file with mode: 0644]
.idea/misc.xml [new file with mode: 0644]
.idea/modules.xml [new file with mode: 0644]
.idea/vcs.xml [new file with mode: 0644]
.idea/workspace.xml [new file with mode: 0644]
2to3.py [new file with mode: 0644]
Readme.txt [new file with mode: 0644]
__pycache__/app.cpython-37.pyc [new file with mode: 0644]
__pycache__/flaskr.cpython-37.pyc [new file with mode: 0644]
feature_ideas.txt [new file with mode: 0644]
flaskr - Copy.py [new file with mode: 0644]
flaskr.db [new file with mode: 0644]
flaskr.py [new file with mode: 0644]
flaskr.py.bak [new file with mode: 0644]
schema.sql [new file with mode: 0644]
sql/delete_file.sql [new file with mode: 0644]
sql/delete_part.sql [new file with mode: 0644]
sql/delete_settings.sql [new file with mode: 0644]
sql/enable_foreign_keys.sql [new file with mode: 0644]
sql/insert_build.sql [new file with mode: 0644]
sql/insert_case.sql [new file with mode: 0644]
sql/insert_cpu.sql [new file with mode: 0644]
sql/insert_cpuCool.sql [new file with mode: 0644]
sql/insert_fan.sql [new file with mode: 0644]
sql/insert_gpu.sql [new file with mode: 0644]
sql/insert_hdd.sql [new file with mode: 0644]
sql/insert_ledkit.sql [new file with mode: 0644]
sql/insert_mobo.sql [new file with mode: 0644]
sql/insert_os.sql [new file with mode: 0644]
sql/insert_part.sql [new file with mode: 0644]
sql/insert_psu.sql [new file with mode: 0644]
sql/insert_ram.sql [new file with mode: 0644]
sql/insert_settings.sql [new file with mode: 0644]
sql/insert_ssd.sql [new file with mode: 0644]
sql/select_all_items.sql [new file with mode: 0644]
sql/select_all_pcparts.sql [new file with mode: 0644]
sql/select_build.sql [new file with mode: 0644]
sql/select_caseList.sql [new file with mode: 0644]
sql/select_cpuCoolList.sql [new file with mode: 0644]
sql/select_cpuList.sql [new file with mode: 0644]
sql/select_fanList.sql [new file with mode: 0644]
sql/select_fileToDelete.sql [new file with mode: 0644]
sql/select_fileToDownload.sql [new file with mode: 0644]
sql/select_gpuList.sql [new file with mode: 0644]
sql/select_hddList.sql [new file with mode: 0644]
sql/select_ledkitList.sql [new file with mode: 0644]
sql/select_mediaserver_file_list.sql [new file with mode: 0644]
sql/select_moboList.sql [new file with mode: 0644]
sql/select_osList.sql [new file with mode: 0644]
sql/select_part.sql [new file with mode: 0644]
sql/select_part_details.sql [new file with mode: 0644]
sql/select_psuList.sql [new file with mode: 0644]
sql/select_ramList.sql [new file with mode: 0644]
sql/select_row_count.sql [new file with mode: 0644]
sql/select_settings.sql [new file with mode: 0644]
sql/select_ssdList.sql [new file with mode: 0644]
sql/update_part.sql [new file with mode: 0644]
sql/update_part_ssd.sql [new file with mode: 0644]
sql/upload_file.sql [new file with mode: 0644]
static/style.css [new file with mode: 0644]
templates/add_item.html [new file with mode: 0644]
templates/dashboard.html [new file with mode: 0644]
templates/display_addPart_details.html [new file with mode: 0644]
templates/item_list.html [new file with mode: 0644]
templates/layout.html [new file with mode: 0644]
templates/login.html [new file with mode: 0644]
templates/mediaserver_addFile.html [new file with mode: 0644]
templates/mediaserver_file_list.html [new file with mode: 0644]
templates/mediaserver_settings.html [new file with mode: 0644]
templates/pcparts/select_ssd.html [new file with mode: 0644]
templates/pcparts/updatePart.html [new file with mode: 0644]
templates/pcparts/updatePart_details.html [new file with mode: 0644]
templates/pcparts_addBuild.html [new file with mode: 0644]
templates/pcparts_addPart.html [new file with mode: 0644]
templates/pcparts_addPart_ssd.html [new file with mode: 0644]
templates/pcparts_list.html [new file with mode: 0644]
templates/pcparts_listBuilds.html [new file with mode: 0644]

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..dfe0770
--- /dev/null
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644 (file)
index 0000000..15a15b2
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>
\ No newline at end of file
diff --git a/.idea/flaskr.iml b/.idea/flaskr.iml
new file mode 100644 (file)
index 0000000..6711606
--- /dev/null
@@ -0,0 +1,11 @@
+<?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
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644 (file)
index 0000000..ba24381
--- /dev/null
@@ -0,0 +1,7 @@
+<?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
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644 (file)
index 0000000..a73d108
--- /dev/null
@@ -0,0 +1,8 @@
+<?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
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644 (file)
index 0000000..94a25f7
--- /dev/null
@@ -0,0 +1,6 @@
+<?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
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644 (file)
index 0000000..b42d182
--- /dev/null
@@ -0,0 +1,456 @@
+<?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
diff --git a/2to3.py b/2to3.py
new file mode 100644 (file)
index 0000000..fbd4aa6
--- /dev/null
+++ b/2to3.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+import sys
+from lib2to3.main import main
+
+sys.exit(main("lib2to3.fixes"))
diff --git a/Readme.txt b/Readme.txt
new file mode 100644 (file)
index 0000000..5198c39
--- /dev/null
@@ -0,0 +1,13 @@
+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
diff --git a/__pycache__/app.cpython-37.pyc b/__pycache__/app.cpython-37.pyc
new file mode 100644 (file)
index 0000000..2694a80
Binary files /dev/null and b/__pycache__/app.cpython-37.pyc differ
diff --git a/__pycache__/flaskr.cpython-37.pyc b/__pycache__/flaskr.cpython-37.pyc
new file mode 100644 (file)
index 0000000..3e00aa4
Binary files /dev/null and b/__pycache__/flaskr.cpython-37.pyc differ
diff --git a/feature_ideas.txt b/feature_ideas.txt
new file mode 100644 (file)
index 0000000..3cbe6ba
--- /dev/null
@@ -0,0 +1,46 @@
+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
diff --git a/flaskr - Copy.py b/flaskr - Copy.py
new file mode 100644 (file)
index 0000000..0fccc7c
--- /dev/null
@@ -0,0 +1,835 @@
+# 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'))
+
+
+
+
diff --git a/flaskr.db b/flaskr.db
new file mode 100644 (file)
index 0000000..8224ffb
Binary files /dev/null and b/flaskr.db differ
diff --git a/flaskr.py b/flaskr.py
new file mode 100644 (file)
index 0000000..de0f933
--- /dev/null
+++ b/flaskr.py
@@ -0,0 +1,369 @@
+# 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')
+
+
+
+
diff --git a/flaskr.py.bak b/flaskr.py.bak
new file mode 100644 (file)
index 0000000..0fccc7c
--- /dev/null
@@ -0,0 +1,835 @@
+# 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'))
+
+
+
+
diff --git a/schema.sql b/schema.sql
new file mode 100644 (file)
index 0000000..cadc078
--- /dev/null
@@ -0,0 +1,382 @@
+--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
diff --git a/sql/delete_file.sql b/sql/delete_file.sql
new file mode 100644 (file)
index 0000000..9d6ea09
--- /dev/null
@@ -0,0 +1,2 @@
+DELETE FROM file
+        WHERE file_id = ?
\ No newline at end of file
diff --git a/sql/delete_part.sql b/sql/delete_part.sql
new file mode 100644 (file)
index 0000000..724f506
--- /dev/null
@@ -0,0 +1,2 @@
+DELETE FROM pcPart
+        WHERE pcPart_id = ?
\ No newline at end of file
diff --git a/sql/delete_settings.sql b/sql/delete_settings.sql
new file mode 100644 (file)
index 0000000..3978a51
--- /dev/null
@@ -0,0 +1 @@
+DELETE FROM settings
\ No newline at end of file
diff --git a/sql/enable_foreign_keys.sql b/sql/enable_foreign_keys.sql
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/sql/insert_build.sql b/sql/insert_build.sql
new file mode 100644 (file)
index 0000000..3a6a839
--- /dev/null
@@ -0,0 +1,39 @@
+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
diff --git a/sql/insert_case.sql b/sql/insert_case.sql
new file mode 100644 (file)
index 0000000..15bffb9
--- /dev/null
@@ -0,0 +1,43 @@
+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
diff --git a/sql/insert_cpu.sql b/sql/insert_cpu.sql
new file mode 100644 (file)
index 0000000..c1ff605
--- /dev/null
@@ -0,0 +1,19 @@
+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
diff --git a/sql/insert_cpuCool.sql b/sql/insert_cpuCool.sql
new file mode 100644 (file)
index 0000000..bee5384
--- /dev/null
@@ -0,0 +1,15 @@
+INSERT INTO cpuCool 
+        (
+         cpuCool_type, 
+         cpuCool_socketList,
+         cpuCool_fanCount,
+         cpuCool_fanSize,
+         cpuCool_pcPart_id
+         ) 
+        VALUES (
+                ?, 
+                ?,
+                ?,
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/insert_fan.sql b/sql/insert_fan.sql
new file mode 100644 (file)
index 0000000..9c14b6d
--- /dev/null
@@ -0,0 +1,13 @@
+INSERT INTO fan 
+        (
+         fan_size, 
+         fan_type,
+         fan_color,
+         fan_pcPart_id
+         ) 
+        VALUES (
+                ?, 
+                ?, 
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/insert_gpu.sql b/sql/insert_gpu.sql
new file mode 100644 (file)
index 0000000..21f5e8a
--- /dev/null
@@ -0,0 +1,29 @@
+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
diff --git a/sql/insert_hdd.sql b/sql/insert_hdd.sql
new file mode 100644 (file)
index 0000000..963c273
--- /dev/null
@@ -0,0 +1,17 @@
+INSERT INTO hdd 
+        (
+         hdd_formFactor, 
+         hdd_size,
+         hdd_interface,
+         hdd_cache,
+         hdd_rpm,
+         hdd_pcPart_id
+         ) 
+        VALUES (
+                ?, 
+                ?,
+                ?,
+                ?,
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/insert_ledkit.sql b/sql/insert_ledkit.sql
new file mode 100644 (file)
index 0000000..6f6c95f
--- /dev/null
@@ -0,0 +1,13 @@
+INSERT INTO ledkit 
+        (
+         ledkit_color, 
+         ledkit_type,
+         ledkit_notes,
+         ledkit_pcPart_id
+         ) 
+        VALUES (
+                ?, 
+                ?, 
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/insert_mobo.sql b/sql/insert_mobo.sql
new file mode 100644 (file)
index 0000000..8850248
--- /dev/null
@@ -0,0 +1,29 @@
+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
diff --git a/sql/insert_os.sql b/sql/insert_os.sql
new file mode 100644 (file)
index 0000000..5bebe30
--- /dev/null
@@ -0,0 +1,13 @@
+INSERT INTO os 
+        (
+         os_type, 
+         os_bit,
+         os_version,
+         os_pcPart_id
+         ) 
+        VALUES (
+                ?, 
+                ?,
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/insert_part.sql b/sql/insert_part.sql
new file mode 100644 (file)
index 0000000..7e6c6ef
--- /dev/null
@@ -0,0 +1,25 @@
+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
diff --git a/sql/insert_psu.sql b/sql/insert_psu.sql
new file mode 100644 (file)
index 0000000..2009b82
--- /dev/null
@@ -0,0 +1,23 @@
+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
diff --git a/sql/insert_ram.sql b/sql/insert_ram.sql
new file mode 100644 (file)
index 0000000..570dde7
--- /dev/null
@@ -0,0 +1,17 @@
+INSERT INTO ram 
+        (
+         ram_kitSize, 
+         ram_stickSize,
+         ram_speed,
+         ram_type,
+         ram_casLatency,
+         ram_pcPart_id
+         ) 
+        VALUES (
+                ?, 
+                ?,
+                ?,
+                ?,
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/insert_settings.sql b/sql/insert_settings.sql
new file mode 100644 (file)
index 0000000..c939421
--- /dev/null
@@ -0,0 +1,7 @@
+INSERT INTO settings
+        (
+            settings_uploadFilePath
+        ) VALUES
+        (
+        ?
+        )
\ No newline at end of file
diff --git a/sql/insert_ssd.sql b/sql/insert_ssd.sql
new file mode 100644 (file)
index 0000000..972b1c0
--- /dev/null
@@ -0,0 +1,13 @@
+INSERT INTO ssd 
+        (
+         ssd_formFactor, 
+         ssd_size,
+         ssd_interface,
+         ssd_pcPart_id
+         ) 
+        VALUES (
+                ?,
+                ?,
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/sql/select_all_items.sql b/sql/select_all_items.sql
new file mode 100644 (file)
index 0000000..ae94a8f
--- /dev/null
@@ -0,0 +1,10 @@
+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
diff --git a/sql/select_all_pcparts.sql b/sql/select_all_pcparts.sql
new file mode 100644 (file)
index 0000000..da6a453
--- /dev/null
@@ -0,0 +1,14 @@
+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
diff --git a/sql/select_build.sql b/sql/select_build.sql
new file mode 100644 (file)
index 0000000..c6d0c54
--- /dev/null
@@ -0,0 +1,4 @@
+SELECT *
+        FROM pcBuild AS A 
+                JOIN pcPart AS B 
+                        ON A.pcBuild_id = B.pcPart_pcBuild_id;
\ No newline at end of file
diff --git a/sql/select_caseList.sql b/sql/select_caseList.sql
new file mode 100644 (file)
index 0000000..3509f2c
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_cpuCoolList.sql b/sql/select_cpuCoolList.sql
new file mode 100644 (file)
index 0000000..1bfaea3
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_cpuList.sql b/sql/select_cpuList.sql
new file mode 100644 (file)
index 0000000..83b6bcf
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_fanList.sql b/sql/select_fanList.sql
new file mode 100644 (file)
index 0000000..9c09637
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_fileToDelete.sql b/sql/select_fileToDelete.sql
new file mode 100644 (file)
index 0000000..a82aa9f
--- /dev/null
@@ -0,0 +1 @@
+SELECT file_path FROM file WHERE file_id = ?
\ No newline at end of file
diff --git a/sql/select_fileToDownload.sql b/sql/select_fileToDownload.sql
new file mode 100644 (file)
index 0000000..b6163f0
--- /dev/null
@@ -0,0 +1 @@
+SELECT * FROM file WHERE file_id = ?
\ No newline at end of file
diff --git a/sql/select_gpuList.sql b/sql/select_gpuList.sql
new file mode 100644 (file)
index 0000000..4ee7768
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_hddList.sql b/sql/select_hddList.sql
new file mode 100644 (file)
index 0000000..0a5e566
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_ledkitList.sql b/sql/select_ledkitList.sql
new file mode 100644 (file)
index 0000000..12a08eb
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_mediaserver_file_list.sql b/sql/select_mediaserver_file_list.sql
new file mode 100644 (file)
index 0000000..d58192b
--- /dev/null
@@ -0,0 +1 @@
+SELECT * FROM file
\ No newline at end of file
diff --git a/sql/select_moboList.sql b/sql/select_moboList.sql
new file mode 100644 (file)
index 0000000..9f8549c
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_osList.sql b/sql/select_osList.sql
new file mode 100644 (file)
index 0000000..1ee091c
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_part.sql b/sql/select_part.sql
new file mode 100644 (file)
index 0000000..dd57267
--- /dev/null
@@ -0,0 +1 @@
+SELECT * FROM pcPart WHERE pcPart_id = ?
\ No newline at end of file
diff --git a/sql/select_part_details.sql b/sql/select_part_details.sql
new file mode 100644 (file)
index 0000000..1ce16b3
--- /dev/null
@@ -0,0 +1 @@
+SELECT * FROM tableName WHERE tableName_pcPart_id = ?
\ No newline at end of file
diff --git a/sql/select_psuList.sql b/sql/select_psuList.sql
new file mode 100644 (file)
index 0000000..2c39d0f
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_ramList.sql b/sql/select_ramList.sql
new file mode 100644 (file)
index 0000000..5c8e911
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/select_row_count.sql b/sql/select_row_count.sql
new file mode 100644 (file)
index 0000000..ffe721a
--- /dev/null
@@ -0,0 +1 @@
+SELECT COUNT(*) FROM currentTable
\ No newline at end of file
diff --git a/sql/select_settings.sql b/sql/select_settings.sql
new file mode 100644 (file)
index 0000000..0d8f82d
--- /dev/null
@@ -0,0 +1 @@
+SELECT * FROM settings
\ No newline at end of file
diff --git a/sql/select_ssdList.sql b/sql/select_ssdList.sql
new file mode 100644 (file)
index 0000000..0196cb6
--- /dev/null
@@ -0,0 +1,4 @@
+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
diff --git a/sql/update_part.sql b/sql/update_part.sql
new file mode 100644 (file)
index 0000000..17e83e3
--- /dev/null
@@ -0,0 +1,13 @@
+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
diff --git a/sql/update_part_ssd.sql b/sql/update_part_ssd.sql
new file mode 100644 (file)
index 0000000..c13e076
--- /dev/null
@@ -0,0 +1,6 @@
+UPDATE ssd
+        SET 
+                ssd_formFactor = ?,
+                ssd_size = ?,
+                ssd_interface = ?
+                        WHERE ssd_pcPart_id = ?
\ No newline at end of file
diff --git a/sql/upload_file.sql b/sql/upload_file.sql
new file mode 100644 (file)
index 0000000..4a147e7
--- /dev/null
@@ -0,0 +1,13 @@
+INSERT INTO file
+        (
+         file_name,
+         file_path,
+         file_size,
+         file_today_date
+         )
+        VALUES (
+                ?,
+                ?,
+                ?,
+                ?
+                )
\ No newline at end of file
diff --git a/static/style.css b/static/style.css
new file mode 100644 (file)
index 0000000..2ea1303
--- /dev/null
@@ -0,0 +1,52 @@
+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;
+}
+
+
diff --git a/templates/add_item.html b/templates/add_item.html
new file mode 100644 (file)
index 0000000..d15b2a9
--- /dev/null
@@ -0,0 +1,47 @@
+{% 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
diff --git a/templates/dashboard.html b/templates/dashboard.html
new file mode 100644 (file)
index 0000000..4b4fd01
--- /dev/null
@@ -0,0 +1,18 @@
+{% 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
diff --git a/templates/display_addPart_details.html b/templates/display_addPart_details.html
new file mode 100644 (file)
index 0000000..b463872
--- /dev/null
@@ -0,0 +1,372 @@
+{% 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 %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/item_list.html b/templates/item_list.html
new file mode 100644 (file)
index 0000000..664ac0e
--- /dev/null
@@ -0,0 +1,18 @@
+{% 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
diff --git a/templates/layout.html b/templates/layout.html
new file mode 100644 (file)
index 0000000..06c664c
--- /dev/null
@@ -0,0 +1,20 @@
+<!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
diff --git a/templates/login.html b/templates/login.html
new file mode 100644 (file)
index 0000000..a58504a
--- /dev/null
@@ -0,0 +1,14 @@
+{% 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
diff --git a/templates/mediaserver_addFile.html b/templates/mediaserver_addFile.html
new file mode 100644 (file)
index 0000000..00ae620
--- /dev/null
@@ -0,0 +1,18 @@
+{% 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
diff --git a/templates/mediaserver_file_list.html b/templates/mediaserver_file_list.html
new file mode 100644 (file)
index 0000000..69ef2a3
--- /dev/null
@@ -0,0 +1,36 @@
+{% 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
diff --git a/templates/mediaserver_settings.html b/templates/mediaserver_settings.html
new file mode 100644 (file)
index 0000000..b6c4e63
--- /dev/null
@@ -0,0 +1,15 @@
+{% 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
diff --git a/templates/pcparts/select_ssd.html b/templates/pcparts/select_ssd.html
new file mode 100644 (file)
index 0000000..f41d87a
--- /dev/null
@@ -0,0 +1,21 @@
+{% 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
diff --git a/templates/pcparts/updatePart.html b/templates/pcparts/updatePart.html
new file mode 100644 (file)
index 0000000..f09d485
--- /dev/null
@@ -0,0 +1,44 @@
+{% 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
diff --git a/templates/pcparts/updatePart_details.html b/templates/pcparts/updatePart_details.html
new file mode 100644 (file)
index 0000000..0f809f5
--- /dev/null
@@ -0,0 +1,23 @@
+{% 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
diff --git a/templates/pcparts_addBuild.html b/templates/pcparts_addBuild.html
new file mode 100644 (file)
index 0000000..a289aa2
--- /dev/null
@@ -0,0 +1,105 @@
+{% 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
diff --git a/templates/pcparts_addPart.html b/templates/pcparts_addPart.html
new file mode 100644 (file)
index 0000000..39c3fbe
--- /dev/null
@@ -0,0 +1,50 @@
+{% 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
diff --git a/templates/pcparts_addPart_ssd.html b/templates/pcparts_addPart_ssd.html
new file mode 100644 (file)
index 0000000..961e477
--- /dev/null
@@ -0,0 +1,23 @@
+{% 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
diff --git a/templates/pcparts_list.html b/templates/pcparts_list.html
new file mode 100644 (file)
index 0000000..3a3207f
--- /dev/null
@@ -0,0 +1,34 @@
+{% 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
diff --git a/templates/pcparts_listBuilds.html b/templates/pcparts_listBuilds.html
new file mode 100644 (file)
index 0000000..51324a4
--- /dev/null
@@ -0,0 +1,28 @@
+{% 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