~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-18 20:55:27 UTC
  • mfrom: (13463.2.1 revert-13420)
  • Revision ID: launchpad@pqm.canonical.com-20110718205527-gxsmcc8tn7d89swk
[r=wgrant][rollback=13420] Revert r13420 (the relanding of r13292,
 which broke production in similar ways).

Show diffs side-by-side

added added

removed removed

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