diff --git a/protoc_plugins/descriptor_parser.py b/protoc_plugins/descriptor_parser.py
index 0034379..13bdc5e 100644
--- a/protoc_plugins/descriptor_parser.py
+++ b/protoc_plugins/descriptor_parser.py
@@ -21,7 +21,8 @@
 from google.protobuf.message import Message
 
 
-class InvalidDescriptorError(Exception): pass
+class InvalidDescriptorError(Exception):
+    pass
 
 
 class DescriptorParser(object):
@@ -133,8 +134,8 @@
         return d
 
     def parse_file_descriptors(self, descriptors,
-                              type_tag_name=None,
-                              fold_comments=False):
+                               type_tag_name=None,
+                               fold_comments=False):
         return [self.parse_file_descriptor(descriptor,
                                            type_tag_name=type_tag_name,
                                            fold_comments=fold_comments)
diff --git a/protoc_plugins/protobuf_introspect.py b/protoc_plugins/protobuf_introspect.py
index 6e43af5..71a698b 100755
--- a/protoc_plugins/protobuf_introspect.py
+++ b/protoc_plugins/protobuf_introspect.py
@@ -35,7 +35,8 @@
 from google.protobuf import descriptor_pb2
 
 
-class InvalidDescriptorError(Exception): pass
+class InvalidDescriptorError(Exception):
+    pass
 
 
 class DescriptorParser(object):
@@ -123,7 +124,7 @@
                 location.get('leading_comments', '').strip(' '),
                 location.get('trailing_comments', '').strip(' '),
                 ''.join(block.strip(' ') for block
-                          in location.get('leading_detached_comments', ''))
+                        in location.get('leading_detached_comments', ''))
             ]).strip()
 
             # ignore locations with no comments
diff --git a/protoc_plugins/swagger_template.py b/protoc_plugins/swagger_template.py
index e3aff17..a444f71 100644
--- a/protoc_plugins/swagger_template.py
+++ b/protoc_plugins/swagger_template.py
@@ -23,9 +23,16 @@
 re_segment = re.compile(r'/(?P<absolute>[^{}/]+)|(?P<symbolic>{[^}]+})')
 
 
-class DuplicateMethodAndPathError(Exception): pass
-class ProtobufCompilationFailedError(Exception): pass
-class InvalidPathArgumentError(Exception): pass
+class DuplicateMethodAndPathError(Exception):
+    pass
+
+
+class ProtobufCompilationFailedError(Exception):
+    pass
+
+
+class InvalidPathArgumentError(Exception):
+    pass
 
 
 def native_descriptors_to_swagger(native_descriptors):
@@ -117,7 +124,7 @@
             for method in service.get('method', []):
                 # skip methods that do not have http options
                 options = method['options']
-                if options.has_key('http'):
+                if 'http' in options:
                     full_name = service_prefix + '.' + method['name']
                     yield full_name, service, method
 
@@ -165,7 +172,7 @@
         definition, types_referenced = make_definition(type, types)
         definitions[full_name] = definition
         for type_referenced in types_referenced:
-            if not definitions.has_key(type_referenced):
+            if type_referenced not in definitions:
                 wanted.add(type_referenced)
     return definitions
 
@@ -220,7 +227,7 @@
     if properties:
         definition['properties'] = properties
 
-    if type.has_key('_description'):
+    if '_description' in type:
         definition['description'] = type['_description']
 
     return definition, referenced
@@ -288,7 +295,7 @@
             'items': property
         }
 
-    if field.has_key('_description'):
+    if '_description' in field:
         property['description'] = field['_description']
 
     return field['name'], property, referenced
@@ -325,7 +332,7 @@
     def lookup_type(input_type, field_name):
         local_field_name, _, rest = field_name.partition('.')
         properties = input_type['properties']
-        if not properties.has_key(local_field_name):
+        if local_field_name not in properties:
             raise InvalidPathArgumentError(
                 'Input type has no field {}'.format(field_name))
         field = properties[local_field_name]
@@ -382,13 +389,13 @@
 
         entry = {
             'operationId': method['name'],
-            'tags': [service['name'],],
+            'tags': [service['name'], ],
             'responses': {
                 '200': {  # TODO: code is 201 and 209 in POST/DELETE?
                     'description': unicode(""),  # TODO: ever filled by proto?
                     'schema': {
                         '$ref': '#/definitions/{}'.format(
-                        method['output_type'].strip('.'))
+                            method['output_type'].strip('.'))
                     }
                 },
                 # TODO shall we prefill with standard error (verb specific),
@@ -413,7 +420,7 @@
         if verb in path_dict:
             raise DuplicateMethodAndPathError(
                 'There is already a {} method defined for path ({})'.format(
-                verb, path))
+                    verb, path))
         path_dict[verb] = entry
 
     return paths
@@ -447,22 +454,22 @@
 
 
 TYPE_MAP = {
-        FieldDescriptor.TYPE_BOOL: ('boolean', 'boolean'),
-        FieldDescriptor.TYPE_BYTES: ('string', 'byte'),
-        FieldDescriptor.TYPE_DOUBLE: ('number', 'double'),
-        FieldDescriptor.TYPE_ENUM: ('string', 'string'),
-        FieldDescriptor.TYPE_FIXED32: ('integer', 'int64'),
-        FieldDescriptor.TYPE_FIXED64: ('string', 'uint64'),
-        FieldDescriptor.TYPE_FLOAT: ('number', 'float'),
-        FieldDescriptor.TYPE_INT32: ('integer', 'int32'),
-        FieldDescriptor.TYPE_INT64: ('string', 'int64'),
-        FieldDescriptor.TYPE_SFIXED32: ('integer', 'int32'),
-        FieldDescriptor.TYPE_SFIXED64: ('string', 'int64'),
-        FieldDescriptor.TYPE_STRING: ('string', 'string'),
-        FieldDescriptor.TYPE_SINT32: ('integer', 'int32'),
-        FieldDescriptor.TYPE_SINT64: ('string', 'int64'),
-        FieldDescriptor.TYPE_UINT32: ('integer', 'int64'),
-        FieldDescriptor.TYPE_UINT64: ('string', 'uint64'),
-        # FieldDescriptor.TYPE_MESSAGE:
-        # FieldDescriptor.TYPE_GROUP:
+    FieldDescriptor.TYPE_BOOL: ('boolean', 'boolean'),
+    FieldDescriptor.TYPE_BYTES: ('string', 'byte'),
+    FieldDescriptor.TYPE_DOUBLE: ('number', 'double'),
+    FieldDescriptor.TYPE_ENUM: ('string', 'string'),
+    FieldDescriptor.TYPE_FIXED32: ('integer', 'int64'),
+    FieldDescriptor.TYPE_FIXED64: ('string', 'uint64'),
+    FieldDescriptor.TYPE_FLOAT: ('number', 'float'),
+    FieldDescriptor.TYPE_INT32: ('integer', 'int32'),
+    FieldDescriptor.TYPE_INT64: ('string', 'int64'),
+    FieldDescriptor.TYPE_SFIXED32: ('integer', 'int32'),
+    FieldDescriptor.TYPE_SFIXED64: ('string', 'int64'),
+    FieldDescriptor.TYPE_STRING: ('string', 'string'),
+    FieldDescriptor.TYPE_SINT32: ('integer', 'int32'),
+    FieldDescriptor.TYPE_SINT64: ('string', 'int64'),
+    FieldDescriptor.TYPE_UINT32: ('integer', 'int64'),
+    FieldDescriptor.TYPE_UINT64: ('string', 'uint64'),
+    # FieldDescriptor.TYPE_MESSAGE:
+    # FieldDescriptor.TYPE_GROUP:
 }
