[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [PATCH] Fixed parsing of strings with multiple values in pyudev



Hi,

On 02/02/2010 09:42 PM, Martin Gracik wrote:
Hi Hans,

the problem with this is, that we get some lvm properties, which look like this:

{ 'LVM_SOMETHING' : 'abc LVM_SOMETHING=def LVM_SOMETHING=xyz' }

With regular split(), I would have to go over the list, and remove the LVM_SOMETHING= parts from [1:] items,
re.split() does this for me.


Erm, no:

[hans localhost ~]$ python
Python 2.6.4 (r264:75706, Jan 30 2010, 00:24:32)
[GCC 4.4.3 20100127 (Red Hat 4.4.3-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "foo bar=foo2 bar=foo3"
>>> a.split(" bar=")
['foo', 'foo2', 'foo3']
>>>



But you're right about the re special chars in name, that would break everything.
I don't know if there are some special chars allowed in the udev properties keys, are they?

If yes, I can do it with, .find(), .split(), .replace(), do you think it will be a better solution?


Yes as then you don't have to worry about re special chars in the key, and as shown above,
regular split will handle this just fine.

Regards,

Hans




--

   Martin Gracik

----- "Hans de Goede"<hdegoede redhat com>  wrote:

Hi,

Why are you using a re.split and not just a regular split,
also what happens if name has any re special chars in it,
is there a re escape function you can use?

Regards,

Hans


On 02/02/2010 07:48 PM, Martin Gracik wrote:
Some of the values which are returned by udev are strings,
which contain more values for the same key.
The string format is "val1 key=val2 key=val3 ...".
This fix makes sure we split this string into a list of values.
---
   pyudev.py |    6 ++++++
   1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/pyudev.py b/pyudev.py
index 6ab5d30..a16f9c3 100644
--- a/pyudev.py
+++ b/pyudev.py
@@ -3,6 +3,7 @@ from __future__ import print_function
   import sys
   import os
   import fnmatch
+import re
   from ctypes import *


@@ -145,6 +146,11 @@ class UdevDevice(dict):
               name =
libudev_udev_list_entry_get_name(property_entry)
               value =
libudev_udev_list_entry_get_value(property_entry)

+            # XXX some of the strings contain a list of values in
them,
+            # we want to split them and make a list
+            if re.match(".* %s=.*" % name, value):
+                value = re.split(" %s=" % name, value)
+
               self[name] = value

               # get next property entry

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list redhat com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list redhat com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]