--------------------
New Features
- 529 - Synapse Docker container ``vertexproject/synapse`` is now built off of a base container, ``vertexproject/synaspe-base-image:py36``. This container is hosted from https://github.com/vertexproject/synapse-base-image and is also used for CI testing. The synapse-base-image contains all of the dependencies required for Synapse, as well as having software updated via `apt-get`. The base container also has ``:py35`` and ``:py34`` tags available as well.
- 523 - Added ``Cortex.extCoreFifo()`` to put of a list of items in a named Cortex FIFO.
- 523 - Added ``DataModel.addPropTypeHook()`` to allow a DataModel user to fire a function whenever a type is used to define a property. This can be used to define callbacks by a ``CoreModule``.
- 523, 538 - Added ``synapse.lib.db`` to handle pooled connections to databases. Added ``synapse.lib.sqlite`` to handle SQLite specific DB optimizations.
- 523 - Added ``synapse.lib.gis`` to handle geospatial computations.
- 523 - Added ``synaspe.lib.iq.TestSteps`` helper. This allows for for interlocking events for multithreaded tests.
- 523 - Multiple improvements to ``CoreModule``’s. They may now get a unique ``_mod_iden`` property by an implementor. This value can be retrieved with the ``CoreModule.getModIden()`` API. Added ``getModProp()`` and ``setModProp()`` APIs so that the CoreModule can store data in the attached ``Cortex`` object. Added a ``finiCoreModule()`` API which is automatically registered as a fini function for the CoreModule. CoreModule implementors can override this API in order to have resources torn down automatically.
- 523 - Added ``synapse.lib.revision`` module to provide helpers for doing revision path enforcement.
- 523 - Added ``syn:alias`` node types to allow for a global GUID alias for a given iden.
- 523 - Added ``synapse.models.geospace.LatLongType`` and ``synapse.models.geospace.DistType`` for normalizing Latitude/longitude data and distances.
- 523 - Added ``geo:nloc`` form to allow tracking the physical location of a given node over time.
- 539 - Added ``inet:wifi:ap`` node type to allow the intersection of a SSID and a BSSID value.
- 539 - Added ``tel:mob:imid`` form to represent the knowledge of an IMEI and IMSI together.
- 539 - Added ``tel:mob:imsiphone`` node type to represent the knowledge of an IMEI and a telephone together.
Enhancements
- 528 - When a property value is included in the Storm ``stats()`` operator, that value is now normed using ``getPropNorm()``.
- 529, 532 - The ``SvcProxy`` now refires ``syn:svc:init`` and ``syn:svc:fini`` events, so users of the SvcProxy may now react to those events to know that a service has been added or removed from the ``SvcBus``.
- 534 - Log messages for exceptions which occur on the ``EventBus`` which cause an exception in ``dist()`` function now include the repr of the ``EventBus`` object so it is clear what type of object had the error, and the mesg itself.
- 534 - ``traceback.print_exc()`` calls have been replaced by `logger.exception()`` calls so traceback information is directed through logging mechanisms, instead of being printed to stdout.
- 534 - The ``Axon.has()`` api now validates the ``hvalu`` parameter is not None before querying the Axon db via getTufosByProp, to ensure that we are not returning an arbitrary ``axon:blob`` tufo.
- 523 - ``Cortex.formTufoByProp()`` will now fire ``node:set:prop`` events for each property in a newly created node. This does not affect splice generation.
- 523 - ``Cortex.delTufo()`` will now fire ``node:set:prop`` events for each secondary property in the deleted node to indicate the new-valu is None.
- 523 - Added ``SynTest.getDirCore()`` and ``SynTest.getTestSteps()`` helpers for getting directory backed Cortexes and TestStep objects, respectively.
- 523 - ``CoreModule.getModPath()`` Now returns None if the Cortex the module is loaded in is not a directory backed Cortex.
- 523 - ``synapse.lib.queue.Queue`` now has a ``size()`` API and a ``__len__`` implementation which allows inspection of how many items are in the internal ``collections.deque`` object.
- 523 - Added ``synapse.lib.scope.pop()`` and ``synapse.lib.scope.Scope.pop()`` methods, which allow either a thread or object local scope to have a named object pop’ed out of it, similar to ``dict.pop()``.
- 523 - Storm syntax integer parser now supports parsing negative values (starting with a ``-`` sign), parsing values which start with ``0x`` as hex values, parsing values which start with ``0b`` as binary strings, and parsing floats properly.
- 539 - ``CompType`` forms now accept dictionary of values as input. They keys which map to fields and optfields are used to form the node.
- 539 - Added ``ipv4``, ``tcp4``, and ``udp4`` secondary properties to ``inet:dns:look``. These represent the IP address which requested the look, and the servers which may have responded to the look.
Bugs
- 529 - The ``SvcProxy`` object was incorrectly registering services by name, as well as tags, in its' ``ByTag`` helper. This was causing the ``SvcProxy`` to think additional services were still available after they were no longer available to the ``SvcBus``. This has been corrected, and the ``SvcProxy`` no longer misuses the ``ByTag`` helper.
- 531 - The atexit handler for the ``EventBus`` had a bad reference which could have triggered a NameError on shutdown. This has been fixed.
- 533 - Change the ``Axon`` test test_axon_host_spinbackup to use waiters on ``syn:svc:init`` events to address a race condition.
- 534 - Additional proxy objects are fini'd during Axon tests.
- 523 - ``Socket.send()`` now catches ``OSError`` and ``ConnectionError`` exceptions and fini’s the socket if they occur.
Documentation
- 527 - Added Storm documentation for the ``stats()`` operator.
- 534 - Docstrings for ``synapse.lib.persist.Dir.items()``, ``synapse.lib.service.SvcProxy.callByTag``, ``synapse.lib.service.runSynSvc`` have been rewritten.