<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_or_create_iobject(identifier_uid, identifier_namespace_uri, iobject_type_name, iobject_type_namespace_uri, iobject_type_revision_name, iobject_family_name, iobject_family_revision_name="", identifier_namespace_name="", timestamp=None, create_timestamp=None, overwrite=False, dingos_class_map=dingos_class_map):
 """ Get or create an information object. """


    # create or retrieve the iobject type and revision

    # create or retrieve identifier

    if not timestamp:
        raise StandardError("You must supply a timestamp.")

    id_namespace, created = dingos_class_map['IdentifierNameSpace'].objects.get_or_create(uri=identifier_namespace_uri)

    if created and identifier_namespace_name:
        id_namespace.name = identifier_namespace_name
        id_namespace.save()

    identifier, created = dingos_class_map['Identifier'].objects.get_or_create(uid=identifier_uid,
                                                                              namespace=id_namespace,
                                                                              defaults={'latest': None})

    iobject_type_namespace, created = dingos_class_map['DataTypeNameSpace'].objects.get_or_create(uri=iobject_type_namespace_uri)

    iobject_family, created = dingos_class_map['InfoObjectFamily'].objects.get_or_create(name=iobject_family_name)
    iobject_family_revision, created = dingos_class_map['Revision'].objects.get_or_create(
        name=iobject_family_revision_name)

    # create or retrieve the iobject type
    iobject_type, created = dingos_class_map['InfoObjectType'].objects.get_or_create(name=iobject_type_name,
                                                                                    iobject_family=iobject_family,
                                                                                    namespace=iobject_type_namespace)
    iobject_type_revision, created = dingos_class_map['Revision'].objects.get_or_create(name=iobject_type_revision_name)

    if not create_timestamp:
        create_timestamp = timezone.now()
    #if not timestamp:
    #    timestamp = create_timestamp
    #    iobject = overwrite
    #    created = False



    iobject, created = dingos_class_map["InfoObject"].objects.get_or_create(identifier=identifier,
                                                                           timestamp=timestamp,
                                                                           defaults={'iobject_family': iobject_family,
                                                                                     'iobject_family_revision': iobject_family_revision,
                                                                                     'iobject_type': iobject_type,
                                                                                     'iobject_type_revision': iobject_type_revision,
                                                                                     'create_timestamp': create_timestamp})
    if created:
        iobject.set_name()
        iobject.save()
        identifier.latest = iobject
        identifier.save()


    elif overwrite:
        iobject.timestamp = timestamp
        iobject.create_timestamp = create_timestamp
        iobject.iobject_family = iobject_family
        iobject.iobject_family_revision = iobject_family_revision
        iobject.iobject_type = iobject_type
        iobject.iobject_type_revision = iobject_type_revision
        iobject.set_name()
        iobject.save()

    logger.debug(
        "Created iobject id with %s , ts %s (created was %s) and overwrite as %s" % (iobject.identifier, timestamp, created, overwrite))
    return iobject, created