code: def fc_to_features(dataset):
          
          if arcpyFound:
              desc = arcpy.Describe(dataset)
              fields = [field.name for field in arcpy.ListFields(dataset) if field.type not in ['Geometry']]
              date_fields = [field.name for field in arcpy.ListFields(dataset) if field.type =='Date']
              non_geom_fields = copy.deepcopy(fields)
              features = []
              if hasattr(desc, "shapeFieldName"):
                  fields.append("SHAPE@JSON")
              del desc
              with arcpy.da.SearchCursor(dataset, fields) as rows:
                  for row in rows:
                      row = list(row)
                      for df in date_fields:
                          if row[fields.index(df)] != None:
                              row[fields.index(df)] = int((_date_handler(row[fields.index(df)])))
                      template = {
                          "attributes" : dict(zip(non_geom_fields, row))
                      }
                      if "SHAPE@JSON" in fields:
                          template['geometry'] = \
                              json.loads(row[fields.index("SHAPE@JSON")])
  
                      features.append(
                          Feature(json_string=_unicode_convert(template))
                      )
                      del row
              return features
          return None
docs: converts a dataset to a list of feature objects
             Input:
                dataset - path to table or feature class
             Output:
                list of feature objects