Esempio n. 1
0
def add_to_database(connection, galaxy):
    """
    Adds the specified galaxies to the database
    :param connection:
    :param galaxy:
    :return:
    """
    galaxy_name = galaxy['name']
    redshift = galaxy['redshift']
    galaxy_type = galaxy['type']
    input_file = galaxy['input_file']
    priority = galaxy['priority']
    run_id = galaxy['run_id']
    sigma_in = galaxy['sigma']
    tags = galaxy['tags']
    integrated = galaxy['int']
    integrated_snr = galaxy['int_snr']
    rad = galaxy['rad']
    rad_snr = galaxy['rad_snr']

    transaction = connection.begin()
    try:
        try:
            sigma = float(sigma_in)
            sigma_filename = None
        except ValueError:
            sigma = 0.0
            sigma_filename = sigma_in

        result = connection.execute(
            REGISTER.insert(),
            galaxy_name=galaxy_name,
            redshift=redshift,
            galaxy_type=galaxy_type,
            filename=input_file,
            priority=priority,
            register_time=datetime.now(),
            run_id=run_id,
            sigma=sigma,
            sigma_filename=sigma_filename,
            int_filename=integrated,
            int_sigma_filename=integrated_snr,
            rad_filename=rad,
            rad_sigma_filename=rad_snr
        )

        register_id = result.inserted_primary_key[0]

        # Get the tag ids
        tag_ids = set()
        for tag_text in tags:
            tag_text = tag_text.strip()
            if len(tag_text) > 0:
                tag = connection.execute(select([TAG]).where(TAG.c.tag_text == tag_text)).first()
                if tag is None:
                    result = connection.execute(
                        TAG.insert(),
                        tag_text=tag_text
                    )
                    tag_id = result.inserted_primary_key[0]
                else:
                    tag_id = tag[TAG.c.tag_id]

                tag_ids.add(tag_id)

        # Add the tag ids
        for tag_id in tag_ids:
            connection.execute(
                TAG_REGISTER.insert(),
                tag_id=tag_id,
                register_id=register_id
            )

        transaction.commit()
        LOG.info('Registered %s %s %f %s %d %d', galaxy_name, galaxy_type, redshift, input_file, priority, run_id)
        for tag_text in tags:
            LOG.info('Tag: {0}'.format(tag_text))
    except Exception:
        transaction.rollback()
        raise
                            sigma_filename=sigma_filename)

register_id = result.inserted_primary_key[0]

# Get the tag ids
tag_ids = set()
for tag_text in TAGS:
    tag_text = tag_text.strip()
    if len(tag_text) > 0:
        tag = connection.execute(select([TAG]).where(TAG.c.tag_text == tag_text)).first()
        if tag is None:
            result = connection.execute(TAG.insert(),
                                        tag_text=tag_text)
            tag_id = result.inserted_primary_key[0]
        else:
            tag_id = tag[TAG.c.tag_id]

        tag_ids.add(tag_id)

# Add the tag ids
for tag_id in tag_ids:
    connection.execute(TAG_REGISTER.insert(),
                       tag_id=tag_id,
                       register_id=register_id)

transaction.commit()

LOG.info('Registered %s %s %f %s %d %d', GALAXY_NAME, GALAXY_TYPE, REDSHIFT, INPUT_FILE, PRIORITY, RUN_ID)
for tag_text in TAGS:
    LOG.info('Tag: {0}'.format(tag_text))