Working with Groups in Cellframe Node
The Cellframe Node Python extensions provide classes and functions for working with groups in the GDB (Global DataBase). GDB is a key-value store where keys can be grouped into tables (groups). Each group represents a unique string in the GDB, and the values are typically arrays of bytes, though other data types can also be stored.
Additional info:
Some groups are subject to synchronization.
- Global groups synchronize with all nodes.
- Local groups do not synchronize.
- Netname groups synchronize within a specific network.
Networks can contain blacklists and whitelists for groups, which are manually denied or allowed to synchronize between nodes.
Overview
In this example, we will:
- Define the group name and keys.
- Set and retrieve values by key using the
GlobalDB.set
andGlobalDB.get
methods. - Retrieve a list of key-value pairs in a group using the
GlobalDB.grLoad
method. - Delete entries from the group using the
GlobalDB.delete
method.
Code Example
Below is an example of working with groups in Cellframe Node using the GlobalDB
class:
from DAP.Core import logIt
from CellFrame.Chain import GlobalDB
def init():
logIt.notice("Running plugin client")
# Define the group name
group_name = "local.mygroup"
# Set or receive the key and its corresponding value.
key1 = "my_key1"
value1 = "my_value1".encode("utf-8")
key2 = "my_key2"
value2 = "my_value2".encode("utf-8")
# Set the preset values encoded in bytes.
GlobalDB.set(key1, group_name, value1)
GlobalDB.set(key2, group_name, value2)
# Get the value for the specified keys and decode them back:
value_from_group1 = GlobalDB.get(key1, group_name).decode("utf-8")
value_from_group2 = GlobalDB.get(key2, group_name).decode("utf-8")
logIt.notice(f"Value from group {group_name} key {key1}: {value_from_group1}")
logIt.notice(f"Value from group {group_name} key {key2}: {value_from_group2}")
# It is possible to view all key-value pairs using the method group_list()
# Assuming such method exists, if not, this is a placeholder for the actual implementation
# For now, we will simulate it
group_list = [element.key for element in GlobalDB.grLoad(group_name)] # Placeholder, replace with actual call to list keys if available
logIt.notice(f"Group {group_name} list: {group_list}")
# Delete the created entries
GlobalDB.delete(key1, group_name)
GlobalDB.delete(key2, group_name)
logIt.notice(f"Deleted keys {key1} and {key2} from group {group_name}")
return 0
Explanation
- Defining Group and Keys: Define the group name and the keys to set and retrieve values.
- Setting Values: Use
GlobalDB.set(key, group, value)
to store values in the GDB, encoding the values in bytes. - Retrieving Values: Use
GlobalDB.get(key, group)
to fetch the stored values, decoding them from bytes back to strings. - Listing Group Keys: The
GlobalDB.grLoad(group)
method is used to list all keys in the group. Note that this is a placeholder and should be replaced with the actual method to list keys if available. - Deleting Entries: Use
GlobalDB.delete(key, group)
to remove entries from the group.