Sunday, December 3, 2017

Change Log: 2.57.1091

Finally finished my Lonely Tree!
Release 2.57.1091 is primarily a unscheduled tools/admin update to the API.

As usual, you can hit the jump for complete details, but, the executive summary of this release is that I had to call an audible, push back some planned feature work and roll out a non-trivial overhaul/upgrade of the CLI tools I use to administer the Manager.

(In case you are wondering about why I made the decision to postpone planned feature work to focus on administrative tools, the main reason is that administration has been sucking a lot of my time lately.

At the time of this posting, over 100 users have purchased a subscription, more than 1200 new users have registered in the last 30 days (!) and, basically, during the last two weeks, supporting all of that user activity has been a high-touch/manual activity for me and I needed to create some new efficiency.)

Status flag survivor tags!
But it's not all admin tools in this one. In addition to the usual corrections and fixes, release 2.57.1091 finally gets around to a feature that I've had on the back-burner and only just now pulled the trigger on: survivor status flags in the Campaign Summary view "survivor tags".

Now, when survivors have a disability/status on account of an impairment, you'll see a little flag for it right on the Campaign Summary view.

Finally, and probably most importantly, release 2.57.1091 changes the way that multiple/bulk survivor creation works:

  • First off, the feature is now a Survival +5 subscribers-only feature. Like all of the non-essential/super-user functionality of the Manager, its proper place is behind the support wall, and that's where it shall live henceforth.
  • The controls have been (dramatically) improved and now allow survivor parents to be specified. 
  • Creating multiple survivors no longer reloads/refreshes the view. Instead, once the new survivors are created, users may immediately click into them without leaving the current view.
Check the feature demo here for a quick run-through of how it looks/works.

Thanks for using the Manager!




Lonely Tree details, including finished Lonely Fruit.

Corrections and Fixes



  1. Corrected the description and modifiers of the "Rival's Scar" A&I (Spidicules). -Shawn S
  2. Fixed a typo in the API models.survivors.Survivor.new() method that caused newly created survivors to get their (non-existent or incoming) weapon proficiency type normalized to a handle. -Caleb
  3. Addressed an issue where the legacy webapp could throw a traceback during multiple survivor creation-flubberdeblubber
  4. Fixed a typo that prevented the full page loader from showing/spinning on new settlement creation.
  5. Addressed an issue where survivors with multiple instances of the same A&I (e.g. severe injuries that allow multiple assignments, etc.) would cause a JS error to be throw on the Campaign Summary view. -CMills
  6. Fixed an indentation issue in the API's utils.get_time_elabsed_since() method that failed to properly handle ages older than two years (which only just surfaced because, hey-hey: the Manager is over two years old now!).
  7. Addressed an issue in the Survivor object add_note() method where the API route failed to return the OID of the newly-created note-Caleb
  8. Addressed an issue in models.users.token_to_object() where testing the request for JSON could throw an exception if a POST contained no params.
  9. Addressed an issue where POSTing incorrectly formatted preferences to the API's /user/set_preferences/<oid> route threw a not-helpful error. Also updated the docs with correct syntax (which was previously incorrect). -Khoa
  10. Addressed an issue where the Survivor set_survival() method was doing legacy-style logging and failing to log survival updates to the Settlement Event Log-Caleb
  11. Addressed an issue where the players/notes controls on the sidenav had a refresh button that reloaded the whole view (pointlessly): replaced the button with an initialize() call. -Heinz M
  12. Addressed a wide resolution presentation issue causing the remove button for settlement notes to be too tall for one-line notes.

Application Enhancements


  1. Wrapped the POST in the legacy api.post_JSON_to_route() method in a try/exception in order to gather info on our recurring encoding error.
  2. Deprecated support in session.py for the 'bulk_add_survivors' parameter (the webapp throws an exception now if it detects the param).
  3. Created a new UI/UX for adding multiple survivors:
    1. added a new controller to kdmManager.js for bulk survivor adds
    2. rootController.set_jet_from_cookie() is called on init now (and I removed numerous, one-off, down-scope calls to the method).
    3. Wired up the new controller to POST to the new API endpoint (below) for mass survivor creation.
    4. Adding multiple survivors now features controls for setting one or both survivor parents-Eugene S
    5. The instructions for creating multiple survivors are dynamic (i.e. and change depending on the user preference re: random names).
  4. Deprecated the old JS method for updating user preferences with a one-off XHR POST to the legacy webapp.
  5. Styled 'sysadmin' type settlement event logs.
  6. Expanded Campaign Summary "survivor tags" to include survivor status/capabilities, e.g. "Cannot consume", "Cannot be nominated for intimacy", etc.
  7. The pink button that removes settlement notes looks clickable now (at wide res).
  8. The corner loading spinner now has a higher z-index than modal windows (so it won't get lost when looking at certain modals that require a refresh).
  9. Adding a note to the settlement notes (from the sidenav) now blanks out the input field after the note is added. 

API Development


  1. Added a new endpoint to the /new/<action> API hook called survivors to facilitate requests to add multiple survivors to a settlement: 
    1. updated request_broker.py to handle the action
    2. Created a new, one-off function in models.survivors.py called add_many_surivivors() that is called by the request_broker and creates survivors in bulk.
    3. Added the new endpoint to the docs. Wrote a nice table for it and whatnot.
  2. Updated users.token_to_object() so that setting the 'strict' kwarg to False completely avoids JWT decoding and just looks up the user the old fashioned way (i.e. assumes the token is expired, doesn't check its date stamp and, instead, checks its password)
  3. Did a pretty major refactor of admin.py for organization and clarity. Also added some new features/functionality:
    1. Cleaned up the formatting/presentation of the CLI display of user info dumped by admin.py when updating subscription info.
    2. admin.py normalizes emails to all lowercase when looking them up.
    3. Added support to admin.py for the --subscriptions flag, which dumps generic subscriber meta stats/info.
    4. Added support for a new flag called --removed_settlements that dumps summary info on removed settlements.
    5. Created a new method in admin.py called dump_settlement_to_cli() that works like dump_doc_to_cli() but is especially designed to represent settlements. It displays special info for removed settlements.
    6. Created a similar method for survivors called dump_survivor_to_cli() that basically does the same thing for survivors.
    7. Added support to admin.py for the -S flag, which dumps a settlement summary (using the new methods).
    8. Added support for --unremove when working with -S that unremoves auto-removed settlements/survivors. -CMills
    9. Added support for verbose output (via -v flag) to certain types of admin.py operations/output.
    10. Updated dump_doc_to_cli() method to respect OrderedDict key order.
    11. Refactored the update_user() method so that it ALWAYS dumps a summary of the user first and then evaluates incoming options to decide whether to update (e.g. to update subscriber info).
  4. Updated the User class serialize() method to support 'dict' as a return type, which will get you a dict back.
  5. Added unremove() methods to the Survivor and Settlement object methods. They're dead simple, as one might expect. -CMills
  6. Added a new kind of Settlement Event Log type called 'sysadmin' for use in cases where I have to intervene on a user asset. 
  7. The serialized User object now includes a count of how many survivors the user has created.
  8. Added a handful of new status flags to the serialized survivor's sheet element:
    1. 'cannot_activate_weapons'
    2. 'cannot_consume'
    3. 'cannot_activate_two_plus_str_gear'
    4. 'cannot_activate_two_handed_weapons'
  9. Added items 2, 3 and 4 in the previous list to Survivor object self.flags so they can be set/unset when add_game_asset() is called. -Caleb
  10. Hitting the /survivor/set_attributes/<oid> route with attribute values that do not change no longer logs the activity. -Caleb
  11. The admin panel no longer initializes users on refresh (because that was taking forever). Bit the bullet and inserted some JS date calc into the controller.
  12. Re-added admins element to the 'meta' block to un-break the admin panel settlement event log displayer functionality.
  13. Admin panel refreshes every two minutes now.
  14. Added 'base_attribute' keys to Courage and Understanding A&Is. -Caleb



No comments:

Post a Comment