Subversion Repositories freemyipod

Rev

Rev 514 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 514 Rev 532
Line 27... Line 27...
27
"""
27
"""
28
 
28
 
29
import sys
29
import sys
30
from ctypes import *
30
from ctypes import *
31
from _ctypes import _SimpleCData
31
from _ctypes import _SimpleCData
-
 
32
 
-
 
33
 
-
 
34
class Error(Exception):
-
 
35
    def __init__(self, value=None):
-
 
36
        self.value = value
-
 
37
    def __str__(self):
-
 
38
        if self.value != None:
-
 
39
            return repr(self.value)
-
 
40
 
-
 
41
class ArgumentError(Error):
-
 
42
    pass
-
 
43
 
-
 
44
class ArgumentTypeError(Error):
-
 
45
    def __init__(self, expected, seen=False):
-
 
46
        self.expected = expected
-
 
47
        self.seen = seen
-
 
48
    def __str__(self):
32
import libemcoredata
49
        if self.seen:
-
 
50
            return "Expected %s but got %s" % (self.expected, self.seen)
-
 
51
        else:
-
 
52
            return "Expected %s, but saw something else" % self.expected
-
 
53
 
33
 
54
 
34
class Logger(object):
55
class Logger(object):
35
    """
56
    """
36
        Simple stdout/stderr/file logger.
57
        Simple stdout/stderr/file logger.
37
        Loglevel 3 is most verbose, Loglevel 0: Only log something if there is an error.
58
        Loglevel 3 is most verbose, Loglevel 0: Only log something if there is an error.
Line 201... Line 222...
201
    
222
    
202
    def _to_string(self):
223
    def _to_string(self):
203
        return string_at(addressof(self), sizeof(self))
224
        return string_at(addressof(self), sizeof(self))
204
 
225
 
205
 
226
 
206
 
-
 
207
class Error(Exception):
-
 
208
    def __init__(self, value=None):
-
 
209
        self.value = value
-
 
210
    def __str__(self):
-
 
211
        if self.value != None:
-
 
212
            return repr(self.value)
-
 
213
 
-
 
214
 
-
 
215
def gethwname(id):
227
def gethwname(id):
216
    try:
228
    try:
-
 
229
        from libemcoredata import hwtypes
217
        hwtype = libemcoredata.hwtypes[id]
230
        hwtype = hwtypes[id]
218
    except KeyError:
231
    except KeyError:
219
        hwtype = "UNKNOWN (ID = " + self._hex(id) + ")"
232
        hwtype = "UNKNOWN (ID = 0x%X)" % id
220
    return hwtype
233
    return hwtype
221
 
234
 
222
 
235
 
223
def trimdoc(docstring):
236
def trimdoc(docstring):
224
    """
237
    """
Line 313... Line 326...
313
        if doc[function]['documentation']:
326
        if doc[function]['documentation']:
314
            ret += logger.log("\"\"\"\n", indent = indentwidth, target = logtarget)
327
            ret += logger.log("\"\"\"\n", indent = indentwidth, target = logtarget)
315
            ret += logger.log(trimdoc(doc[function]['documentation']) + "\n", indent = 2 * indentwidth, target = logtarget)
328
            ret += logger.log(trimdoc(doc[function]['documentation']) + "\n", indent = 2 * indentwidth, target = logtarget)
316
            ret += logger.log("\"\"\"\n", indent = indentwidth, target = logtarget)
329
            ret += logger.log("\"\"\"\n", indent = indentwidth, target = logtarget)
317
        ret += logger.log("\n", target = logtarget)
330
        ret += logger.log("\n", target = logtarget)
318
    return ret
-
 
319
331
    return ret
-
 
332
 
-
 
333
 
-
 
334
def to_bool(something):
-
 
335
    """
-
 
336
        Converts quite everything into bool.
-
 
337
    """
-
 
338
    if type(something) == bool:
-
 
339
        return something
-
 
340
    if something is None:
-
 
341
        return False
-
 
342
    elif type(something) == int or type(something) == long:
-
 
343
        return bool(something)
-
 
344
    elif type(something == str):
-
 
345
        if something.lower() in ['true', '1', 't', 'y', 'yes']:
-
 
346
            return True
-
 
347
        elif something.lower() in ['false', '0', 'f', 'n', 'no']:
-
 
348
            return False
-
 
349
    raise ArgumentTypeError("bool", "'%s'" % something)
-
 
350
 
-
 
351
def to_int(something):
-
 
352
    """
-
 
353
        Converts quite everything to a hexadecimal represented integer.
-
 
354
        This works for default arguments too, because it returns
-
 
355
        None when it found that it got a NoneType object.
-
 
356
    """
-
 
357
    if type(something) == int or type(something) == long:
-
 
358
        return something
-
 
359
    elif something is None:
-
 
360
        return None
-
 
361
    elif type(something) == str:
-
 
362
        try:
-
 
363
            if something[:2] == "0x": # Hexadecimal notation
-
 
364
                return int(something[2:], 16)
-
 
365
            elif something[:2] == "0b": # Binary notation
-
 
366
                return int(something[2:], 2)
-
 
367
            else: # Decimal notation
-
 
368
                return int(something, 10)
-
 
369
        except ValueError:
-
 
370
            raise ArgumentTypeError("integer", "'%s'" % something)
-
 
371
    else:
-
 
372
        raise ArgumentTypeError("integer", "'%s'" % something)
-
 
373
320
374