<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def upsert_object_property(self, identifier, properties, ignore_constraints=False):
 """Manipulate an object's property set. Inserts or updates properties in given dictionary. If a property key does not exist in the object's property set it is created. If the value is None an existing property is deleted. Existing object properties that are not present in the given property set remain unaffacted. Deleting mandatory properties or updating immutable properties results in a ValueError. These constraints can be disabled using the ignore_constraints parameter. Parameters identifier : string Unique object identifier properties : Dictionary() Dictionary of property names and their new values. ignore_constraints : Boolean Flag indicating whether to ignore immutable and mandatory property constraints (True) or nore (False, Default). Returns ------- ObjectHandle Handle to updated object or None if object does not exist """

        # Retrieve the object with the gievn identifier. This is a (sub-)class
        # of ObjectHandle
        obj = self.get_object(identifier)
        if not obj is None:
            # Modify property set of retrieved object handle. Raise exception if
            # and of the upserts is not valid.
            for key in properties:
                value = properties[key]
                # If the update affects an immutable property raise exception
                if not ignore_constraints and key in self.immutable_properties:
                    raise ValueError('update to immutable property: ' + key)
                # Check whether the operation is an UPSERT (value != None) or
                # DELETE (value == None)
                if not value is None:
                    obj.properties[key] = value
                else:
                    # DELETE. Make sure the property is not mandatory
                    if not ignore_constraints and key in self.mandatory_properties:
                        raise ValueError('delete mandatory property: ' + key)
                    elif key in obj.properties:
                        del obj.properties[key]
            # Update object in database
            self.replace_object(obj)
        # Return object handle
        return obj