def extract_fields(obj, fieldnames, ignore=[]): """Extract the given fieldnames from the object :param obj: Content object :type obj: ATContentType/DexterityContentType :param ignore: Schema names to ignore :type ignore: list :returns: Schema name/value mapping :rtype: dict """ # get the proper data manager for the object dm = IDataManager(obj) # filter out ignored fields fieldnames = filter(lambda name: name not in ignore, fieldnames) # schema mapping out = dict() for fieldname in fieldnames: try: # get the field value with the data manager fieldvalue = dm.get(fieldname) # https://github.com/collective/plone.jsonapi.routes/issues/52 # -> skip restricted fields except Unauthorized: logger.debug("Skipping restricted field '%s'" % fieldname) continue out[fieldname] = get_json_value(obj, fieldname, fieldvalue) return out