SDK shortcut for getting a good dict of objects
Was doing some coding today and came up with a handy bit of code for getting a list of objects into a nice, neat dictionary:
<span class="com"># download 1000 devices (doesn't account for pagination) and bring the properties up to the root level of the device</span><span class="pln">
devices </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">x</span><span class="pun">.</span><span class="pln">id</span><span class="pun">:{**</span><span class="pln">x</span><span class="pun">.</span><span class="pln">to_dict</span><span class="pun">(),</span><span class="pln"> </span><span class="pun">**{</span><span class="pln">y</span><span class="pun">.</span><span class="pln">name</span><span class="pun">:</span><span class="pln">y</span><span class="pun">.</span><span class="pln">value </span><span class="kwd">for</span><span class="pln"> y </span><span class="kwd">in</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">custom_properties</span><span class="pun">+</span><span class="pln">x</span><span class="pun">.</span><span class="pln">auto_properties</span><span class="pun">+</span><span class="pln">x</span><span class="pun">.</span><span class="pln">inherited_properties</span><span class="pun">+</span><span class="pln">x</span><span class="pun">.</span><span class="pln">system_properties</span><span class="pun">}}</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> x </span><span class="kwd">in</span><span class="pln"> lm</span><span class="pun">.</span><span class="pln">get_device_list</span><span class="pun">(</span><span class="pln">size</span><span class="pun">=</span><span class="lit">1000</span><span class="pun">).</span><span class="pln">items</span><span class="pun">}</span><span class="pln">
</span><span class="com"># the above one-liner is probably enough, but you can further clean it up:</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> x</span><span class="pun">,</span><span class="pln">y </span><span class="kwd">in</span><span class="pln"> devices</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> l </span><span class="kwd">in</span><span class="pln"> </span><span class="pun">[</span><span class="str">'custom_properties'</span><span class="pun">,</span><span class="str">'auto_properties'</span><span class="pun">,</span><span class="str">'inherited_properties'</span><span class="pun">,</span><span class="str">'system_properties'</span><span class="pun">]:</span><span class="pln">
</span><span class="kwd">del</span><span class="pln"> y</span><span class="pun">[</span><span class="pln">l</span><span class="pun">]</span>
Essentially, this creates a dictionary of dictionaries. The top level dictionary (devices) uses the device ID as the key and contains a dictionary as the value. Each device's dictionary contains all the attributes you normally expect to be there, plus all the properties all in a flat dictionary (instead of a list of dictionaries with "name" and "value" as the keys).
LM User
Posted 3 years ago
0 comments