mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-11-04 18:07:35 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
def generate_errors(errors, f):
 | 
						|
    # Exact/regex match to create {CODE: ErrorClassName}
 | 
						|
    exact_match = []
 | 
						|
    regex_match = []
 | 
						|
 | 
						|
    # Find out what subclasses to import and which to create
 | 
						|
    import_base, create_base = set(), {}
 | 
						|
    for error in errors:
 | 
						|
        if error.subclass_exists:
 | 
						|
            import_base.add(error.subclass)
 | 
						|
        else:
 | 
						|
            create_base[error.subclass] = error.int_code
 | 
						|
 | 
						|
        if error.has_captures:
 | 
						|
            regex_match.append(error)
 | 
						|
        else:
 | 
						|
            exact_match.append(error)
 | 
						|
 | 
						|
    # Imports and new subclass creation
 | 
						|
    f.write('from .rpcbaseerrors import RPCError, {}\n'
 | 
						|
            .format(", ".join(sorted(import_base))))
 | 
						|
 | 
						|
    for cls, int_code in sorted(create_base.items(), key=lambda t: t[1]):
 | 
						|
        f.write('\n\nclass {}(RPCError):\n    code = {}\n'
 | 
						|
                .format(cls, int_code))
 | 
						|
 | 
						|
    # Error classes generation
 | 
						|
    for error in errors:
 | 
						|
        f.write('\n\nclass {}({}):\n    '.format(error.name, error.subclass))
 | 
						|
 | 
						|
        if error.has_captures:
 | 
						|
            f.write('def __init__(self, request, capture=0):\n    '
 | 
						|
                    '    self.request = request\n    ')
 | 
						|
            f.write('    self.{} = int(capture)\n        '
 | 
						|
                    .format(error.capture_name))
 | 
						|
        else:
 | 
						|
            f.write('def __init__(self, request):\n    '
 | 
						|
                    '    self.request = request\n        ')
 | 
						|
 | 
						|
        f.write('super(Exception, self).__init__('
 | 
						|
                '{}'.format(repr(error.description)))
 | 
						|
 | 
						|
        if error.has_captures:
 | 
						|
            f.write('.format({0}=self.{0})'.format(error.capture_name))
 | 
						|
 | 
						|
        f.write(' + self._fmt_request(self.request))\n\n')
 | 
						|
        f.write('    def __reduce__(self):\n        ')
 | 
						|
        if error.has_captures:
 | 
						|
            f.write('return type(self), (self.request, self.{})\n'.format(error.capture_name))
 | 
						|
        else:
 | 
						|
            f.write('return type(self), (self.request,)\n')
 | 
						|
 | 
						|
    # Create the actual {CODE: ErrorClassName} dict once classes are defined
 | 
						|
    f.write('\n\nrpc_errors_dict = {\n')
 | 
						|
    for error in exact_match:
 | 
						|
        f.write('    {}: {},\n'.format(repr(error.pattern), error.name))
 | 
						|
    f.write('}\n\nrpc_errors_re = (\n')
 | 
						|
    for error in regex_match:
 | 
						|
        f.write('    ({}, {}),\n'.format(repr(error.pattern), error.name))
 | 
						|
    f.write(')\n')
 |