def merge_syspurpose_values(local=None, remote=None, base=None, uep=None, consumer_uuid=None): """ Try to do three-way merge of local, remote and base dictionaries. Note: when remote is None, then this method will call REST API. :param local: dictionary with local values :param remote: dictionary with remote values :param base: dictionary with cached values :param uep: object representing connection to canlepin server :param consumer_uuid: UUID of consumer :return: Dictionary with local result """ if SyncedStore is None: return {} synced_store = SyncedStore(uep=uep, consumer_uuid=consumer_uuid) if local is None: local = synced_store.get_local_contents() if remote is None: remote = synced_store.get_remote_contents() if base is None: base = synced_store.get_cached_contents() result = synced_store.merge(local=local, remote=remote, base=base) local_result = {key: result[key] for key in result if result[key]} log.debug('local result: %s ' % local_result) return local_result
def read_syspurpose(synced_store=None, raise_on_error=False): """ Reads the system purpose from the correct location on the file system. Makes an attempt to use a SyspurposeStore if available falls back to reading the json directly. :return: A dictionary containing the total syspurpose. """ if SyncedStore is not None: if synced_store is None: synced_store = SyncedStore(None) try: content = synced_store.get_local_contents() except (OSError, IOError): content = {} else: try: content = json.load(open(USER_SYSPURPOSE)) except (os.error, ValueError, IOError): # In the event this file could not be read treat it as empty if raise_on_error: raise content = {} return content