code: def get_plate_values(self, plate_definition):
          
          if not plate_definition.values and not plate_definition.complement:
              raise PlateDefinitionError()
  
          values = []
          for n in self.meta_data_manager.global_plate_definitions.all_nodes():
              if n.tag == plate_definition.meta_data_id:
                  if not plate_definition.values or n.data in plate_definition.values:
                      if plate_definition.parent_plate:
                          # This plate has parent plates, so we need to get parent data for the node
                          parent_plate_value = self.get_parent_plate_value(
                              self.meta_data_manager.global_plate_definitions, n)
                          # if tuple(parent_plate_value) not in self.plates[plate_definition.parent_plate].values:
                          if set(parent_plate_value) not in map(set, self.plates[plate_definition.parent_plate].values):
                              continue
                          values.insert(0, self.get_parent_data(
                              self.meta_data_manager.global_plate_definitions, n, [(n.tag, n.data), ]))
                      else:
                          values.insert(0, [(n.tag, n.data), ])
          if not values:
              # raise PlateEmptyError(plate_definition.plate_id)
              logging.warn("Plate {} is empty during the creation".format(plate_definition.plate_id))
          return values
docs: Gets the plate values from the global meta data according to the given plate definition
          :param plate_definition: The plate definition
          :return: The plate values
          :type plate_definition: PlateDefinitionModel