<p>Completed extension template loading functionality. </p>
<hr>
<h4>You can merge this Pull Request by running</h4>
<pre> git pull https://github.com/elationfoundation/commotion-client Extension_Templating</pre>
<p>Or view, comment on, or merge it at:</p>
<p> <a href='https://github.com/opentechinstitute/commotion-client/pull/26'>https://github.com/opentechinstitute/commotion-client/pull/26</a></p>
<h4>Commit Summary</h4>
<ul>
<li>added templates for very basic extensions</li>
<li>Adding emacs auto-saves to .gitignore</li>
<li>Work on extension writing focusing on intro and Qt Designer</li>
<li>added some extra functionality to main template.</li>
<li>I don't knoiw why I had that half template anyway</li>
<li>added extended filled question mark sizes</li>
<li>continued writing tutorial through ui creation</li>
<li>added creash and error signals to template and tutorial</li>
<li>added a basic commotion form stylesheet</li>
<li>Prepared main_window for loading extensions</li>
<li>Changed custom exit function name to not overwrite default exit function</li>
<li>added clean up functions to tutorial files</li>
<li>added viewport clean-up and swap functions</li>
<li>added clean up functions to welcome page</li>
<li>replaced exception log.debug logging with log.exception calls</li>
<li>cleaned up exception handling</li>
<li>added extension manager core</li>
<li>added proper usage of default values to settings loading.</li>
<li>Fixed filename to == PEP8</li>
<li>added a config file validation object</li>
<li>applied a shorter variable for qt logging functions</li>
<li>added file management needed for extension management</li>
<li>fixed a mis-typed variable</li>
<li>Cleaned up documentation</li>
<li>started scoping out extension management functionality.</li>
<li>Cleaned up validation and file system utils</li>
<li>added basic networking validation class</li>
<li>completed extension manager</li>
<li>cleaned up code to be pep8 compliant-ier</li>
<li>hooked extension loader to extension manager</li>
<li>fixed incorrect loading of fs_utils</li>
<li>cleaned up some markdown</li>
<li>moved config_manager to core</li>
<li>fixed some weirdness</li>
<li>messed up links and did not realize till it was already pushed.</li>
<li>changed config_manager to config_editor</li>
<li>removed old todo, as it is no longer needed.</li>
<li>moved all config files into config directories</li>
<li>Added proper checking for QVariant type</li>
<li>Changed to .conf naming for configs</li>
<li>removed old test extension</li>
<li>Moved extension handling to extension manager</li>
<li>Added more extension identification functions</li>
<li>Added some basic code standards guidance</li>
<li>added missing settings import</li>
<li>added basic setup.py</li>
<li>added loaded config files to data directory</li>
<li>added extension config removal</li>
<li>Made extension configs live in one unified folder under data</li>
<li>removed all logging of exceptions that are raised</li>
<li>added cx_freeze build configurations</li>
<li>added some style specifications</li>
<li>removed empty file</li>
<li>removed core and contrib extension differences</li>
<li>added a load_all call in the client</li>
<li>continued extensive overhaul of extension manager</li>
<li>added tests for extension manager load_all fucntion</li>
<li>making bundling exe's cleaner</li>
<li>modified dependencies to allow bundling</li>
<li>cleaned up code. No functional changes</li>
<li>Made logging cleaner, and added a debug message.</li>
<li>Cleaned up logging</li>
<li>added an in-line-todo.</li>
<li>added default extension directories</li>
<li>changed load_all call to new load_core name</li>
<li>added easy linux client cx_freeze compilation and creation</li>
<li>fixed logger creation functions</li>
<li>fixed some improper logging</li>
<li>fixed variable creation order and added needed imports.</li>
<li>added the last-ditch log location to gitignore.</li>
<li>merged config handling into extension manager</li>
<li>added build instructions for executable</li>
<li>Created Zipped extension loader</li>
<li>removed all current() and currentPath() calls.</li>
<li>removed exe directory in favor of auto-built exe.<sys> dirs</li>
<li>added a test runner to the project</li>
<li>added temporary build and testing objects to gitignore</li>
<li>updated the readme's</li>
<li>added some missing module __init__ files</li>
<li>added a mock extension object for testing.</li>
<li>Made Extension Manager use zipped extensions</li>
<li>Config properties no longer recursive.</li>
<li>Removed mistyped filter</li>
<li>fixed dependencies to make install_loaded work</li>
<li>Added test for install loaded function</li>
<li>added tests for getting an installed extension from a property.</li>
<li>Made Readme valuable for this project</li>
<li>updated extension manager installing and uninstalling.</li>
<li>Replaced load_settings with simpler get_config</li>
<li>updated the readme</li>
<li>specified a clearer set of test ignores.</li>
<li>Added built assets to mock dir for tests</li>
<li>added more test functions and fixed code</li>
<li>finished extension manager tests</li>
<li>removed old config utility.</li>
<li>added missing tests value to config checks</li>
<li>fix translation and home directory creation errors</li>
<li>Fixed pathing issues for changing dirs.</li>
<li>Added loggging and changed a warning to a raise</li>
<li>removed unneeded type assignment.</li>
<li>re-connected the menu-bar to new extensions</li>
<li>merged core and global paths</li>
<li>Fixed extension initialization in client main</li>
<li>Created a working mock extension</li>
<li>Changed tests to reflect new global path</li>
<li>removed assertions for bygone exceptions</li>
<li>made extensions fit into the actual main window</li>
</ul>
<h4>File Changes</h4>
<ul>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-0">.gitignore</a>
(24)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-1">Makefile</a>
(34)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-2">README.md</a>
(194)
</li>
<li>
<strong>D</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-3">TODO</a>
(46)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-4">build/README.md</a>
(89)
</li>
<li>
<strong>R</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-5">build/scripts/build.py</a>
(4)
</li>
<li>
<strong>R</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-6">build/scripts/compile_ui.py</a>
(7)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-7">build/scripts/zip_extensions.py</a>
(103)
</li>
<li>
<strong>R</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-8">commotion_client/GUI/__init__.py</a>
(0)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-9">commotion_client/GUI/crash_report.py</a>
(2)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-10">commotion_client/GUI/main_window.py</a>
(172)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-11">commotion_client/GUI/menu_bar.py</a>
(197)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-12">commotion_client/GUI/system_tray.py</a>
(2)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-13">commotion_client/GUI/ui/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-14">commotion_client/GUI/ui/welcome_page.ui</a>
(53)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-15">commotion_client/GUI/welcome_page.py</a>
(46)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-16">commotion_client/assets/commotion_assets.qrc</a>
(4)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-17">commotion_client/assets/images/question_mark_filled20.png</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-18">commotion_client/assets/images/question_mark_filled41.png</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-19">commotion_client/assets/stylesheets/forms.ss</a>
(56)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-20">commotion_client/commotion_client.py</a>
(199)
</li>
<li>
<strong>D</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-21">commotion_client/data/extensions/test_ext001.conf</a>
(8)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-22">commotion_client/extensions/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-23">commotion_client/extensions/config_editor/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-24">commotion_client/extensions/config_editor/config_editor.conf</a>
(6)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-25">commotion_client/extensions/config_editor/main.py</a>
(60)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-26">commotion_client/extensions/config_editor/test.py</a>
(3)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-27">commotion_client/extensions/config_editor/ui/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-28">commotion_client/extensions/config_editor/ui/config_manager.ui</a>
(1928)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-29">commotion_client/extensions/unit_test_mock/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-30">commotion_client/extensions/unit_test_mock/main.py</a>
(70)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-31">commotion_client/extensions/unit_test_mock/test.conf</a>
(9)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-32">commotion_client/extensions/unit_test_mock/test.py</a>
(5)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-33">commotion_client/extensions/unit_test_mock/test_bar.py</a>
(43)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-34">commotion_client/extensions/unit_test_mock/ui/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-35">commotion_client/extensions/unit_test_mock/ui/test.ui</a>
(1928)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-36">commotion_client/extensions/unit_test_mock/units.py</a>
(0)
</li>
<li>
<strong>D</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-37">commotion_client/utils/config.py</a>
(126)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-38">commotion_client/utils/extension_manager.py</a>
(776)
</li>
<li>
<strong>D</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-39">commotion_client/utils/fsUtils.py</a>
(42)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-40">commotion_client/utils/fs_utils.py</a>
(147)
</li>
<li>
<strong>M</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-41">commotion_client/utils/logger.py</a>
(208)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-42">commotion_client/utils/settings.py</a>
(73)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-43">commotion_client/utils/validate.py</a>
(342)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-44">docs/extensions/extension_template/config.json</a>
(9)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-45">docs/extensions/extension_template/main.py</a>
(53)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-46">docs/extensions/extension_template/settings.py</a>
(28)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-47">docs/extensions/extension_template/task_bar.py</a>
(30)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-48">docs/extensions/extension_template/test_suite.py</a>
(53)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-49">docs/extensions/tutorial/images/design/ssid_sketch.png</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-50">docs/extensions/writing_extensions.md</a>
(189)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-51">docs/style_standards/README.md</a>
(66)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-52">docs/style_standards/google_docstring_example.py</a>
(223)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-53">setup.py</a>
(88)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-54">tests/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-55">tests/mock/extensions/unit_test_mock</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-56">tests/run_tests.py</a>
(32)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-57">tests/utils/__init__.py</a>
(0)
</li>
<li>
<strong>A</strong>
<a href="https://github.com/opentechinstitute/commotion-client/pull/26/files#diff-58">tests/utils/extension_manager_tests.py</a>
(559)
</li>
</ul>
<h4>Patch Links:</h4>
<ul>
<li><a href='https://github.com/opentechinstitute/commotion-client/pull/26.patch'>https://github.com/opentechinstitute/commotion-client/pull/26.patch</a></li>
<li><a href='https://github.com/opentechinstitute/commotion-client/pull/26.diff'>https://github.com/opentechinstitute/commotion-client/pull/26.diff</a></li>
</ul>
<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br>Reply to this email directly or <a href='https://github.com/opentechinstitute/commotion-client/pull/26'>view it on GitHub</a>.<img src='https://github.com/notifications/beacon/3074564__eyJzY29wZSI6Ik5ld3NpZXM6QmVhY29uIiwiZXhwaXJlcyI6MTcxMzI5ODAwMCwiZGF0YSI6eyJpZCI6MzAxODcxMzd9fQ==--fe407aba51f0f11ea4209eb2bfbd009b20ba93f0.gif' height='1' width='1'></p>