| Conditions | 3 | 
| Total Lines | 52 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | # coding: utf8  | 
            ||
| 37 | def parse_request(request):  | 
            ||
| 38 | """  | 
            ||
| 39 | >>> request = b'''<?xml version="1.0" encoding="UTF-8"?>  | 
            ||
| 40 | ... <request protocol="3.0"  | 
            ||
| 41 | ... version="1.3.23.0"  | 
            ||
| 42 | ... ismachine="0"  | 
            ||
| 43 |         ...          sessionid="{5FAD27D4-6BFA-4daa-A1B3-5A1F821FEE0F}" | 
            ||
| 44 |         ...          userid="{D0BBD725-742D-44ae-8D46-0231E881D58E}" | 
            ||
| 45 | ... installsource="scheduler"  | 
            ||
| 46 | ... testsource="ossdev"  | 
            ||
| 47 |         ...          requestid="{C8F6EDF3-B623-4ee6-B2DA-1D08A0B4C665}"> | 
            ||
| 48 | ... <os platform="win" version="6.1" sp="" arch="x64"/>  | 
            ||
| 49 |         ...     <app appid="{430FD4D0-B729-4F61-AA34-91526481799D}" version="1.2.23.0" nextversion="" lang="en" brand="GGLS" | 
            ||
| 50 | ... client="someclientid" installage="39">  | 
            ||
| 51 | ... <updatecheck/>  | 
            ||
| 52 | ... <ping r="1"/>  | 
            ||
| 53 | ... </app>  | 
            ||
| 54 |         ...     <app appid="{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}" version="2.2.2.0" nextversion="" lang="en" brand="GGLS" | 
            ||
| 55 | ... client="" installage="6">  | 
            ||
| 56 | ... <updatecheck/>  | 
            ||
| 57 | ... <ping r="1"/>  | 
            ||
| 58 | ... </app>  | 
            ||
| 59 | ... </request>'''  | 
            ||
| 60 | >>> request_obj = parse_request(request)  | 
            ||
| 61 |         >>> request_obj.get('version') | 
            ||
| 62 | '1.3.23.0'  | 
            ||
| 63 |         >>> request_obj.os.get('platform') | 
            ||
| 64 | 'win'  | 
            ||
| 65 |         >>> request_obj.app.get('appid') | 
            ||
| 66 |         '{430FD4D0-B729-4F61-AA34-91526481799D}' | 
            ||
| 67 |         >>> request_obj.app.find('updatecheck') | 
            ||
| 68 | ''  | 
            ||
| 69 | >>> request_obj.keys()  | 
            ||
| 70 | ['protocol', 'version', 'ismachine', 'sessionid', 'userid', 'installsource', 'testsource', 'requestid']  | 
            ||
| 71 | >>> request_obj.values()  | 
            ||
| 72 |         ['3.0', '1.3.23.0', '0', '{5FAD27D4-6BFA-4daa-A1B3-5A1F821FEE0F}', '{D0BBD725-742D-44ae-8D46-0231E881D58E}', 'scheduler', 'ossdev', '{C8F6EDF3-B623-4ee6-B2DA-1D08A0B4C665}'] | 
            ||
| 73 | >>> request_obj.tag  | 
            ||
| 74 | 'request'  | 
            ||
| 75 |         >>> for app in request_obj.find('app'): | 
            ||
| 76 |         ...     app.get('appid') | 
            ||
| 77 | ...  | 
            ||
| 78 |         '{430FD4D0-B729-4F61-AA34-91526481799D}' | 
            ||
| 79 |         '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}' | 
            ||
| 80 | """  | 
            ||
| 81 | |||
| 82 | obj = objectify.fromstring(request, parser)  | 
            ||
| 83 | |||
| 84 | # Check if this is coming from update_engine, which handles machines not applications  | 
            ||
| 85 |     if obj.get('userid') == '' or obj.get('userid') == None: | 
            ||
| 86 |         obj.set('userid', obj.app.get('machineid')) | 
            ||
| 87 | |||
| 88 | return obj  | 
            ||
| 89 | |||
| 93 |