Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Unified Diff: third_party/twisted_8_1/twisted/python/util.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/twisted_8_1/twisted/python/usage.py ('k') | third_party/twisted_8_1/twisted/python/versions.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/twisted_8_1/twisted/python/util.py
diff --git a/third_party/twisted_8_1/twisted/python/util.py b/third_party/twisted_8_1/twisted/python/util.py
deleted file mode 100644
index 82180521b2389b98c9a98392c4b3aa127097c6cd..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/python/util.py
+++ /dev/null
@@ -1,915 +0,0 @@
-# -*- test-case-name: twisted.python.test.test_util -*-
-# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-import os, sys, hmac, errno, new, inspect
-try:
- import pwd, grp
-except ImportError:
- pwd = grp = None
-try:
- from os import setgroups, getgroups
-except ImportError:
- setgroups = getgroups = None
-from UserDict import UserDict
-
-
-class InsensitiveDict:
- """Dictionary, that has case-insensitive keys.
-
- Normally keys are retained in their original form when queried with
- .keys() or .items(). If initialized with preserveCase=0, keys are both
- looked up in lowercase and returned in lowercase by .keys() and .items().
- """
- """
- Modified recipe at
- http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66315 originally
- contributed by Sami Hangaslammi.
- """
-
- def __init__(self, dict=None, preserve=1):
- """Create an empty dictionary, or update from 'dict'."""
- self.data = {}
- self.preserve=preserve
- if dict:
- self.update(dict)
-
- def __delitem__(self, key):
- k=self._lowerOrReturn(key)
- del self.data[k]
-
- def _lowerOrReturn(self, key):
- if isinstance(key, str) or isinstance(key, unicode):
- return key.lower()
- else:
- return key
-
- def __getitem__(self, key):
- """Retrieve the value associated with 'key' (in any case)."""
- k = self._lowerOrReturn(key)
- return self.data[k][1]
-
- def __setitem__(self, key, value):
- """Associate 'value' with 'key'. If 'key' already exists, but
- in different case, it will be replaced."""
- k = self._lowerOrReturn(key)
- self.data[k] = (key, value)
-
- def has_key(self, key):
- """Case insensitive test whether 'key' exists."""
- k = self._lowerOrReturn(key)
- return self.data.has_key(k)
- __contains__=has_key
-
- def _doPreserve(self, key):
- if not self.preserve and (isinstance(key, str)
- or isinstance(key, unicode)):
- return key.lower()
- else:
- return key
-
- def keys(self):
- """List of keys in their original case."""
- return list(self.iterkeys())
-
- def values(self):
- """List of values."""
- return list(self.itervalues())
-
- def items(self):
- """List of (key,value) pairs."""
- return list(self.iteritems())
-
- def get(self, key, default=None):
- """Retrieve value associated with 'key' or return default value
- if 'key' doesn't exist."""
- try:
- return self[key]
- except KeyError:
- return default
-
- def setdefault(self, key, default):
- """If 'key' doesn't exists, associate it with the 'default' value.
- Return value associated with 'key'."""
- if not self.has_key(key):
- self[key] = default
- return self[key]
-
- def update(self, dict):
- """Copy (key,value) pairs from 'dict'."""
- for k,v in dict.items():
- self[k] = v
-
- def __repr__(self):
- """String representation of the dictionary."""
- items = ", ".join([("%r: %r" % (k,v)) for k,v in self.items()])
- return "InsensitiveDict({%s})" % items
-
- def iterkeys(self):
- for v in self.data.itervalues():
- yield self._doPreserve(v[0])
-
- def itervalues(self):
- for v in self.data.itervalues():
- yield v[1]
-
- def iteritems(self):
- for (k, v) in self.data.itervalues():
- yield self._doPreserve(k), v
-
- def popitem(self):
- i=self.items()[0]
- del self[i[0]]
- return i
-
- def clear(self):
- for k in self.keys():
- del self[k]
-
- def copy(self):
- return InsensitiveDict(self, self.preserve)
-
- def __len__(self):
- return len(self.data)
-
- def __eq__(self, other):
- for k,v in self.items():
- if not (k in other) or not (other[k]==v):
- return 0
- return len(self)==len(other)
-
-class OrderedDict(UserDict):
- """A UserDict that preserves insert order whenever possible."""
- def __init__(self, dict=None, **kwargs):
- self._order = []
- self.data = {}
- if dict is not None:
- if hasattr(dict,'keys'):
- self.update(dict)
- else:
- for k,v in dict: # sequence
- self[k] = v
- if len(kwargs):
- self.update(kwargs)
- def __repr__(self):
- return '{'+', '.join([('%r: %r' % item) for item in self.items()])+'}'
-
- def __setitem__(self, key, value):
- if not self.has_key(key):
- self._order.append(key)
- UserDict.__setitem__(self, key, value)
-
- def copy(self):
- return self.__class__(self)
-
- def __delitem__(self, key):
- UserDict.__delitem__(self, key)
- self._order.remove(key)
-
- def iteritems(self):
- for item in self._order:
- yield (item, self[item])
-
- def items(self):
- return list(self.iteritems())
-
- def itervalues(self):
- for item in self._order:
- yield self[item]
-
- def values(self):
- return list(self.itervalues())
-
- def iterkeys(self):
- return iter(self._order)
-
- def keys(self):
- return list(self._order)
-
- def popitem(self):
- key = self._order[-1]
- value = self[key]
- del self[key]
- return (key, value)
-
- def setdefault(self, item, default):
- if self.has_key(item):
- return self[item]
- self[item] = default
- return default
-
- def update(self, d):
- for k, v in d.items():
- self[k] = v
-
-def uniquify(lst):
- """Make the elements of a list unique by inserting them into a dictionary.
- This must not change the order of the input lst.
- """
- dct = {}
- result = []
- for k in lst:
- if not dct.has_key(k): result.append(k)
- dct[k] = 1
- return result
-
-def padTo(n, seq, default=None):
- """Pads a sequence out to n elements,
-
- filling in with a default value if it is not long enough.
-
- If the input sequence is longer than n, raises ValueError.
-
- Details, details:
- This returns a new list; it does not extend the original sequence.
- The new list contains the values of the original sequence, not copies.
- """
-
- if len(seq) > n:
- raise ValueError, "%d elements is more than %d." % (len(seq), n)
-
- blank = [default] * n
-
- blank[:len(seq)] = list(seq)
-
- return blank
-
-def getPluginDirs():
- import twisted
- systemPlugins = os.path.join(os.path.dirname(os.path.dirname(
- os.path.abspath(twisted.__file__))), 'plugins')
- userPlugins = os.path.expanduser("~/TwistedPlugins")
- confPlugins = os.path.expanduser("~/.twisted")
- allPlugins = filter(os.path.isdir, [systemPlugins, userPlugins, confPlugins])
- return allPlugins
-
-def addPluginDir():
- sys.path.extend(getPluginDirs())
-
-def sibpath(path, sibling):
- """Return the path to a sibling of a file in the filesystem.
-
- This is useful in conjunction with the special __file__ attribute
- that Python provides for modules, so modules can load associated
- resource files.
- """
- return os.path.join(os.path.dirname(os.path.abspath(path)), sibling)
-
-
-def _getpass(prompt):
- """Helper to turn IOErrors into KeyboardInterrupts"""
- import getpass
- try:
- return getpass.getpass(prompt)
- except IOError, e:
- if e.errno == errno.EINTR:
- raise KeyboardInterrupt
- raise
- except EOFError:
- raise KeyboardInterrupt
-
-def getPassword(prompt = 'Password: ', confirm = 0, forceTTY = 0,
- confirmPrompt = 'Confirm password: ',
- mismatchMessage = "Passwords don't match."):
- """Obtain a password by prompting or from stdin.
-
- If stdin is a terminal, prompt for a new password, and confirm (if
- C{confirm} is true) by asking again to make sure the user typed the same
- thing, as keystrokes will not be echoed.
-
- If stdin is not a terminal, and C{forceTTY} is not true, read in a line
- and use it as the password, less the trailing newline, if any. If
- C{forceTTY} is true, attempt to open a tty and prompt for the password
- using it. Raise a RuntimeError if this is not possible.
-
- @returns: C{str}
- """
- isaTTY = hasattr(sys.stdin, 'isatty') and sys.stdin.isatty()
-
- old = None
- try:
- if not isaTTY:
- if forceTTY:
- try:
- old = sys.stdin, sys.stdout
- sys.stdin = sys.stdout = open('/dev/tty', 'r+')
- except:
- raise RuntimeError("Cannot obtain a TTY")
- else:
- password = sys.stdin.readline()
- if password[-1] == '\n':
- password = password[:-1]
- return password
-
- while 1:
- try1 = _getpass(prompt)
- if not confirm:
- return try1
- try2 = _getpass(confirmPrompt)
- if try1 == try2:
- return try1
- else:
- sys.stderr.write(mismatchMessage + "\n")
- finally:
- if old:
- sys.stdin.close()
- sys.stdin, sys.stdout = old
-
-
-def dict(*a, **k):
- import warnings
- import __builtin__
- warnings.warn('twisted.python.util.dict is deprecated. Use __builtin__.dict instead')
- return __builtin__.dict(*a, **k)
-
-def println(*a):
- sys.stdout.write(' '.join(map(str, a))+'\n')
-
-# XXX
-# This does not belong here
-# But where does it belong?
-
-def str_xor(s, b):
- return ''.join([chr(ord(c) ^ b) for c in s])
-
-def keyed_md5(secret, challenge):
- """Create the keyed MD5 string for the given secret and challenge."""
- import warnings
- warnings.warn(
- "keyed_md5() is deprecated. Use the stdlib module hmac instead.",
- DeprecationWarning, stacklevel=2
- )
- return hmac.HMAC(secret, challenge).hexdigest()
-
-def makeStatBar(width, maxPosition, doneChar = '=', undoneChar = '-', currentChar = '>'):
- """Creates a function that will return a string representing a progress bar.
- """
- aValue = width / float(maxPosition)
- def statBar(position, force = 0, last = ['']):
- assert len(last) == 1, "Don't mess with the last parameter."
- done = int(aValue * position)
- toDo = width - done - 2
- result = "[%s%s%s]" % (doneChar * done, currentChar, undoneChar * toDo)
- if force:
- last[0] = result
- return result
- if result == last[0]:
- return ''
- last[0] = result
- return result
-
- statBar.__doc__ = """statBar(position, force = 0) -> '[%s%s%s]'-style progress bar
-
- returned string is %d characters long, and the range goes from 0..%d.
- The 'position' argument is where the '%s' will be drawn. If force is false,
- '' will be returned instead if the resulting progress bar is identical to the
- previously returned progress bar.
-""" % (doneChar * 3, currentChar, undoneChar * 3, width, maxPosition, currentChar)
- return statBar
-
-def spewer(frame, s, ignored):
- """A trace function for sys.settrace that prints every function or method call."""
- from twisted.python import reflect
- if frame.f_locals.has_key('self'):
- se = frame.f_locals['self']
- if hasattr(se, '__class__'):
- k = reflect.qual(se.__class__)
- else:
- k = reflect.qual(type(se))
- print 'method %s of %s at %s' % (
- frame.f_code.co_name, k, id(se)
- )
- else:
- print 'function %s in %s, line %s' % (
- frame.f_code.co_name,
- frame.f_code.co_filename,
- frame.f_lineno)
-
-def searchupwards(start, files=[], dirs=[]):
- """Walk upwards from start, looking for a directory containing
- all files and directories given as arguments::
- >>> searchupwards('.', ['foo.txt'], ['bar', 'bam'])
-
- If not found, return None
- """
- start=os.path.abspath(start)
- parents=start.split(os.sep)
- exists=os.path.exists; join=os.sep.join; isdir=os.path.isdir
- while len(parents):
- candidate=join(parents)+os.sep
- allpresent=1
- for f in files:
- if not exists("%s%s" % (candidate, f)):
- allpresent=0
- break
- if allpresent:
- for d in dirs:
- if not isdir("%s%s" % (candidate, d)):
- allpresent=0
- break
- if allpresent: return candidate
- parents.pop(-1)
- return None
-
-
-class LineLog:
- """
- A limited-size line-based log, useful for logging line-based
- protocols such as SMTP.
-
- When the log fills up, old entries drop off the end.
- """
- def __init__(self, size=10):
- """
- Create a new log, with size lines of storage (default 10).
- A log size of 0 (or less) means an infinite log.
- """
- if size < 0:
- size = 0
- self.log = [None]*size
- self.size = size
-
- def append(self,line):
- if self.size:
- self.log[:-1] = self.log[1:]
- self.log[-1] = line
- else:
- self.log.append(line)
-
- def str(self):
- return '\n'.join(filter(None,self.log))
-
- def __getitem__(self, item):
- return filter(None,self.log)[item]
-
- def clear(self):
- """Empty the log"""
- self.log = [None]*self.size
-
-def raises(exception, f, *args, **kwargs):
- """Determine whether the given call raises the given exception"""
- try:
- f(*args, **kwargs)
- except exception:
- return 1
- return 0
-
-class IntervalDifferential:
- """
- Given a list of intervals, generate the amount of time to sleep between
- \"instants\".
-
- For example, given 7, 11 and 13, the three (infinite) sequences::
-
- 7 14 21 28 35 ...
- 11 22 33 44 ...
- 13 26 39 52 ...
-
- will be generated, merged, and used to produce::
-
- (7, 0) (4, 1) (2, 2) (1, 0) (7, 0) (1, 1) (4, 2) (2, 0) (5, 1) (2, 0)
-
- New intervals may be added or removed as iteration proceeds using the
- proper methods.
- """
-
- def __init__(self, intervals, default=60):
- """
- @type intervals: C{list} of C{int}, C{long}, or C{float} param
- @param intervals: The intervals between instants.
-
- @type default: C{int}, C{long}, or C{float}
- @param default: The duration to generate if the intervals list
- becomes empty.
- """
- self.intervals = intervals[:]
- self.default = default
-
- def __iter__(self):
- return _IntervalDifferentialIterator(self.intervals, self.default)
-
-class _IntervalDifferentialIterator:
- def __init__(self, i, d):
-
- self.intervals = [[e, e, n] for (e, n) in zip(i, range(len(i)))]
- self.default = d
- self.last = 0
-
- def next(self):
- if not self.intervals:
- return (self.default, None)
- last, index = self.intervals[0][0], self.intervals[0][2]
- self.intervals[0][0] += self.intervals[0][1]
- self.intervals.sort()
- result = last - self.last
- self.last = last
- return result, index
-
- def addInterval(self, i):
- if self.intervals:
- delay = self.intervals[0][0] - self.intervals[0][1]
- self.intervals.append([delay + i, i, len(self.intervals)])
- self.intervals.sort()
- else:
- self.intervals.append([i, i, 0])
-
- def removeInterval(self, interval):
- for i in range(len(self.intervals)):
- if self.intervals[i][1] == interval:
- index = self.intervals[i][2]
- del self.intervals[i]
- for i in self.intervals:
- if i[2] > index:
- i[2] -= 1
- return
- raise ValueError, "Specified interval not in IntervalDifferential"
-
-
-class FancyStrMixin:
- """
- Set showAttributes to a sequence of strings naming attributes, OR
- sequences of (attributeName, displayName, formatCharacter)
- """
- showAttributes = ()
- def __str__(self):
- r = ['<', hasattr(self, 'fancybasename') and self.fancybasename or self.__class__.__name__]
- for attr in self.showAttributes:
- if isinstance(attr, str):
- r.append(' %s=%r' % (attr, getattr(self, attr)))
- else:
- r.append((' %s=' + attr[2]) % (attr[1], getattr(self, attr[0])))
- r.append('>')
- return ''.join(r)
- __repr__ = __str__
-
-
-
-class FancyEqMixin:
- compareAttributes = ()
- def __eq__(self, other):
- if not self.compareAttributes:
- return self is other
- if isinstance(self, other.__class__):
- return (
- [getattr(self, name) for name in self.compareAttributes] ==
- [getattr(other, name) for name in self.compareAttributes])
- return NotImplemented
-
-
- def __ne__(self, other):
- result = self.__eq__(other)
- if result is NotImplemented:
- return result
- return not result
-
-
-
-def dsu(list, key):
- L2 = [(key(e), i, e) for (i, e) in zip(range(len(list)), list)]
- L2.sort()
- return [e[2] for e in L2]
-
-if pwd is None or grp is None or setgroups is None or getgroups is None:
- def initgroups(uid, primaryGid):
- """
- Do nothing.
-
- Underlying platform support require to manipulate groups is missing.
- """
-else:
- def _setgroups_until_success(l):
- while(1):
- # NASTY NASTY HACK (but glibc does it so it must be okay):
- # In case sysconfig didn't give the right answer, find the limit
- # on max groups by just looping, trying to set fewer and fewer
- # groups each time until it succeeds.
- try:
- setgroups(l)
- except ValueError:
- # This exception comes from python itself restricting
- # number of groups allowed.
- if len(l) > 1:
- del l[-1]
- else:
- raise
- except OSError, e:
- if e.errno == errno.EINVAL and len(l) > 1:
- # This comes from the OS saying too many groups
- del l[-1]
- else:
- raise
- else:
- # Success, yay!
- return
-
- def initgroups(uid, primaryGid):
- """
- Initializes the group access list.
-
- This is done by reading the group database /etc/group and using all
- groups of which C{uid} is a member. The additional group
- C{primaryGid} is also added to the list.
-
- If the given user is a member of more than C{NGROUPS}, arbitrary
- groups will be silently discarded to bring the number below that
- limit.
-
- @type uid: C{int}
- @param uid: The UID for which to look up group information.
-
- @type primaryGid: C{int} or C{NoneType}
- @param primaryGid: If provided, an additional GID to include when
- setting the groups.
- """
- try:
- # Try to get the maximum number of groups
- max_groups = os.sysconf("SC_NGROUPS_MAX")
- except:
- # No predefined limit
- max_groups = 0
-
- username = pwd.getpwuid(uid)[0]
- l = []
- if primaryGid is not None:
- l.append(primaryGid)
- for groupname, password, gid, userlist in grp.getgrall():
- if username in userlist:
- l.append(gid)
- if len(l) == max_groups:
- break # No more groups, ignore any more
- try:
- _setgroups_until_success(l)
- except OSError, e:
- # We might be able to remove this code now that we
- # don't try to setgid/setuid even when not asked to.
- if e.errno == errno.EPERM:
- for g in getgroups():
- if g not in l:
- raise
- else:
- raise
-
-
-
-def switchUID(uid, gid, euid=False):
- if euid:
- setuid = os.seteuid
- setgid = os.setegid
- else:
- setuid = os.setuid
- setgid = os.setgid
- if gid is not None:
- setgid(gid)
- if uid is not None:
- initgroups(uid, gid)
- setuid(uid)
-
-
-class SubclassableCStringIO(object):
- """A wrapper around cStringIO to allow for subclassing"""
- __csio = None
-
- def __init__(self, *a, **kw):
- from cStringIO import StringIO
- self.__csio = StringIO(*a, **kw)
-
- def __iter__(self):
- return self.__csio.__iter__()
-
- def next(self):
- return self.__csio.next()
-
- def close(self):
- return self.__csio.close()
-
- def isatty(self):
- return self.__csio.isatty()
-
- def seek(self, pos, mode=0):
- return self.__csio.seek(pos, mode)
-
- def tell(self):
- return self.__csio.tell()
-
- def read(self, n=-1):
- return self.__csio.read(n)
-
- def readline(self, length=None):
- return self.__csio.readline(length)
-
- def readlines(self, sizehint=0):
- return self.__csio.readlines(sizehint)
-
- def truncate(self, size=None):
- return self.__csio.truncate(size)
-
- def write(self, s):
- return self.__csio.write(s)
-
- def writelines(self, list):
- return self.__csio.writelines(list)
-
- def flush(self):
- return self.__csio.flush()
-
- def getvalue(self):
- return self.__csio.getvalue()
-
-def moduleMovedForSplit(origModuleName, newModuleName, moduleDesc,
- projectName, projectURL, globDict):
- from twisted.python import reflect
- modoc = """
-%(moduleDesc)s
-
-This module is DEPRECATED. It has been split off into a third party
-package, Twisted %(projectName)s. Please see %(projectURL)s.
-
-This is just a place-holder that imports from the third-party %(projectName)s
-package for backwards compatibility. To use it, you need to install
-that package.
-""" % {'moduleDesc': moduleDesc,
- 'projectName': projectName,
- 'projectURL': projectURL}
-
- #origModule = reflect.namedModule(origModuleName)
- try:
- newModule = reflect.namedModule(newModuleName)
- except ImportError:
- raise ImportError("You need to have the Twisted %s "
- "package installed to use %s. "
- "See %s."
- % (projectName, origModuleName, projectURL))
-
- # Populate the old module with the new module's contents
- for k,v in vars(newModule).items():
- globDict[k] = v
- globDict['__doc__'] = modoc
- import warnings
- warnings.warn("%s has moved to %s. See %s." % (origModuleName, newModuleName,
- projectURL),
- DeprecationWarning, stacklevel=3)
- return
-
-
-def untilConcludes(f, *a, **kw):
- while True:
- try:
- return f(*a, **kw)
- except (IOError, OSError), e:
- if e.args[0] == errno.EINTR:
- continue
- raise
-
-# A value about twice as large as any Python int, to which negative values
-# from id() will be added, moving them into a range which should begin just
-# above where positive values from id() leave off.
-_HUGEINT = (sys.maxint + 1L) * 2L
-def unsignedID(obj):
- """
- Return the id of an object as an unsigned number so that its hex
- representation makes sense
- """
- rval = id(obj)
- if rval < 0:
- rval += _HUGEINT
- return rval
-
-def mergeFunctionMetadata(f, g):
- """
- Overwrite C{g}'s name and docstring with values from C{f}. Update
- C{g}'s instance dictionary with C{f}'s.
-
- To use this function safely you must use the return value. In Python 2.3,
- L{mergeFunctionMetadata} will create a new function. In later versions of
- Python, C{g} will be mutated and returned.
-
- @return: A function that has C{g}'s behavior and metadata merged from
- C{f}.
- """
- try:
- g.__name__ = f.__name__
- except TypeError:
- try:
- merged = new.function(
- g.func_code, g.func_globals,
- f.__name__, inspect.getargspec(g)[-1],
- g.func_closure)
- except TypeError:
- pass
- else:
- merged = g
- try:
- merged.__doc__ = f.__doc__
- except (TypeError, AttributeError):
- pass
- try:
- merged.__dict__.update(g.__dict__)
- merged.__dict__.update(f.__dict__)
- except (TypeError, AttributeError):
- pass
- merged.__module__ = f.__module__
- return merged
-
-
-def nameToLabel(mname):
- """
- Convert a string like a variable name into a slightly more human-friendly
- string with spaces and capitalized letters.
-
- @type mname: C{str}
- @param mname: The name to convert to a label. This must be a string
- which could be used as a Python identifier. Strings which do not take
- this form will result in unpredictable behavior.
-
- @rtype: C{str}
- """
- labelList = []
- word = ''
- lastWasUpper = False
- for letter in mname:
- if letter.isupper() == lastWasUpper:
- # Continuing a word.
- word += letter
- else:
- # breaking a word OR beginning a word
- if lastWasUpper:
- # could be either
- if len(word) == 1:
- # keep going
- word += letter
- else:
- # acronym
- # we're processing the lowercase letter after the acronym-then-capital
- lastWord = word[:-1]
- firstLetter = word[-1]
- labelList.append(lastWord)
- word = firstLetter + letter
- else:
- # definitely breaking: lower to upper
- labelList.append(word)
- word = letter
- lastWasUpper = letter.isupper()
- if labelList:
- labelList[0] = labelList[0].capitalize()
- else:
- return mname.capitalize()
- labelList.append(word)
- return ' '.join(labelList)
-
-
-
-def uidFromString(uidString):
- """
- Convert a user identifier, as a string, into an integer UID.
-
- @type uid: C{str}
- @param uid: A string giving the base-ten representation of a UID or the
- name of a user which can be converted to a UID via L{pwd.getpwnam}.
-
- @rtype: C{int}
- @return: The integer UID corresponding to the given string.
-
- @raise ValueError: If the user name is supplied and L{pwd} is not
- available.
- """
- try:
- return int(uidString)
- except ValueError:
- if pwd is None:
- raise
- return pwd.getpwnam(uidString)[2]
-
-
-
-def gidFromString(gidString):
- """
- Convert a group identifier, as a string, into an integer GID.
-
- @type uid: C{str}
- @param uid: A string giving the base-ten representation of a GID or the
- name of a group which can be converted to a GID via L{grp.getgrnam}.
-
- @rtype: C{int}
- @return: The integer GID corresponding to the given string.
-
- @raise ValueError: If the group name is supplied and L{grp} is not
- available.
- """
- try:
- return int(gidString)
- except ValueError:
- if grp is None:
- raise
- return grp.getgrnam(gidString)[2]
-
-
-
-__all__ = [
- "uniquify", "padTo", "getPluginDirs", "addPluginDir", "sibpath",
- "getPassword", "dict", "println", "keyed_md5", "makeStatBar",
- "OrderedDict", "InsensitiveDict", "spewer", "searchupwards", "LineLog",
- "raises", "IntervalDifferential", "FancyStrMixin", "FancyEqMixin",
- "dsu", "switchUID", "SubclassableCStringIO", "moduleMovedForSplit",
- "unsignedID", "mergeFunctionMetadata", "nameToLabel", "uidFromString",
- "gidFromString",
-]
« no previous file with comments | « third_party/twisted_8_1/twisted/python/usage.py ('k') | third_party/twisted_8_1/twisted/python/versions.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698