code: def poly(self, parts=[], shapeType=POLYGON, partTypes=[]):
          
          polyShape = _Shape(shapeType)
          polyShape.parts = []
          polyShape.points = []
          for part in parts:
              polyShape.parts.append(len(polyShape.points))
              for point in part:
                  # Ensure point is list
                  if not isinstance(point, list):
                      point = list(point)
                  # Make sure point has z and m values
                  while len(point) < 4:
                      point.append(0)
                  polyShape.points.append(point)
          if polyShape.shapeType == 31:
              if not partTypes:
                  for part in parts:
                      partTypes.append(polyShape.shapeType)
              polyShape.partTypes = partTypes
          self._shapes.append(polyShape)
docs: Creates a shape that has multiple collections of points (parts)
          including lines, polygons, and even multipoint shapes. If no shape type
          is specified it defaults to 'polygon'. If no part types are specified
          (which they normally won't be) then all parts default to the shape type.