[Issue 139: implement promotion engine (144)](https://github.com/al-niessner/DAWGIE/commit/10653e790971966ebb1a8d26831ee4fc9869f41c)
*Author*: al-niessner
*Date*: Sun, 20 Feb 2022 15:55:33 -0800
* finer control over promotion
Added the switch dawgie.context.allow_promotion that can turn it on and off easily. There are conditions that if not followed will really foul up promotion. The belief is that EXCALIBUR might currently be existing in those conditions such that promotion will be bad for them.
* extend unittest
The unit testing PromotionEngine required extension to properly test the addition of dawgie.context.allow_promotion.
* extend promotion
dawgie.pl.promotion to use the current AE to find the dependencies.
dawgie.pl.context changed to support the new allow_promition.
updated test 12 to handle the allow_promotion flag with if the AE is set.
* skeletal promotion
* mark this point
It seems this is mostly wrong but want to mark this point in case the new idea is wrong and need to go back. The changes will remove the constraint first and make it based on just he output and what it will require to run. If it has been run with those conditions previously then use just the already known output. Does not require the complicated constraints and inputs that this edition has partially impleemted.
* promotion should find junctures
Worked consistent() a couple of times to finally arrive at this algorithm should select the most recent equivalent output that matches the current inputs. Left comments in place to highlight the algorithm. It bases its decision on the current version of the algorihm and its output over time. Using the input it would have now if it ran, it then uses the output runids to check for inputs that match what would be the lastest inputs.
The most interesting point, is that promotion should go and this should be done always for all items. However, shelf cannot currently support this level of interigation. However, it still should be scheduled for the next big releaes of dawgie to replace the current scheduler.
* promition adds entries
Now that dawgie.db.consistent() returns what should be a valid juncture, check then install the juncture. promotion() was updated to reflect a possible failure of the juncture insert will force the item to run.
All checks pass but unit testing is not done.
* update all files for license/copyright updates
This update is a pain and probably unnecessary but it is nice in that forces an update to containers, external dependencies, etc that can be easily forgotten. In updating the Dockerfile.cit moved to more modern tools that worked with a newer Ubuntu 20.04 in Dockerifle.os. Many other changes took place after these, but they were the start.
* .ci/check_03.sh updated for new tests
Test/test_13.py was added to do the bulk of the promotion testing within the databases themselves. Right now, shelf is not able to support promotion so postgres is the only database being tested. Test/test_13.py will also work well to have consistent behavior among all supported databases.
To support Test/test_13.py, .ci/check_03.sh was extended to download postgres image, start it, and prepare it (createdb) then clean up the container when finished.
* logging seems to have changed
Somehow, maybe pytest, logging.basicConfig() is being called and so the handler is no longer being set. Changed to add the handler to the child used for testng. Since the main probgram has more control over logging.basicConfig() and issue 45 focused on the handlers behavior, this change so keep the spirit of the test while ignoring updates to external tools.
* expand check_03,sh setup
Now that promotion can be checked for postgres, it is important to load and install postgres during check_03.sh. Since it uses the postgres:latest docker image to complete this work, the expansion of check_03.sh is direct. It first checks to see if the docker image is present then the docker network then it starts the container and creates the needed database. When complete, it stops the docker container.
* apparently bridge is not good so default to citnet
Co-authored-by: Al Niessner <Al.Niessnerxxx.xxx>
[add exercise build](https://github.com/al-niessner/DAWGIE/commit/7af9d43314e0fe4576ec0a043c69c4dc6022be81)
*Author*: Al Niessner
*Date*: Tue, 7 Dec 2021 14:51:43 -0800
[Issue 153 : scripts to help inter data (154)](https://github.com/al-niessner/DAWGIE/commit/80555da5ddac8f0fea6f25f8bf4cafd73c10a1a1)
*Author*: al-niessner
*Date*: Sat, 13 Nov 2021 08:29:07 -0800
* tool to inter data for a mausoleum
It currently only works with postgres and only processes the backup file to find and isolate the desired state vectors.
* move blovs too
* remove unnecessary dirs
* add licensing info
Co-authored-by: Al Niessner <Al.Niessnerxxx.xxx>
Co-authored-by: Al Niessner <Al.Niessnerjpl.nasa.gov>
[Issue 156: move to circle CI (157)](https://github.com/al-niessner/DAWGIE/commit/f4dcd935c28e03cbebe339c6128d3ba6a2aa6415)
*Author*: al-niessner
*Date*: Sat, 13 Nov 2021 08:07:13 -0800
* move from travis to circle
The Yaml and concept between circle and travis is completely different. Updated environment variables ans the like. Created a new GHE token with the correct access and it works.
[issue 151 - fix first param (152)](https://github.com/al-niessner/DAWGIE/commit/f90ba1f21c93e06b83638c04b1f2557abc9c3b8d)
*Author*: al-niessner
*Date*: Mon, 29 Mar 2021 17:53:00 -0700
* fix first param
In each case, the first param (name) should be a string.
* update test code
Declared the first parameter of every factory function a string
[Issue 149 - fix dawgie.tools.compliant (150)](https://github.com/al-niessner/DAWGIE/commit/57601dc43397778f2f3d63a11bc672599904daa8)
*Author*: al-niessner
*Date*: Mon, 29 Mar 2021 17:20:22 -0700
* use inspect correctly
The old code, for whatever inane reason, used str(param) then did string work. Instead use param.default and param.annotation to extract the information correctly. Somewhere between this version of Python and 3.8.5 the str(param) is going to add spaces breaking the code.
[bug fixes from 1.2.x branch (148)](https://github.com/al-niessner/DAWGIE/commit/d4cf89cd7962ae0c7812018d94ce656f08f0f491)
*Author*: al-niessner
*Date*: Thu, 3 Dec 2020 09:51:58 -0800
* add version information (125)
* add version information
Make sure that the versions are always strings by forcing them that way so that the log does not error because of the %s in the log message.
Upgraded test_10 to verify that the log message is correct.
* fix security problem (147)
[Issue 136: add promotion hooks (138)](https://github.com/al-niessner/DAWGIE/commit/93a33cf41dce63b4d047388172455db04b2528dc)
*Author*: al-niessner
*Date*: Fri, 1 May 2020 12:42:02 -0700
* alter scheduler to enable auto promotion
Added hooks to dawgie.pl.schedule to trigger the auto promotion. Insterted the call to the dawgie.pl.schedule.update() which will add items as required by results sent from dawgie.pl.worker. Added a conditional to dawgie.pl.schedule.next_batch() that will do promotion before scheduling new jobs so that the new jobs have the current best estimate to work with.
Added dawgie.pl.auto which contains the stub for Promote that keeps the current behavior but concentrates where changes need to be made for auto promotion.
* add unittest
While there is not much to test, add what can be done. The first and basically only interesting test is to see that __call__ is working as expected. Wrong ars are processed correctly as is more. Log message shows up correctly as well.
* rename it all
Unhappy with dawgie.pl.auto.Promote renamed it to dawgie.pl.promotion.Engine.
Co-authored-by: Al Niessner <Al.Niessnerxxx.xxx>
[update new values (135)](https://github.com/al-niessner/DAWGIE/commit/1aa8d33a6917611aeb0615762708275db0d0ec3b)
*Author*: al-niessner
*Date*: Mon, 20 Apr 2020 12:09:30 -0700
* update new values
dawgie.Analysis, dawgie.Regress, and dawgie.Task are all updated to expect a tuple of name,isnew instead of just name. dawgie.pl.worker already handles the list as an object and simply pass it along requiring no changes.
dawgie.db.post and dawgie.db.shelf update the list and are updated as well. Instead of adding the list conditionally, they always add to the list and pass along if it is new or not.
dawgie.pl.schedule was updated to work with the tuple. It behaves as it always has or at least that is the intent but now allows for expansion in ability.
* update testing
The test used just a list of strings updated it to be a list of tuples.
Co-authored-by: Al Niessner <Al.Niessnerxxx.xxx>
[Issue 60: leaving state vector empty (133)](https://github.com/al-niessner/DAWGIE/commit/77be1db9f1e1f9a4963259f92bade904a579e799)
*Author*: al-niessner
*Date*: Mon, 13 Apr 2020 13:22:58 -0700
* handle invalid data exceptions
dawgie supports two types of exceptions to be thrown: dawgie.NoValidInputDataError and dawgie.NoValidOutputDataError. In these two cases, the job should be considered a success but not move the target forward in the processing tree. This creates a try state condition which will be True (full success), None (invalid data exception), False (all other exceptions).
* handle the tri-state
Add an invalid state to the messaging that is passed about. Updated dawgie.pl.farm to translate the tri-state message from teh workers to the dawgie.pl.jobinfo.State.{failure,invalid,success} as required.
* connect the error step
Added dawgie.pl.schedule.purge() with empty implementation. Walking down the tree and removing targets is going to take some work. Just put the empty implementation to connect the dawgie.pl.farm.
Connect dawgie.pl.farm._res() to dawgie.pl.schedule.purge(). The current behavior is the same.
* purge target from possible work
Simply walk down the children nodes and remove target from do, doing, and todo. While this straight forward, it is not perfect. If another job is in progress that does create data for this target, they will once again cause the target show up in the faulting nodes children if the tree is such. Still, it is the best and the pipeline is robust enough to continue processing depite the error.
* verify purge
Actually test that the purge works as expected. Created a simplified tree and opped one of the tarets as expected. Note that this example also shows that if node a then trips after b as the test inidicates, d will fire off then fail preventing f from being triggered.
* fix problems found in testing
The dawgie.pl.farm.Hand._res() implementation was less than perfect. First, did a small amount of refactoring to make the function static as it really is. Then, only computes some values once rather than serveral times in the function. Most important, the test of which branch to take required updating to verifiy against dawgie.pl.jobinfo.State.success rather than just that is positive looking.
* verify purge via message return
Given the response is normally passed from the worker back, the handler of these responses - dawgie.pl.farm.Hand._res() - has to correctly call purge. Added a test to show that is is actually happening as expected.
Co-authored-by: Al Niessner <Al.Niessnerxxx.xxx>
[Issue 128: check on events (132)](https://github.com/al-niessner/DAWGIE/commit/186d6c7e36ecf785dcfaa31434abf37f5537308d)
*Author*: al-niessner
*Date*: Mon, 9 Mar 2020 12:45:32 -0700
* update test 6
Show that dawgie.pl.schedule.defer() is working as it should be.
While knowing that the events are triggering on schedule, the next problem is that they also show up in the next job trigger. Tested for it as well.
[Issue 129: implement externalization of events (131)](https://github.com/al-niessner/DAWGIE/commit/7443a5f4b6876f1c4d20e739935ea11d09838344)
*Author*: al-niessner
*Date*: Wed, 4 Mar 2020 12:53:29 -0800
* externalize events
The front-end should publish the known event list and duration to next event. This is as simple as adding a new DynamicContent element that makes the endpoint.
* implement event externalization
Convert the list of periodic events (nodes that contain a list of moments) to a list of dictionaries that are the actor and delays. These are then converted to a list of objects in JSON by the front-end for it to display.
* add unit testing
Verify dawgie.pl.schedule.view_events() correctly converts the periodic list using a known set of events and momements when they should happen.
[Issue 103: make aspects quack like dicts (121)](https://github.com/al-niessner/DAWGIE/commit/ef9a1b10d2733e4a0ad8403f0ff841df6f3e0701)
*Author*: al-niessner
*Date*: Fri, 28 Feb 2020 14:07:59 -0800
* rearrange db util
To make space for the new aspect implementations. Created a package dawgie.db.util then moved the module dawgie.db.util to the package so that the existing code could remain unmodifiled.
* Update the aspect interface
Add the container methods the aspect should implement. They keep the container read-only.
* general implementaiton of container needs
Most of the work of the container can be done via the standardieze module that passes the buck at the critical moment. Particularly when doing the lazy loading of the data from the database.
* dawgie.Timeline as well
Just as dawgie.Aspect behaves like a write only dictionary so should timeline. Updated the comments and added the appropriate abstract functions.
* update implementations
With the framework in place, replace the current implementations for both post and shelf to implement the dictionary as documented. Since both dawgie.Aspect and dawgie.Timeline behave roughly the same, then implementation should work for both.
* fix dawgie.context.dumps()
Because of problems in a project included a unit test to verify that dumps() is working. Fixed dumps() when problem became apparent.
[add version information (125) (127)](https://github.com/al-niessner/DAWGIE/commit/70fa0a5f19ade32c1386214e791f28c7a893b8fb)
*Author*: al-niessner
*Date*: Sat, 22 Feb 2020 14:57:47 -0800
* add version information
Make sure that the versions are always strings by forcing them that way so that the log does not error because of the %s in the log message.
Upgraded test_10 to verify that the log message is correct.
[get bug fix from 1.2 series](https://github.com/al-niessner/DAWGIE/commit/2de908f9d1f4f2f7fbef91caf7a7adc505e56f7c)
*Author*: Al Niessner
*Date*: Thu, 13 Feb 2020 14:44:38 -0800
[issue 32: aspects implemented similarly (120)](https://github.com/al-niessner/DAWGIE/commit/b78e30f7a023ed3899e9b319b4a69a67a1c37d01)
*Author*: al-niessner
*Date*: Thu, 13 Feb 2020 14:37:12 -0800
* make dawgie.Aspects same
Turns out that post and shelf did not have the same key order -- tn, fsvn in post vs. fsvn, tn for shelf. This is a patch to make them the same tn, fsvn.
* fix patch
Need to create the dictionary structure as it is being filled.
[fixed (119)](https://github.com/al-niessner/DAWGIE/commit/8b55a4ce5e52f8af677ac26edd41810b5f2fe7e2)
*Author*: al-niessner
*Date*: Wed, 5 Feb 2020 12:48:42 -0800
The problem was a bad dawgie.pl.LogDeferredException implementation. That was fixed in issue_111 and now this is back to working.
[Issue 111: redo LogDeferredException (118)](https://github.com/al-niessner/DAWGIE/commit/08daf82f0981ba3a151615d29248d3919c8ff09d)
*Author*: al-niessner
*Date*: Wed, 5 Feb 2020 12:39:08 -0800
* refactored dawgie.pl
LogDeferredException was changed to two classes: LogFailure and DeferWithLogOnError. The first does nothing but log the failure including a stack trace if it is an exception. The latter registers the callback and hooks in the previous log on an error. Removed LogDeferredException.
* fix references to dawgie.pl.LogDeferredException
Some modules, dawgie.schedule and dawgie.pl.worker.aws, use DeferWithLogOnError. They need it to create the deferred then jump to the given callback (cb) that takes no arguments.
The others use just the logging use LogFailure. .
* fix up main
With all of the other problems fixed, restructure __main__. Defined the correct class in the main itself since no other class should be using it. Fixed up all of the naming after that.
[move the digit back to the front of the filename (116) (117)](https://github.com/al-niessner/DAWGIE/commit/e6c70117ba4b4cfdbda34c4f6b125ae538f93cd5)
*Author*: al-niessner
*Date*: Tue, 4 Feb 2020 16:25:36 -0800
[move the digit back to the front of the filename (116)](https://github.com/al-niessner/DAWGIE/commit/0a857cd4db35f3c279a4851f4a365b79037e2180)
*Author*: al-niessner
*Date*: Tue, 4 Feb 2020 16:21:52 -0800
[issue 114: improve version information (115)](https://github.com/al-niessner/DAWGIE/commit/8971056d84f4f8883b2b1ca7c76a253f4cd17aec)
*Author*: al-niessner
*Date*: Mon, 3 Feb 2020 12:14:50 -0800
* export versions
Update setup.py to output the list of modules to dawgie/fe/requirements.txt with just the module names and nothing else. The app can use that file to look up the current versions.
Update dawgie.fe.app to add a new endpoint (URL) that outputs a JSON object with a list of the current versions.
* change tactic
Moved from using importlib to pip. The distribution names are not the same as the package names. Since the requirement file is being used to find the versions, then just use pip all the way instead of guessing package names from it.
[Issue 101: thread state changes (112)](https://github.com/al-niessner/DAWGIE/commit/5b54873bc4dfdf688911d2cabf0f4d3db602cada)
*Author*: al-niessner
*Date*: Wed, 29 Jan 2020 15:20:41 -0800
* altered archiving
One of the two possible delays is building the trace report. Moved an active pipeline choice in dawgie.pl.state.FSM.archive() to dawgie.pl.state.FSM._archive() then called it a twisted thread from archive().
Had to update Test/test_02.py because the import of dawgie.pl.farm requires that dawgie.context.fsm be present and alive.
* thread navel gazing
While strictly not perfect, threaded the navel gazing. Navel gazing consists of collecting older metrics, which can take a while, then computing the average of the resources used for auto detection of work distribution. However, the worst case with being threaded is that decisions may use old data.
[merge 1.2.x](https://github.com/al-niessner/DAWGIE/commit/89b0f8d72d9b1636d3bfb37178ed536955837f99)
*Author*: Al Niessner
*Date*: Tue, 28 Jan 2020 15:55:29 -0800
[update log messaging (110)](https://github.com/al-niessner/DAWGIE/commit/ee12fb1cb3c45e0316bcf4679641c6813dbe85ea)
*Author*: al-niessner
*Date*: Tue, 28 Jan 2020 15:26:56 -0800
When deferring work, the automatic logging of errors from the callback() is handled by dawgie.pl.LogDeferredException. This is a helper class that is hiding information from exceptions.
Update dawgie.pl.LogDeferredException to build a more instructive message (parent that started the deferred work) during object contstruction. This requires increasing the number of parameters. Many files where touched to handle the changes in the constructor.
dawgie.pl.LogDeferredException.log() changed to pass the Failure object or Exception object to log.exception() directly. Simple testing shows that some sort of stack trace should be included using this method over the Failure.value attribute.
[Merge branch 'Release-1.2.x' of github.com:al-niessner/DAWGIE](https://github.com/al-niessner/DAWGIE/commit/5e8f233477072f3bd6e242f02a91151dc9ad4b08)
*Author*: Al Niessner
*Date*: Mon, 27 Jan 2020 12:47:51 -0800
[Issue 100: enhance rule 01 (105)](https://github.com/al-niessner/DAWGIE/commit/ad879d95fb5c3a62946c8742ef0d004628bb0a82)
*Author*: al-niessner
*Date*: Mon, 27 Jan 2020 12:46:48 -0800
* updated factory comments
The abstract factories are crucial but not well documented. Updated the documentation dawgie to help explain what needs to be done and how it should be done.
* extend rule 01
The factory methods that dawgie depends on were not being fully checked. The number of arguments was being checked but that let errors creep through with defaults and types. Some parts of the system require default values for the factory arguments. Therefore, extended the rule 01 testing to be parameter count first, then default values followed by types.
* updated the testing
[fix conflict](https://github.com/al-niessner/DAWGIE/commit/b82effa8164b841c15068ce964a521557869bc5b)
*Author*: Al Niessner
*Date*: Fri, 24 Jan 2020 07:53:44 -0800
[Merge branch 'Release-1.2.x' of github.com:al-niessner/DAWGIE](https://github.com/al-niessner/DAWGIE/commit/4137685531a7893656f1f87eb0fd2ac9947b4407)
*Author*: Al Niessner
*Date*: Fri, 24 Jan 2020 07:49:23 -0800
[use a generator (104)](https://github.com/al-niessner/DAWGIE/commit/8503991b78fab95d46a8bb69b208be28293ba6bb)
*Author*: al-niessner
*Date*: Thu, 23 Jan 2020 14:38:50 -0800
* use a generator
as_dict() was a bad shortcut. Moving to creating a generator that returns the tuple that dawgie.db.post does to reflect the use of dawgie.Aspect(). Therefore, removed as_dict() and made the __iter__() a generator which is supposed to just do the right thing.
[use a generator](https://github.com/al-niessner/DAWGIE/commit/22744b07cc7b56823fcba57a8ed1cdb7efdc6600)
*Author*: Al Niessner
*Date*: Thu, 23 Jan 2020 14:27:38 -0800
[Issue 98: refactor dawgie.pl.worker (99)](https://github.com/al-niessner/DAWGIE/commit/6ee4bf406aec33963f6ace2e2b8a12c9a0c63a46)
*Author*: al-niessner
*Date*: Wed, 15 Jan 2020 14:36:36 -0800
* rearrange workering modules
Changed dawgie.pl.worker from a module to a package. When the worker was just a cluster agent, the module was sufficient. Now that AWS is looming and different worker styles are possible, moving the workers down from dawgie.pl to dawgie.pl.worker where then multiply as needed.
Moved dawgie.pl.worker (the module) to dawgie.pl.worker.cluster (module). The __main__ bit was removed and moved into dawgie/pl/worker/__main__.py. Fixed up the imports as well. Moved the Context common object to dawgie/pl/worker/__init__.py. The new arrangement makes what is needed for being a woker somewhat clearer.
Moved dawgie.pl.aws to dawgie.pl.worker.aws and touched up the imports.
[Issue 91: refactor dawgie.pl.start (96)](https://github.com/al-niessner/DAWGIE/commit/0705168634e897dee809fca9cea60a6ed853e427)
*Author*: al-niessner
*Date*: Wed, 15 Jan 2020 10:03:05 -0800
* rename
* clean up old start
Changed the indentation and organized the code now that the code is not in its own module. Moved the two support functions _main() and _merge() to __init__.py and then impoted them locally to __main__.py.
* change old dynamic generated references
pylint has a hard time with the fsm because most of it is added at run time by the transitions module. Updated from pl.start to context and they should now all work out cleanly.
* clean up perphial modules
Now that dawgie.pl is in good condition. Need to use pylint to find all of the reference to the old dawgie.pl.start.fsm and replace them with dawgie.context.fsm.
* need to pass the args
* rearrage startup some more
* need an import
* fix typo
[Issue 75 1.2.x (issue_75-1.2.x to Release-1.2.x) (93) (95)](https://github.com/al-niessner/DAWGIE/commit/9573e97810845926a16e59342054afcb210f2234)
*Author*: al-niessner
*Date*: Mon, 13 Jan 2020 10:32:09 -0800
* issue_75: Changes, including fix for bug with duplicate tags, spacing reformat, fix for lists not using 'li', fix to allow 'void' tags proper formatting, addition of capacity to add raw css and stylesheets, addition of pre tag, modify add_primitive to display inline with add_declaration, addition of class and id attributes, spacing tweaks per PEP8, regroup writing of configuration (head) versus presentation (body) tags, disable writing of primitives after declarations since they are now written inline. ...
* issue_75: Changed approach to keep copy of old methods guaranteeing strict backwards compatibility. Also, new method will use inherited __content value to append, then guaranteeing exact ordering with all other subclasses. Touchpoint. ... TO-DO: Modify div for ease-of-use to self-close and include explicit classes and/or style. Also, wrap __content assignments with AsIsText object to ensure they render as expected.
* issue_75: Fixed errant return type and re-added bokeh import removed by IDE during cleanup.
* issue_75: Standardized templating on f-strings, added clean methods to limit malicious code, standardized class, id and style attributes, rearranged order to support writing customizations after file loads for script and css imports, remove superfluous variables added to init, separated legacy and new functions to support backwards compatibility.
* clean up
Keep imports explicit (no from unless name is super long) and keep import alphabetic (or the best that I remember the alphabet)
Co-authored-by: al-niessner <1130658+al-niessnerusers.noreply.github.com>
Co-authored-by: John Engelke <52300928+jpl-jengelkeusers.noreply.github.com>
[Merge branch 'master' into Release-1.2.x](https://github.com/al-niessner/DAWGIE/commit/576741a60c22e72b7167964d0c9dfc786195318a)
*Author*: al-niessner
*Date*: Mon, 13 Jan 2020 10:28:49 -0800
[Issue 75 1.2.x (issue_75-1.2.x to Release-1.2.x) (93)](https://github.com/al-niessner/DAWGIE/commit/c57f6b6e26f7c2944f555248514e3579b716467b)
*Author*: John Engelke
*Date*: Mon, 13 Jan 2020 10:26:01 -0800
* issue_75: Changes, including fix for bug with duplicate tags, spacing reformat, fix for lists not using 'li', fix to allow 'void' tags proper formatting, addition of capacity to add raw css and stylesheets, addition of pre tag, modify add_primitive to display inline with add_declaration, addition of class and id attributes, spacing tweaks per PEP8, regroup writing of configuration (head) versus presentation (body) tags, disable writing of primitives after declarations since they are now written inline. ...
* issue_75: Changed approach to keep copy of old methods guaranteeing strict backwards compatibility. Also, new method will use inherited __content value to append, then guaranteeing exact ordering with all other subclasses. Touchpoint. ... TO-DO: Modify div for ease-of-use to self-close and include explicit classes and/or style. Also, wrap __content assignments with AsIsText object to ensure they render as expected.
* issue_75: Fixed errant return type and re-added bokeh import removed by IDE during cleanup.
* issue_75: Standardized templating on f-strings, added clean methods to limit malicious code, standardized class, id and style attributes, rearranged order to support writing customizations after file loads for script and css imports, remove superfluous variables added to init, separated legacy and new functions to support backwards compatibility.
* issue_75: Fix unusual Pylint errors.
* issue_75: Fix unusual Pylint errors that apparently still exist.
* clean up
Keep imports explicit (no from unless name is super long) and keep import alphabetic (or the best that I remember the alphabet)
Co-authored-by: al-niessner <1130658+al-niessnerusers.noreply.github.com>
[Issue 90: excise SDP (92)](https://github.com/al-niessner/DAWGIE/commit/58177894f467fa08a71f029743e2dbd2d84f3c36)
*Author*: al-niessner
*Date*: Wed, 8 Jan 2020 10:47:24 -0800
* change dawgie.pl, dawgie.tools, dawgie.fe, and unit testing
Updated farm, start, and state such that all SDP and sdp became FSM and fsm respectively.
* update db modules as well
The shelf and util modules were different then the previeous alterations where SDP was used to rever to an FSM. In this case, sdp was hardcoded as the db_name. Hence, all reference where changed to dawgie.context.db_name.
* update pylint RC
Many of the FSM functions are added at run time by the transistions package. Had to change sdp to fsm in the pylint RC to account for this.
[Issue 84: remove hardcoded email alerts (89)](https://github.com/al-niessner/DAWGIE/commit/34bbdb7ad0afdc4e7fbe3ce57f81504964470cd6)
*Author*: al-niessner
*Date*: Wed, 8 Jan 2020 09:51:00 -0800
* add email alert destination
The first part of the problem is to add a configuration or context driven destination for alerts via email. This was done by adding dawgie.context.email_alerts_to that follows the usual paradigm.
* complete email alerts
Updated dawgie.tools.submit to use dawgie.context for the email list. If the list is not defined, then just log it. In fact, the message will always be in the log file for those not on the mailing lists.
Updated dawgie.fe.submit to reflect changes in dawgie.tools.submit.
[Issue 76: support https (79)](https://github.com/al-niessner/DAWGIE/commit/7eac03e3b12933c648b469fc077c42f4b78a208d)
*Author*: al-niessner
*Date*: Tue, 7 Jan 2020 15:00:59 -0800
* required for twisted to do https
* add hook for cert
Seems that all that is needed is the SSL PEM file as it contains both the cert and the key. Twisted uses this single file to initiate an https server.
* clean up in preparation
Found two mains in dawgie.fe. Removed what appears to be the older one and it looks fine in comparison to the actual main.
* add https hooks
When starting the gui, check to see if a pem file exists. If it does and is a real file, then try to use it as the cert. While this matches the requirements in the twisted documenation it still needs to be tested somehow.
* update rules
twisted.internet.reactor.listenSSL is generated at run time.
* runs standalone with https
The PEM cert and key must be in a single file. Once that was done, it worked.
[Issue 87: clean up front-end (88)](https://github.com/al-niessner/DAWGIE/commit/2f99d021be7c79c67b790c328cb52e5d15d89ea5)
*Author*: al-niessner
*Date*: Mon, 6 Jan 2020 12:28:54 -0800
* change to call object
* update DynamicContent
Check self.__fnc to see if it is an instance of dawgie.fe.Defer and act accordingly. Now the call to the object should act like a function too.
* change the function names
Moved the old function names to __call__ so that the object becomes callable.
[need to call the function not the object (86)](https://github.com/al-niessner/DAWGIE/commit/24da12bd3b6fa5e58eb0442279257fd6525ca4e0)
*Author*: al-niessner
*Date*: Mon, 6 Jan 2020 12:09:35 -0800