feat(ST2.UtilPackages): bump up all packages
- Refresh PackageCache with latest versions of everything
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
import time
|
||||
|
||||
|
||||
# A cache of channel and repository info to allow users to install multiple
|
||||
# packages without having to wait for the metadata to be downloaded more
|
||||
# than once. The keys are managed locally by the utilizing code.
|
||||
_channel_repository_cache = {}
|
||||
|
||||
|
||||
def clear_cache():
|
||||
global _channel_repository_cache
|
||||
_channel_repository_cache = {}
|
||||
|
||||
|
||||
def get_cache(key, default=None):
|
||||
"""
|
||||
Gets an in-memory cache value
|
||||
|
||||
:param key:
|
||||
The string key
|
||||
|
||||
:param default:
|
||||
The value to return if the key has not been set, or the ttl expired
|
||||
|
||||
:return:
|
||||
The cached value, or default
|
||||
"""
|
||||
|
||||
struct = _channel_repository_cache.get(key, {})
|
||||
expires = struct.get('expires')
|
||||
if expires and expires > time.time():
|
||||
return struct.get('data')
|
||||
return default
|
||||
|
||||
|
||||
def merge_cache_over_settings(destination, setting, key_prefix):
|
||||
"""
|
||||
Take the cached value of `key` and put it into the key `setting` of
|
||||
the destination.settings dict. Merge the values by overlaying the
|
||||
cached setting over the existing info.
|
||||
|
||||
:param destination:
|
||||
An object that has a `.settings` attribute that is a dict
|
||||
|
||||
:param setting:
|
||||
The dict key to use when pushing the value into the settings dict
|
||||
|
||||
:param key_prefix:
|
||||
The string to prefix to `setting` to make the cache key
|
||||
"""
|
||||
|
||||
existing = destination.settings.get(setting, {})
|
||||
value = get_cache(key_prefix + '.' + setting, {})
|
||||
if value:
|
||||
existing.update(value)
|
||||
destination.settings[setting] = existing
|
||||
|
||||
|
||||
def merge_cache_under_settings(destination, setting, key_prefix, list_=False):
|
||||
"""
|
||||
Take the cached value of `key` and put it into the key `setting` of
|
||||
the destination.settings dict. Merge the values by overlaying the
|
||||
existing setting value over the cached info.
|
||||
|
||||
:param destination:
|
||||
An object that has a `.settings` attribute that is a dict
|
||||
|
||||
:param setting:
|
||||
The dict key to use when pushing the value into the settings dict
|
||||
|
||||
:param key_prefix:
|
||||
The string to prefix to `setting` to make the cache key
|
||||
|
||||
:param list_:
|
||||
If a list should be used instead of a dict
|
||||
"""
|
||||
|
||||
default = {} if not list_ else []
|
||||
existing = destination.settings.get(setting)
|
||||
value = get_cache(key_prefix + '.' + setting, default)
|
||||
if value:
|
||||
if existing:
|
||||
if list_:
|
||||
# Prevent duplicate values
|
||||
base = dict(zip(value, [None]*len(value)))
|
||||
for val in existing:
|
||||
if val in base:
|
||||
continue
|
||||
value.append(val)
|
||||
else:
|
||||
value.update(existing)
|
||||
destination.settings[setting] = value
|
||||
|
||||
|
||||
def set_cache(key, data, ttl=300):
|
||||
"""
|
||||
Sets an in-memory cache value
|
||||
|
||||
:param key:
|
||||
The string key
|
||||
|
||||
:param data:
|
||||
The data to cache
|
||||
|
||||
:param ttl:
|
||||
The integer number of second to cache the data for
|
||||
"""
|
||||
|
||||
_channel_repository_cache[key] = {
|
||||
'data': data,
|
||||
'expires': time.time() + ttl
|
||||
}
|
||||
|
||||
|
||||
def set_cache_over_settings(destination, setting, key_prefix, value, ttl):
|
||||
"""
|
||||
Take the value passed, and merge it over the current `setting`. Once
|
||||
complete, take the value and set the cache `key` and destination.settings
|
||||
`setting` to that value, using the `ttl` for set_cache().
|
||||
|
||||
:param destination:
|
||||
An object that has a `.settings` attribute that is a dict
|
||||
|
||||
:param setting:
|
||||
The dict key to use when pushing the value into the settings dict
|
||||
|
||||
:param key_prefix:
|
||||
The string to prefix to `setting` to make the cache key
|
||||
|
||||
:param value:
|
||||
The value to set
|
||||
|
||||
:param ttl:
|
||||
The cache ttl to use
|
||||
"""
|
||||
|
||||
existing = destination.settings.get(setting, {})
|
||||
existing.update(value)
|
||||
set_cache(key_prefix + '.' + setting, value, ttl)
|
||||
destination.settings[setting] = value
|
||||
|
||||
|
||||
def set_cache_under_settings(destination, setting, key_prefix, value, ttl, list_=False):
|
||||
"""
|
||||
Take the value passed, and merge the current `setting` over it. Once
|
||||
complete, take the value and set the cache `key` and destination.settings
|
||||
`setting` to that value, using the `ttl` for set_cache().
|
||||
|
||||
:param destination:
|
||||
An object that has a `.settings` attribute that is a dict
|
||||
|
||||
:param setting:
|
||||
The dict key to use when pushing the value into the settings dict
|
||||
|
||||
:param key_prefix:
|
||||
The string to prefix to `setting` to make the cache key
|
||||
|
||||
:param value:
|
||||
The value to set
|
||||
|
||||
:param ttl:
|
||||
The cache ttl to use
|
||||
"""
|
||||
|
||||
default = {} if not list_ else []
|
||||
existing = destination.settings.get(setting, default)
|
||||
if value:
|
||||
if list_:
|
||||
value.extend(existing)
|
||||
else:
|
||||
value.update(existing)
|
||||
set_cache(key_prefix + '.' + setting, value, ttl)
|
||||
destination.settings[setting] = value
|
Reference in New Issue
Block a user