Ejemplo n.º 1
0
def provision_public_group():
    """If public group name is set in the config file, create it."""
    env, cfg = load_env()
    public_group_name = cfg['misc.public_group_name']
    pg = Group.query.filter(Group.name == public_group_name).first()

    if pg is None:
        DBSession().add(Group(name=public_group_name))
        DBSession().commit()
Ejemplo n.º 2
0
def create_token(ACLs, user_id, name):
    t = Token(permissions=ACLs, name=name)
    u = User.query.get(user_id)
    u.tokens.append(t)
    t.created_by = u
    DBSession().add(u)
    DBSession().add(t)
    DBSession().commit()
    return t.id
Ejemplo n.º 3
0
    def acls(obj, create, extracted, **kwargs):
        if not create:
            return

        if extracted:
            for acl in extracted:
                obj.acls.append(acl)
                DBSession().add(obj)
                DBSession().commit()
Ejemplo n.º 4
0
    def roles(obj, create, extracted, **kwargs):
        if not create:
            return

        if extracted:
            for role in extracted:
                obj.roles.append(role)
                DBSession().add(obj)
                DBSession().commit()
Ejemplo n.º 5
0
 def teardown(stream_id):
     # Fetch fresh instance of stream
     stream = (DBSession().execute(
         sa.select(Stream).filter(
             Stream.id == stream_id)).scalars().first())
     if stream is not None:
         # If it is, delete it
         DBSession().delete(stream)
         DBSession().commit()
Ejemplo n.º 6
0
    def streams(obj, create, extracted, **kwargs):
        if not create:
            return

        if extracted:
            for stream in extracted:
                obj.streams.append(stream)
                DBSession().add(obj)
                DBSession().commit()
Ejemplo n.º 7
0
def public_groupuser(public_group, user):
    user.groups.append(public_group)
    DBSession().commit()
    return (
        DBSession()
        .query(GroupUser)
        .filter(GroupUser.group_id == public_group.id, GroupUser.user_id == user.id)
        .first()
    )
Ejemplo n.º 8
0
    def groups(obj, create, extracted, **kwargs):
        if not create:
            return

        if extracted:
            for group in extracted:
                obj.groups.append(group)
                DBSession().add(obj)
                DBSession().commit()
Ejemplo n.º 9
0
def public_source_two_groups(public_group, public_group2):
    obj = ObjFactory(groups=[public_group, public_group2])
    sources = []
    for group in [public_group, public_group2]:
        source = Source(obj_id=obj.id, group_id=group.id)
        sources.append(source)
        DBSession.add(source)
    DBSession.commit()
    yield obj
    ObjFactory.teardown(obj)
Ejemplo n.º 10
0
    def teardown(invitation):
        if is_already_deleted(invitation, Invitation):
            return

        invited_by = invitation.invited_by.id

        DBSession().delete(invitation)
        DBSession().commit()

        UserFactory.teardown(invited_by)
Ejemplo n.º 11
0
    def teardown(notification):
        if is_already_deleted(notification, UserNotification):
            return

        user = notification.user.id

        DBSession().delete(notification)
        DBSession().commit()

        UserFactory.teardown(user)
Ejemplo n.º 12
0
def test_public_source_page_null_z(driver, user, public_source, public_group):
    public_source.redshift = None
    DBSession().add(public_source)
    DBSession().commit()

    driver.get(f"/become_user/{user.id}")  # TODO decorator/context manager?
    driver.get(f"/source/{public_source.id}")
    driver.wait_for_xpath(f'//div[text()="{public_source.id}"]')
    driver.wait_for_xpath('//*[text()="Export Bold Light Curve to CSV"]', 20)
    driver.wait_for_xpath('//span[contains(text(), "Fe III")]')
    driver.wait_for_xpath(f'//span[text()="{public_group.name}"]')
Ejemplo n.º 13
0
def test_token_user_post_get_thumbnail(upload_data_token, public_group,
                                       ztf_camera):

    obj_id = str(uuid.uuid4())
    status, data = api(
        'POST',
        'sources',
        data={
            'id': obj_id,
            'ra': 234.22,
            'dec': -22.33,
            'redshift': 3,
            'transient': False,
            'ra_dis': 2.3,
            'group_ids': [public_group.id],
        },
        token=upload_data_token,
    )
    assert status == 200
    assert data['data']['id'] == obj_id

    orig_source_thumbnail_count = len(
        DBSession.query(Obj).filter(Obj.id == obj_id).first().thumbnails)
    data = base64.b64encode(
        open(os.path.abspath('skyportal/tests/data/14gqr_new.png'),
             'rb').read())
    ttype = 'new'
    status, data = api(
        'POST',
        'thumbnail',
        data={
            'obj_id': obj_id,
            'data': data,
            'ttype': ttype
        },
        token=upload_data_token,
    )
    assert status == 200
    assert data['status'] == 'success'
    thumbnail_id = data['data']['id']
    assert isinstance(thumbnail_id, int)

    status, data = api('GET',
                       f'thumbnail/{thumbnail_id}',
                       token=upload_data_token)
    assert status == 200
    assert data['status'] == 'success'
    assert data['data']['type'] == 'new'

    assert (DBSession.query(Thumbnail).filter(
        Thumbnail.id == thumbnail_id).first().obj.id) == obj_id
    assert (len(
        DBSession.query(Obj).filter(Obj.id == obj_id).first().thumbnails) ==
            orig_source_thumbnail_count + 1)
Ejemplo n.º 14
0
def create_token(group_id, permissions=[], created_by_id=None, name=None):
    group = Group.query.get(group_id)
    t = Token(acl_ids=permissions, created_by_id=created_by_id, name=name)
    t.groups.append(group)
    if created_by_id:
        u = User.query.get(created_by_id)
        u.tokens.append(t)
        DBSession().add(u)
    DBSession().add(t)
    DBSession().commit()
    return t.id
Ejemplo n.º 15
0
def public_group2_sedm_allocation(sedm, public_group2):
    allocation = Allocation(
        instrument=sedm,
        group=public_group2,
        pi=str(uuid.uuid4()),
        proposal_id=str(uuid.uuid4()),
        hours_allocated=100,
    )
    DBSession().add(allocation)
    DBSession().commit()
    return allocation
Ejemplo n.º 16
0
def public_candidate(public_filter, user):
    obj = ObjFactory(groups=[public_filter.group])
    candidate = Candidate(
        obj=obj,
        filter=public_filter,
        passed_at=datetime.utcnow() - timedelta(seconds=np.random.randint(0, 100)),
        uploader_id=user.id,
    )
    DBSession.add(candidate)
    DBSession.commit()
    yield obj
    ObjFactory.teardown(obj)
Ejemplo n.º 17
0
def public_candidate2(public_filter, user):
    obj = ObjFactory(groups=[public_filter.group])
    DBSession.add(
        Candidate(
            obj=obj,
            filter=public_filter,
            passed_at=datetime.utcnow() -
            timedelta(seconds=np.random.randint(0, 100)),
            uploader_id=user.id,
        ))
    DBSession.commit()
    return obj
Ejemplo n.º 18
0
    def teardown(allocation):
        if is_already_deleted(allocation, Allocation):
            return

        instrument = allocation.instrument
        group = allocation.group.id

        DBSession().delete(allocation)
        DBSession().commit()

        InstrumentFactory.teardown(instrument)
        GroupFactory.teardown(group)
Ejemplo n.º 19
0
    def teardown(notification):
        if is_already_deleted(notification, SourceNotification):
            return

        source = notification.source
        sent_by = notification.sent_by.id

        DBSession().delete(notification)
        DBSession().commit()

        ObjFactory.teardown(source)
        UserFactory.teardown(sent_by)
Ejemplo n.º 20
0
    def teardown(run):
        if is_already_deleted(run, ObservingRun):
            return

        owner = run.owner.id
        instrument = run.instrument
        group = run.group.id
        DBSession().delete(run)
        DBSession().commit()
        UserFactory.teardown(owner)
        GroupFactory.teardown(group)
        InstrumentFactory.teardown(instrument)
Ejemplo n.º 21
0
def setup_permissions():
    """Create default ACLs/Roles needed by application.

    If a given ACL or Role already exists, it will be skipped."""
    all_acls = [ACL.create_or_get(a) for a in all_acl_ids]
    DBSession().add_all(all_acls)
    DBSession().commit()

    for r, acl_ids in role_acls.items():
        role = Role.create_or_get(r)
        role.acls = [ACL.query.get(a) for a in acl_ids]
        DBSession().add(role)
    DBSession().commit()
Ejemplo n.º 22
0
def add_super_user(username):
    """Initializes a super user with full permissions."""
    setup_permissions()  # make sure permissions already exist
    super_user = User.query.filter(User.username == username).first()
    if super_user is None:
        super_user = User(username=username)
        social = TornadoStorage.user.create_social_auth(
            super_user, super_user.username, 'google-oauth2')
    admin_role = Role.query.get('Super admin')
    if admin_role not in super_user.roles:
        super_user.roles.append(admin_role)
    DBSession().add(super_user)
    DBSession().commit()
Ejemplo n.º 23
0
 def teardown(spectrum):
     if is_already_deleted(spectrum, Spectrum):
         return
     instrument = spectrum.instrument
     reducers = spectrum.reducers
     observers = spectrum.observers
     for reducer in reducers:
         UserFactory.teardown(reducer.id)
     for observer in observers:
         UserFactory.teardown(observer.id)
     DBSession().delete(spectrum)
     DBSession().commit()
     InstrumentFactory.teardown(instrument)
Ejemplo n.º 24
0
def group_admin_user(public_group, public_stream):
    user = UserFactory(
        groups=[public_group],
        roles=[models.Role.query.get("Group admin")],
        streams=[public_stream],
    )
    user_id = user.id
    group_user = (DBSession().query(GroupUser).filter(
        GroupUser.group_id == public_group.id,
        GroupUser.user_id == user.id).first())
    group_user.admin = True
    DBSession().commit()
    yield user
    UserFactory.teardown(user_id)
Ejemplo n.º 25
0
    def teardown(request):
        if is_already_deleted(request, FollowupRequest):
            return

        requester = request.requester.id
        allocation = request.allocation
        obj = request.obj

        DBSession().delete(request)
        DBSession().commit()
        UserFactory.teardown(request.last_modified_by.id)
        UserFactory.teardown(requester)
        AllocationFactory.teardown(allocation)
        ObjFactory.teardown(obj)
Ejemplo n.º 26
0
    def teardown(classification):
        if is_already_deleted(classification, Classification):
            return

        author = classification.author.id
        obj = classification.obj
        taxonomy = classification.taxonomy.id

        DBSession().delete(classification)
        DBSession().commit()

        UserFactory.teardown(author)
        ObjFactory.teardown(obj)
        TaxonomyFactory.teardown(taxonomy)
Ejemplo n.º 27
0
def test_observing_run_skycam_component(driver, super_admin_user,
                                        public_source, red_transients_run,
                                        super_admin_token):
    driver.get(f"/become_user/{super_admin_user.id}")

    status, data = post_assignment(
        public_source,
        red_transients_run,
        priority="3",
        comment="Observe please",
        token=super_admin_token,
    )

    assert status == 200
    assert data["status"] == "success"

    driver.get(f"/run/{red_transients_run.id}")

    # 20 second timeout to give the backend time to perform ephemeris calcs
    driver.wait_for_xpath('//*[text()="Current Conditions"]', timeout=20)
    driver.wait_for_xpath(
        f'//img[contains(@src, "{red_transients_run.instrument.telescope.skycam_link}")]'
    )

    red_transients_run.instrument.telescope.skycam_link = (
        'http://this.is.a.bad.link.web.biz')
    DBSession().add(red_transients_run.instrument.telescope)
    DBSession().commit()

    driver.get(f"/run/{red_transients_run.id}")
    driver.wait_for_xpath(
        f'//b[contains(text(), "{red_transients_run.instrument.name}")]')
    driver.wait_for_xpath('//*[text()="Current Conditions"]')
    fallback_url = "static/images/static.jpg"
    driver.wait_for_xpath(f'//img[contains(@src, "{fallback_url}")]')

    red_transients_run.instrument.telescope.skycam_link = None
    DBSession().add(red_transients_run.instrument.telescope)
    DBSession().commit()

    driver.get(f"/run/{red_transients_run.id}")

    # 20 second timeout to give the backend time to perform ephemeris calcs
    driver.wait_for_xpath(
        f'//b[contains(text(), "{red_transients_run.instrument.name}")]',
        timeout=20)
    driver.wait_for_xpath_to_disappear('//*[text()="Current Conditions"]')
    driver.wait_for_xpath_to_disappear(
        f'//img[contains(@src, "{red_transients_run.instrument.telescope.skycam_link}")]'
    )
Ejemplo n.º 28
0
def test_javascript_sexagesimal_conversion(public_source, driver, user):
    public_source.ra = 342.0708127
    public_source.dec = 56.1130711
    DBSession().commit()
    driver.get(f"/become_user/{user.id}")
    driver.get(f"/source/{public_source.id}")
    driver.wait_for_xpath('//*[contains(., "22:48:17.00")]')
    driver.wait_for_xpath('//*[contains(., "+56:06:47.06")]')
    public_source.ra = 75.6377796
    public_source.dec = 15.606709
    DBSession().commit()
    driver.refresh()
    driver.wait_for_xpath('//*[contains(., "05:02:33.07")]')
    driver.wait_for_xpath('//*[contains(., "+15:36:24.15")]')
Ejemplo n.º 29
0
    def teardown(assignment):
        if is_already_deleted(assignment, ClassicalAssignment):
            return

        requester = assignment.requester.id
        run = assignment.run
        obj = assignment.obj
        last_modified_by = assignment.last_modified_by.id

        DBSession().delete(assignment)
        DBSession().commit()
        ObservingRunFactory.teardown(run)
        ObjFactory.teardown(obj)
        UserFactory.teardown(last_modified_by)
        UserFactory.teardown(requester)
Ejemplo n.º 30
0
    def teardown(obj):
        if is_already_deleted(obj, Obj):
            return

        instruments = obj.instruments
        comment_authors = list(map(lambda x: x.author.id, obj.comments))
        for author in comment_authors:
            UserFactory.teardown(author)
        spectra = DBSession().query(Spectrum).filter(Spectrum.obj_id == obj.id).all()
        for spectrum in spectra:
            SpectrumFactory.teardown(spectrum)
        DBSession().delete(obj)
        DBSession().commit()
        for instrument in instruments:
            InstrumentFactory.teardown(instrument)