~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/services/utils.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-07-13 13:23:34 UTC
  • mfrom: (13278.1.14 memlimit-sendbranchmail)
  • Revision ID: launchpad@pqm.canonical.com-20110713132334-y32hd2pmboy1tjyz
[r=abentley][bug=585126] Memory-limit branch mail jobs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
    'file_exists',
19
19
    'iter_list_chunks',
20
20
    'iter_split',
 
21
    'RegisteredSubclass',
21
22
    'run_capturing_output',
22
23
    'synchronize',
23
24
    'text_delta',
132
133
    I'm amazed this isn't in itertools (mwhudson).
133
134
    """
134
135
    for i in range(0, len(a_list), size):
135
 
        yield a_list[i:i+size]
 
136
        yield a_list[i:i + size]
136
137
 
137
138
 
138
139
def synchronize(source, target, add, remove):
242
243
    then reassemble.
243
244
    """
244
245
    # Make sure there is at least one newline so the split works.
245
 
    first, rest = (s+'\n').split('\n', 1)
 
246
    first, rest = (s + '\n').split('\n', 1)
246
247
    return (first + '\n' + dedent(rest)).strip()
247
248
 
248
249
 
290
291
    sys._getframe(1).f_locals["__traceback_info__"] = info
291
292
 
292
293
 
 
294
class RegisteredSubclass(type):
 
295
    """Metaclass for when subclasses should be registered."""
 
296
 
 
297
    def __init__(cls, name, bases, dict_):
 
298
        # _register_subclass must be a static method to permit upcalls.
 
299
        #
 
300
        # We cannot use super(Class, cls) to do the upcalls, because Class
 
301
        # isn't fully defined yet.  (Remember, we're calling this from a
 
302
        # metaclass.)
 
303
        #
 
304
        # Without using super, a classmethod that overrides another
 
305
        # classmethod has no reasonable way to call the overridden version AND
 
306
        # provide its class as first parameter (i.e. "cls").  Therefore, we
 
307
        # must use a static method.
 
308
        cls._register_subclass(cls)
 
309
 
 
310
 
293
311
def utc_now():
294
312
    """Return a timezone-aware timestamp for the current time."""
295
313
    return datetime.now(tz=pytz.UTC)