(Steve Dougherty)
2013-07-02: Add parsing for named WoT properties. Add parsing for named WoT properties.
diff --git a/infocalypse/wot.py b/infocalypse/wot.py
--- a/infocalypse/wot.py
+++ b/infocalypse/wot.py
@@ -417,14 +417,34 @@ def read_identity(message, id_num):
# depend on and would allow just returning all properties for the identity.
#property_prefix = "Replies.Properties{0}".format(id_num)
- # Add contexts for the identity too.
+ # Add contexts and other properties.
# TODO: Unflattening WoT response? Several places check for prefix like
# this.
- prefix = "Replies.Contexts{0}.Context".format(id_num)
+ context_prefix = "Replies.Contexts{0}.Context".format(id_num)
+ property_prefix = "Replies.Properties{0}.Property".format(id_num)
for key in message.iterkeys():
- if key.startswith(prefix):
- num = key[len(prefix):]
+ if key.startswith(context_prefix):
+ num = key[len(context_prefix):]
result["Context{0}".format(num)] = message[key]
+ elif key.startswith(property_prefix) and key.endswith(".Name"):
+ # ".Name" is 5 characters, before which is the number.
+ num = key[len(property_prefix):-5]
+
+ # Example:
+ # Replies.Properties1.Property1.Name = IntroductionPuzzleCount
+ # Replies.Properties1.Property1.Value = 10
+ name = message[key]
+ value = message[property_prefix + num + '.Value']
+
+ # LCWoT returns many things with duplicates in properties,
+ # so this conflict is something that can happen. Checking for
+ # value conflict restricts the message to cases where it actually
+ # has an effect.
+ if name in result and value != result[name]:
+ print("WARNING: '{0}' has a different value as a property."
+ .format(name))
+
+ result[name] = value
return result