NM no longer exposes information via HAL. It uses udev instead. The udev code we have in storage/udev.py is useful for extracting this information, but it's not entirely correct. Also, it's storage-specific.
We need to break some of this code out of the storage module into a generic udev layer that we can then easily use for both storage and networking devices. See the requireName= parameter to udev_get_block_device and the MODEL/VENDOR splitting in udev_parse_block_entry for examples of how this is less than ideal.