'Verify that all BuiltinHandler objects are valid and not repeated.
Args:
builtins_list: list of BuiltinHandler objects to validate.
runtime: if set then warnings are generated for builtins that have been
deprecated in the given runtime.
Raises:
InvalidBuiltinFormat: if the name of a Builtinhandler object
cannot be determined.
DuplicateBuiltinsSpecified: if a builtin handler name is used
more than once in the list.'

@classmethod
def Validate(cls, builtins_list, runtime=None):

    seen = set()
    for b in builtins_list:
        if (not b.builtin_name):
            raise appinfo_errors.InvalidBuiltinFormat(('Name    of    builtin    for    list    object    %s    could    not    be    determined.' % b))
        if (b.builtin_name in seen):
            raise appinfo_errors.DuplicateBuiltinsSpecified(('Builtin    %s    was    specified    more    than    once    in    one    yaml    file.' % b.builtin_name))
        if ((b.builtin_name == 'datastore_admin') and (runtime == 'python')):
            logging.warning('The    datastore_admin    builtin    is    deprecated.    You    can    find    information    on    how    to    enable    it    through    the    Administrative    Console    here:    http://developers.google.com/appengine/docs/adminconsole/datastoreadmin.html')
        elif ((b.builtin_name == 'mapreduce') and (runtime == 'python')):
            logging.warning('The    mapreduce    builtin    is    deprecated.    You    can    find    more    information    on    how    to    configure    and    use    it    here:    http://developers.google.com/appengine/docs/python/dataprocessing/overview.html')
        seen.add(b.builtin_name)
