예제 #1
0
    def test_view_widgets(self):
        # this test 3 valued widgets where valid values are 'yes', 'no' or '-'
        # '-' is shown when no value given

        client = self.app.test_client()
        with self.app.test_request_context():
            session = database.get_session()
            row = database.ReportRow()
            row.update(self.report_data)
            session.save(row)
            session.commit()

        view_response = client.get('/reports/%s/' % row.id)

        # clone self.report_data dict
        data = dict(self.report_data)

        del data[u'details_publisher']
        with self.app.test_request_context():
            session = database.get_session()
            row.update(data)
            session.save(row)
            session.commit()

        # no value given, look for '-'
        label = 'Published by'
        value = '-'
        self.assertTrue(
            common.search_label_value(label, value, view_response.data))
예제 #2
0
def restaurant_add_update_category():
    user = get_user()

    if (user):
        restaurant = Restaurant.get_from_id(user.restaurant_id)

        if (restaurant):
            name = get_header("name")
            id = get_header_int("id")

            if (name and len(name) <= 50):
                if (is_int(id)):
                    category = Category.get_from_id(restaurant, id)

                    if (category):
                        if (get_header("remove")):
                            category.remove()
                        else:
                            category.name = name
                            get_session().commit()

                        return "true"
                    else:
                        abort(404)
                else:
                    Category.add(name, restaurant)

                    return "true"
            else:
                abort(400)

        else:
            abort(404)
    else:
        abort(404)
예제 #3
0
    def test_view_widgets(self):
        # this test 3 valued widgets where valid values are 'yes', 'no' or '-'
        # '-' is shown when no value given

        client = self.app.test_client()
        with self.app.test_request_context():
            session = database.get_session()
            row = database.ReportRow()
            row.update(self.report_data)
            session.save(row)
            session.commit()

        view_response = client.get('/reports/%s/' %row.id)
        
        # clone self.report_data dict
        data = dict(self.report_data)
        
        del data[u'details_publisher']
        with self.app.test_request_context():
            session = database.get_session()
            row.update(data)
            session.save(row)
            session.commit()

        # no value given, look for '-'
        label = 'Published by'
        value = '-'
        self.assertTrue(common.search_label_value(label, value, view_response.data))
예제 #4
0
def cancel_order():
    client = get_client()

    if (client):
        orderId = get_header_int("orderId")

        if (orderId):
            order = Order.get_from_id(orderId)

            if (order):
                if (order.status != 2 and order.status != -1):
                    if (order.client_id == client.id):
                        order.status = -1
                        get_session().commit()

                        return "true"
                    else:
                        abort(401)
                else:
                    abort(401)
            else:
                abort(404)
        else:
            abort(400)
    else:
        abort(401)
예제 #5
0
def restaurant_add_update_product():
    user = get_user()

    if (user):
        restaurant = Restaurant.get_from_id(user.restaurant_id)

        if (restaurant):
            name = get_header("name")
            description = get_header("description")
            price = get_header_float("price")
            id = get_header_int("id")

            if (is_int(id)):
                product = Product.get_from_id(id)

                if (product):
                    if (get_header("remove")):
                        product.remove()
                    else:
                        if (name and description and is_float(price)
                                and len(name) <= 50
                                and len(description) <= 100):
                            product.name = name
                            product.description = description
                            product.price = price
                            get_session().commit()
                        else:
                            abort(400)

                    return "true"
                else:
                    abort(404)
            else:
                categoryId = get_header_int("category")

                if (is_int(categoryId) and len(name) <= 50
                        and len(description) <= 100):
                    category = Category.get_from_id(restaurant, categoryId)

                    if (category):
                        Product.add(name, description, price, restaurant,
                                    category)

                        return "true"
                    else:
                        abort(404)
                else:
                    abort(400)

        else:
            abort(404)
    else:
        abort(404)
예제 #6
0
def name_new_event():
    schema = [
        'event_name',
        'email',
        'event_target',
        'event_type',
        'handle',
        'path',
        'platform',
        'referrer',
        'user_id',
    ]
    event_json = request.get_json() or {}
    logging.warn(event_json)
    if 'event_name' not in event_json:
        return 'Missing event_name in json', 400

    session = database.get_session()

    name = event_json['event_name']
    existing = session.query(models.EventName)
    existing = existing.filter_by(event_name=name).first()
    if existing:
        session.delete(existing)
        session.commit()

    text_query = 'SELECT upsert_event_name({});'.format(', '.join(
        'f_{col} := :{col}'.format(col=col) for col in schema))
    session.execute(text_query, {col: event_json.get(col) for col in schema})
    session.commit()
    session.close()
    return jsonify({'ok': True}), 200
예제 #7
0
def get_popular_events():
    session = database.get_session()
    query = session.query(
        func.count(models.Event.id),
        models.Event.event_type,
        models.Event.event_target,
    ).group_by(
        models.Event.event_type,
        models.Event.event_target,
    ).order_by(func.count(models.Event.id).desc()).limit(100)
    events = query.all()

    event_names = session.query(models.EventName).limit(1000).all()

    events_dict = models.values_to_dicts(events,
                                         column_names=('count', 'event_type',
                                                       'event_target'))

    # TODO: This quadratic thing is baaad
    for event in events_dict:
        for name_row in event_names:
            if name_row.event_type not in ('xNULL', event['event_type']):
                continue
            if name_row.event_target not in ('xNULL', event['event_target']):
                continue
            event['event_name'] = name_row.event_name
            break

    session.close()
    return jsonify(events_dict)
예제 #8
0
def report_delete(report_id):
    if flask.request.method == 'POST':
        session = database.get_session()
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            # TODO change when multiple reviews will be implemented
            session.table(database.SerisReviewRow) \
                   .delete(reviews_list[0].id)

        report_row = database.get_report_or_404(report_id)
        title = report_row['details_original_name']
        session.table(database.ReportRow).delete(report_id)
        session.commit()

        action = 'deleted'
        contributor_id = getattr(flask.g, 'user_id')
        contributor_name = '%s %s' % (getattr(
            flask.g, 'user_first_name'), getattr(flask.g, 'user_last_name'))
        contributor_profile = (
            'http://www.eionet.europa.eu/directory/user?uid=%s' %
            contributor_id)
        send_notification_mail(None, title, action, contributor_profile,
                               contributor_name, contributor_id)

        flask.flash("Report deleted.", "success")
        url = flask.url_for('views.report_list')
        country = flask.request.args.get('country')
        if country:
            url = url + '?country=' + country
        region = flask.request.args.get('region')
        if region:
            url = url + '?region=' + region
        return flask.redirect(url)
예제 #9
0
def create_rack(owner, volume):
    """
    Создание пустой серверной стойки
    :param owner: Владелец (selectel | иной собственник)
    :param volume: Тип стойки (10 | 20)
    :return: id новой стойки
    """
    tmp_session = get_session()
    try:
        owner = MAIN_OWNER if owner.lower() == MAIN_OWNER else 'other owner'
        if tmp_session is None:
            raise OSError
        new_rack = Rack(date_creation=datetime.now(),
                        date_last_changes=datetime.now(),
                        owner=owner,
                        address=SELECTEL_ADDR,
                        volume=ENABLED_VOLUME.get(volume, 10))
        tmp_session.add(new_rack)
        tmp_session.commit()
        module_logger.info('Новая серверная стойка успешно создана.')
        return new_rack.id
    except OSError:
        module_logger.error(
            'Ошибка в назначении прав доступа к файловой директории.')
    except Exception as err:
        module_logger.error(
            "Ошибка операции создания новой серверной стойки. %s" % str(err))
    finally:
        tmp_session.close()
예제 #10
0
def add_server_to_rack(server_id, rack_id, new=False):
    """
    Добавление сервера в стойку
    :param server_id: сервер
    :param rack_id: id стойки куда перемещаем сервер
    :return: id
    """
    tmp_session = get_session()
    try:
        rack = tmp_session.query(Rack).get(int(rack_id))
        server = tmp_session.query(Server).get(int(server_id))
        # если перемещаем ранее созданный сервер
        if not new:
            check_free_slots(rack)
            server.rack_id = None
            tmp_session.commit()
        rack.servers.append(server)
        tmp_session.commit()
        module_logger.info(
            'В серверную стойку с id={0} добавлен сервер с id={1}'.format(
                str(rack_id), str(server_id)))
        return server.id
    except Exception as err:
        module_logger.error(err)
    finally:
        tmp_session.close()
예제 #11
0
def create_and_add_server(rack_id, server_ip, ram):
    """
    Создание нового сервера и добавление его в серверную стойку.
    :param rack_id: id стойки
    :param server_ip: назначенный ip
    :param ram: объем оперативной памяти
    :return: id созданного сервера
    """
    tmp_session = get_session()
    try:
        rack = tmp_session.query(Rack).get(int(rack_id))
        check_free_slots(rack)
        new_server = Server(date_creation=datetime.now(),
                            date_last_changes=datetime.now(),
                            server_ip=check_ip(server_ip),
                            server_ram=ram,
                            server_core=SEVER_STANDART_CORE,
                            optical_port=False,
                            status=SEVER_STATUS_LIST[START_SERVER_STATUS])
        tmp_session.add(new_server)
        tmp_session.commit()
        module_logger.info('Создан новый сервер с id=%s' % str(new_server.id))
        add_server_to_rack(new_server.id, rack.id, new=True)
        return new_server.id
    except AttributeError:
        module_logger.error('Ошибка указания ip создаваемого сервера.')
        return False
    except Exception as err:
        module_logger.error(err)
        return False
    finally:
        tmp_session.close()
예제 #12
0
    def remove(self):
        for product in Product.get_from_category(self):
            product.remove()

        session = get_session()
        session.delete(self)
        session.commit()
예제 #13
0
def get_items(level_id):
    session = get_session()

    items = session.query(ItemsTable).filter_by(level_id=level_id).all()
    players_items = session.query(PlayersItemsTable).filter_by(
        level_id=level_id)

    data = {'open': [], 'complete': []}
    for item in items:
        if item.id in [x.item_id for x in players_items]:
            continue

        answer = json.loads(item.answer)
        data['open'].append({
            "id": item.id,
            "item_type": item.item_type,
            "question": item.question,
            "bonus": True if answer['bonus'] else False
        })

    for item in players_items:
        data['complete'].append({
            "id": item.item_id,
            "item_type": item.item.item_type,
            "question": item.item.question,
            "solved": item.player.name
        })

    return data
예제 #14
0
def process_response(**kwargs):
    print json.dumps(kwargs)
    # save response
    session = db.get_session(kwargs["session_id"])
    question = db.get_question(session["survey_id"],
                               session["question_ordernumber"])
    question_id = question["id"]
    response = ""
    if str(question_id) in kwargs:
        response = kwargs[str(question_id)]

    if question["type"] in {"1", "M", "O", "JN"}:
        if question["type"] == "M":
            response = ",".join(response)
        db.save_response(session["id"], question_id, response)

    if "next" in kwargs:
        c = db.next_question(kwargs["session_id"])
        print "wat is c?", c
        while c and not check_condition(session["id"]):
            c = db.next_question(kwargs["session_id"])
    if "back" in kwargs:
        c = db.prev_question(kwargs["session_id"])
        while c and not check_condition(session["id"]):
            c = db.prev_question(kwargs["session_id"])
    return render_survey(kwargs["session_id"])
예제 #15
0
def data_import(file):
    logging.basicConfig()

    with open(file, "r") as f:
        data = json.loads(f.read())
        session = database.get_session()

        for item in data:
            # NULL objects for country => ""
            if item["personal_country"].strip() == "NULL":
                item["personal_country"] = ""
            if item["representing_country"].strip() == "NULL":
                item["representing_country"] = ""

            person = schema.PersonSchema.from_flat(item)
            if person.validate():
                log.info("Person %r added." %
                         person.find("personal/first_name")[0].value)

                session.save(database.PersonRow(person.flatten()))
            else:
               # import pdb; pdb.set_trace()
               log.error("Person is not valid.")
               log.error("%s" % item)
               for element in person.all_children:
                   log.error("%r, %r" % (element.name, element.errors))

        session.commit()
예제 #16
0
def main():
    args = _parse_args()
    session = get_session(args.url_path)
    #configs = session.query(Config).filter(Config.param.like("%solver%")).all()
    tasks = args.tasks
    if not isinstance(tasks, list):
        tasks = [tasks]
    resetted_tasks = []
    for task in tasks:
        resetted_tasks.append(
            session.query(Task).filter(Task.id == task).one())

    to_delete = []
    for task in resetted_tasks:
        if args.deletejobs:
            task_jobs = task.jobs
            to_delete = to_delete + task_jobs
        task.status = Task.STATUS_OPTIONS.CREATED
        if task.parent is not None:
            task.parent.status = Task.STATUS_OPTIONS.CREATED

    if input(
            f"{len(to_delete)} jobs will be reset for tasks {tasks} and the tasks will be reset. Sure? y/[n]: "
    ).lower() == "y":
        for job in to_delete:
            if job.solution is not None:
                session.delete(job.solution)
                job.solution = None
        session.commit()
예제 #17
0
def get_session():
    cookie = get_cookie()
    if "session" not in cookie:
        return None
    session_id = cookie["session"].value
    session = database.get_session(session_id)
    return session
예제 #18
0
 def cloud_data(self):
     with database.get_session() as session:
         try:
             # Make sure we actually query all data (including all relations) as the session will be closed afterwards and a lazy evaluation is only possible after reattaching to a session
             return session.query(CloudDef).filter(CloudDef.clouddef_id == self.clouddef_id).options(joinedload("*")).one()
         except (NoResultFound, MultipleResultsFound):
             raise app_exceptions.UnknownCloudException()
예제 #19
0
def remove():
    db = database.get_session()
    # This function is basically identical to the user addition function.
    # We use the get_session method to create a connection with the database.
    # Next we get the value of the username that was entered in the form
    # using the request library that comes with flask.
    username = request.form['username']

    # Next we use the query method to search the table User and we filter our query by the username we got above.
    # More documentation on querying and just general sqlalchemy knowledge can be found at
    # http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#querying
    # After that we just use the built in delete method to remove the user and then
    # we have to make sure we commit after that to make the deletion permanent.

    user = db.query(schema.User).filter_by(username=username).first()
    user_auth = db.query(schema.Auth).filter_by(username=username).first()
    if user:
        db.delete(user)
        if user_auth:
            db.delete(user_auth)
        else:
            pass
        db.commit()
        db.close()
        return redirect(url_for('removeuser'))

    else:
        return redirect(url_for('no_user'))
def main():
    config = _load_config()
    session = get_session(config.url_path)
    graphs = []
    if config.seed is None:
        seed = int(np.random.default_rng(None).integers(np.array([2**63]))[0])
        config.seed = seed
    else:
        seed = int(config.seed)
        
    gen = np.random.default_rng(seed)
    counter = 0
    assert len(config.vertex_shape) % 2 == 0
    shapes = np.array(config.vertex_shape).reshape(round(len(config.vertex_shape)/2), 2)
    l_shapes = len(shapes)
    for n in range(config.min_n, config.max_n):
        size = config.cel_min
        while size <= config.cel_max:
            for i in range(config.repetitions):
                graphs.append(create_random_celest_graph(n,vertex_shape=shapes[counter % l_shapes], celest_bounds=(size,size+config.cel_range), seed=gen))
                counter += 1
            size += config.cel_step
    task = Task(name=config.name, task_type="CelestialGraphInstances", status=Task.STATUS_OPTIONS.FINISHED)
    # Convert the namespace config into database config
    task_config_holder = ConfigHolder.fromNamespace(config, task=task, ignored_attributes=["url_path", "name", "config"])
    task.jobs = [TaskJobs(graph=graph, task=task) for graph in graphs]
    
    
    session.add(task)
    session.commit()
    print(counter, "instances were created. Corresponding task is", task.id)
예제 #21
0
def work(interval):
    """
    This is where the work is done
    @param interval: The interval between two calls if there are no request
    """
    logger.debug('Worker Running!')
    loop = asyncio.get_event_loop()
    session = database.get_session()
    request = get_request()
    if request is None:
        loop.call_later(interval, work, interval)
        logger.debug('Waiting for Request, check again in %s seconds.' % interval)
        return False
    try:
        logger.info('Calculating Hash for: %s' % request)
        request = session.merge(request)
        fhash = calculate_hash(request.server.ip, request.server.port, request.server.id)

        file = File(name=fix_encoding(request.name), folder=request.folder, mtime=request.mtime,
                    size=request.size,
                    host=request.host, hash=fhash)
        session.add(file)
        session.delete(request.server)
        session.delete(request)
        session.commit()
    except Exception as e:
        logger.exception(e)
        session.rollback()

    loop.call_soon(work, interval)
    return True
예제 #22
0
def add_task_result(task_result):
    ''' This will be called from a client and executed on the master '''
    logger.debug("Got task_result result -> adding to DB")

    try:
        # This will be called from the celery worker and not from the main module, therefore we need to make sure, that the DB is initialized
        database.setup_db()

        with database.get_session() as session:
            # T
            inst = session.query(Task).filter(Task.task_id == task_result.task_id)
            result = inst.one()

            result.completed = task_result.completed
            result.output = task_result.output
            result.build_logs = ''.join(task_result.build_logs)
            result.exception = task_result.exception
            result.traceback = task_result.traceback
            result.worker_hostname = task_result.hostname
            result.exit_code = task_result.exit_code
            result.duration = task_result.duration

            session.commit()
    except:
        logger.error(traceback.format_exc())
        return False

    return True
예제 #23
0
    def modify_category(category_id):
        """Modify the category.

        You can only modify a category if you are logged.

        Args:
            category_id: Id of the category that will be modified.

        Returns:
            An html form if its a GET request, or redirects to the main page if
            its a POST request.
        """
        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        category = db_session.query(database.Category).get(category_id)
        if category is None:
            flask.abort(404)

        if flask.request.method == 'GET':
            return flask.render_template('edit_category.html',
                                         category=category)
        elif flask.request.method == 'POST':
            try:
                category.name = flask.request.form['name']
            except KeyError:
                flask.abort(400)
            db_session.commit()
            return flask.redirect(flask.url_for('show_catalog'))
예제 #24
0
def get_request():
    """
    @return: a random request guarantied to be locked and unique
    """
    session = database.get_session()
    me = Host.by_name(socket.gethostname(), session)
    if me.region is not None:
        # noinspection PyComparisonWithNone,PyPep8
        query = session.query(HashRequest).join(HashRequest.host).join(Host.region).filter(
            and_(HashRequest.locked == False, HashRequest.server != None,
                 Region.id == me.region.id)).order_by(func.random()).with_for_update()
    else:
        # noinspection PyComparisonWithNone,PyPep8
        query = session.query(HashRequest).join(HashRequest.host).filter(
            and_(HashRequest.locked == False, HashRequest.server != None,
                 HashRequest.host == me)).order_by(func.random()).with_for_update()
    try:
        request = query.first()
        if request is None:
            return None
        request.locked = True
        session.commit()
        return request
    except Exception as error:
        session.rollback()
        raise error

    finally:
        session.close()
예제 #25
0
def update_fee_using_relations():
    session = database.get_session()

    for meeting_row in database.find('meeting'):
        meeting_schema = schema.MeetingSchema.from_flat(meeting_row)
        fees = meeting_schema['fees']
        for fee in fees:
            try:
                fee_model = (models.Fee.select()
                    .where(data__contains={'id': str(fee['id'].value)})
                    .where(meeting=meeting_row.id)
                    .get())
            except models.Fee.DoesNotExist:
                fee_data = fee.flatten()
                fee_data = [(re.sub('(fees_\d+_)', '', k), v)
                             for k, v in fee_data]
                fee_model = models.Fee()
                fee_model.meeting = meeting_row.id
                fee_model.data = {}
                fee_model.data.update(fee_data)
                fee_model.save()

        meeting_schema['fees'].set(None)
        meeting_row.clear()
        meeting_row.update(meeting_schema.flatten())
        session.save(meeting_row)
        session.commit()
예제 #26
0
    def new_category():
        """Creates a new category.

        You can only create a category if you are logged.

        Returns:
            An html form if its a GET request, or redirects to the main page if
            its a POST request.
        """
        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()

        if flask.request.method == 'GET':
            return flask.render_template('new_category.html')
        elif flask.request.method == 'POST':
            try:
                category = database.Category(
                    name=flask.request.form['name']
                )
            except KeyError:
                flask.abort(400)
            db_session.add(category)
            db_session.commit()
            return flask.redirect(flask.url_for('show_catalog'))
예제 #27
0
def visualize_solutions_overview_second_batch():
    from database import Task, TaskJobs, Config, Graph, get_session, CelestialGraph, AngularGraphSolution
    from instance_evolver import GraphGenome
    from utils import visualize_graph_2d, visualize_min_sum_sol_2d, visualize_solution_2d
    from matplotlib import pyplot as plt
    session = get_session("angular.db")
    from utils.visualization import visualize_solution_scatter, VisTypes
    min_sum_tasks = session.query(Task).filter(Task.parent_id == 45).all()
    local_min_sum_tasks = session.query(Task).filter(
        Task.parent_id == 40).all()
    makespan_tasks = session.query(Task).filter(
        Task.parent_id == 30, ~Task.name.like("%Reduced%")).all()
    min_sum_jobs = session.query(TaskJobs).filter(
        TaskJobs.task_id.in_([t.id for t in min_sum_tasks])).all()
    local_min_sum_jobs = session.query(TaskJobs).filter(
        TaskJobs.task_id.in_([t.id for t in local_min_sum_tasks])).all()
    makespan_jobs = session.query(TaskJobs).filter(
        TaskJobs.task_id.in_([t.id for t in makespan_tasks])).all()
    #visualize_solution_scatter(min_sum_jobs, "Bla", vis_type=VisTypes.All, logscale=True, loc=9)
    #visualize_solution_scatter(local_min_sum_jobs, "Bla", vis_type=VisTypes.All, logscale=True, loc=9)
    visualize_solution_scatter(makespan_jobs,
                               "Bla",
                               vis_type=VisTypes.All,
                               logscale=True,
                               loc=9)
    print("finished")
예제 #28
0
def settings_phrases(meeting_id):
    session = database.get_session()
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)

    if flask.request.method == 'POST':
        form_data = dict(schema.PhraseSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())
        phrase_schema = schema.PhraseSchema.from_flat(form_data)

        if phrase_schema.validate():
            phrase = (models.Phrase.select()
                .where(data__contains={'id': str(phrase_schema['id'].value)})
                .where(meeting=meeting_id).get())
            phrase.data.clear()
            phrase.data.update(phrase_schema.flatten())
            phrase.save()
            flask.flash('Phrase saved', 'success')
        else:
            flask.flash(u'Errors in phrase information', 'error')

    phrases = meeting.get_phrases

    return {
        'language': refdata.language,
        'phrases': phrases,
        'meeting': meeting,
    }
예제 #29
0
    def delete_category(category_id):
        """Deletes the category.

        You can only delete a category if you are logged and the category is
        empty.

        Args:
            category_id: Id of the category to be deleted.

        Returns:
            Return an html form if its a GET request, or redirects to the main
            page if its a POST request.
        """
        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        category = db_session.query(database.Category).get(category_id)
        if category is None:
            flask.abort(404)

        if flask.request.method == 'GET':
            return flask.render_template('delete_category.html',
                                         category=category)
        elif flask.request.method == 'POST':
            if not category.items:
                db_session.delete(category)
                db_session.commit()
                return flask.redirect(flask.url_for('show_catalog'))
            else:
                flask.abort(500)
예제 #30
0
def visualize_sols_inst_gen():
    from database import Task, TaskJobs, Config, Graph, get_session, CelestialGraph, AngularGraphSolution
    from utils import visualize_graph_2d, visualize_min_sum_sol_2d, visualize_solution_2d
    session = get_session("angular_copy.db")
    with session.no_autoflush:
        task = session.query(Task).filter(Task.task_type == "CelestialGraphInstances").one()
        task_jobs = session.query(TaskJobs).filter(TaskJobs.task == task).all()
        cel_graphs_old = session.query(CelestialGraph)\
            .filter(CelestialGraph.id.in_([job.graph_id for job in task_jobs]), CelestialGraph.vert_amount <= 8)\
            .all()
        cel_graphs = [i for i in cel_graphs_old if i.id in [44,68,81,82,96,1, 21, 12, 3]]

        min_sum_sols = [session.query(AngularGraphSolution).filter(AngularGraphSolution.graph_id == cel.id, AngularGraphSolution.is_optimal == True, AngularGraphSolution.solution_type == "min_sum").all() for cel in cel_graphs]
        local_min_sum_sols = [session.query(AngularGraphSolution).filter(AngularGraphSolution.graph_id == cel.id, AngularGraphSolution.is_optimal == True, AngularGraphSolution.solution_type == "local_min_sum").all() for cel in cel_graphs]
        makespan_sols = [session.query(AngularGraphSolution).filter(AngularGraphSolution.graph_id == cel.id, AngularGraphSolution.is_optimal == True, AngularGraphSolution.solution_type == "makespan").all() for cel in cel_graphs]
        for g, min_s, l_s, m_s in zip(cel_graphs, min_sum_sols, local_min_sum_sols, makespan_sols):
            print("Graph-id", g.id)
            visualize_graph_2d(g)

            if min_s:
                print("Minsum:")
                visualize_min_sum_sol_2d(min_s[0])
            if l_s:
                print("LocalMinSum")
                visualize_min_sum_sol_2d(l_s[0])
            if m_s:
                print("Makespan")
                visualize_solution_2d(m_s[0])
    return
예제 #31
0
def intialize():
    session['logged_in'] = False

    #creates the database for the driver schedule. the if statement checks to see if the database already exists and passes if it does, otherwise it creates the database.

    db = database.get_session()
    if db.query(schema.Schedule).filter_by(id=1).first():
        db.close()
    else:
        session['logged_in'] = False
        monday = schema.Schedule(day="Monday")
        tuesday = schema.Schedule(day="Tuesday")
        wednesday = schema.Schedule(day="Wednesday")
        thursday = schema.Schedule(day="Thursday")
        friday = schema.Schedule(day="Friday")
        saturday = schema.Schedule(day="Saturday")
        sunday = schema.Schedule(day="Sunday")
        db.add(monday)
        db.add(tuesday)
        db.add(wednesday)
        db.add(thursday)
        db.add(friday)
        db.add(saturday)
        db.add(sunday)
        db.commit()
        db.close()
예제 #32
0
    def get_from_name_password(username, password):
        session = get_session()
        hashedPassword = pbkdf2_sha256.hash(password)
        result = session.query(User).filter(User.username == username).filter(User.password == password).all()

        if (len(result) > 0):
            return result[0]
예제 #33
0
    def modify_category(category_id):
        """Modify the category.

        You can only modify a category if you are logged.

        Args:
            category_id: Id of the category that will be modified.

        Returns:
            An html form if its a GET request, or redirects to the main page if
            its a POST request.
        """
        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        category = db_session.query(database.Category).get(category_id)
        if category is None:
            flask.abort(404)

        if flask.request.method == 'GET':
            return flask.render_template('edit_category.html',
                                         category=category)
        elif flask.request.method == 'POST':
            try:
                category.name = flask.request.form['name']
            except KeyError:
                flask.abort(400)
            db_session.commit()
            return flask.redirect(flask.url_for('show_catalog'))
예제 #34
0
def main():
    config = _load_config()
    session = get_session(config.url_path)

    if config.seed is None:
        seed = int(np.random.default_rng(None).integers(np.array([2**63]))[0])
        config.seed = seed
    else:
        seed = int(config.seed)

    gen = np.random.default_rng(seed)
    if config.fixed_edges:
        graphs = _fixed_generation(config, gen)
    else:
        graphs = _probability_generation(config, gen)
    task = Task(name=config.name,
                task_type="GeometricGraphInstances",
                status=Task.STATUS_OPTIONS.FINISHED)
    # Convert the namespace config into database config
    task_config_holder = ConfigHolder.fromNamespace(
        config, task=task, ignored_attributes=["url_path", "name", "config"])
    task.jobs = [TaskJobs(graph=graph, task=task) for graph in graphs]

    session.add(task)
    session.commit()
    print(len(task.jobs), "instances were created. Corresponding task is",
          task.id)
예제 #35
0
파일: job.py 프로젝트: umr-ds/dynalize
def _merge_job(json_data, job_id=None):
    if json_data is None or not 'name' in json_data or not 'clouddef_id' in json_data:
        return json_status(False, 400, "Missing required parameters")

    with database.get_session() as session:
        new_job = Job(job_id=job_id,
                      clouddef_id=json_data.get('clouddef_id'),
                      run_layer_id=json_data.get('run_layer_id', None),
                      script_id=json_data.get('script_id', None),
                      source_datadef_id=json_data.get('source_datadef_id',
                                                      None),
                      destination_datadef_id=json_data.get(
                          'destination_datadef_id', None),
                      name=json_data.get('name'),
                      task_timeout=json_data.get('task_timeout', 0))

        if new_job.run_layer_id == "0": new_job.run_layer_id = None
        if new_job.script_id == "0": new_job.script_id = None

        # Merge will automatically add a new instance if the primary key does not already exist
        new_job = session.merge(new_job)
        session.commit()

        return json_status(True,
                           url=api_restful.url_for(JobApi,
                                                   job_id=new_job.job_id))
예제 #36
0
    def new_category():
        """Creates a new category.

        You can only create a category if you are logged.

        Returns:
            An html form if its a GET request, or redirects to the main page if
            its a POST request.
        """
        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()

        if flask.request.method == 'GET':
            return flask.render_template('new_category.html')
        elif flask.request.method == 'POST':
            try:
                category = database.Category(name=flask.request.form['name'])
            except KeyError:
                flask.abort(400)
            db_session.add(category)
            db_session.commit()
            return flask.redirect(flask.url_for('show_catalog'))
예제 #37
0
    def delete_category(category_id):
        """Deletes the category.

        You can only delete a category if you are logged and the category is
        empty.

        Args:
            category_id: Id of the category to be deleted.

        Returns:
            Return an html form if its a GET request, or redirects to the main
            page if its a POST request.
        """
        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        category = db_session.query(database.Category).get(category_id)
        if category is None:
            flask.abort(404)

        if flask.request.method == 'GET':
            return flask.render_template('delete_category.html',
                                         category=category)
        elif flask.request.method == 'POST':
            if not category.items:
                db_session.delete(category)
                db_session.commit()
                return flask.redirect(flask.url_for('show_catalog'))
            else:
                flask.abort(500)
예제 #38
0
def main():
    if not is_debug_env():
        print(
            "No debugger detected! This file is inteded to run with debugger. Proceed without with care"
        )
    arguments = _parse_args()
    session = get_session(arguments.url_path)
    error_jobs = session.query(TaskJobs).join(AngularGraphSolution)\
        .filter(AngularGraphSolution.error_message != None).order_by(TaskJobs.task_id).all()
    print(
        f"{len(error_jobs)} found. Will now start resolve these instances...")
    prev_task = None
    for job in tqdm.tqdm(error_jobs, desc="Resolvng error solutions"):
        if prev_task is None or prev_task != job.task:
            config = ConfigHolder(job.task)
            solver = ALL_SOLVER[config.solver](**config.solver_args)
            prev_task = job.task
        sol = solver.solve(job.graph)
        if sol.error_message is None:
            old_sol = job.solution
            session.delete(old_sol)
            job.solution = sol
            session.commit()
        else:
            print(
                f"Still error message for job {job} with message: {sol.error_message}"
            )
    session.commit()
예제 #39
0
def _merge_cloud(json_data, clouddef_id=None):
    if json_data is None or not 'name' in json_data or not 'cloudprovider_id' in json_data:
        return json_status(False, 400, "Missing required parameters")

    with database.get_session() as session:
        new_cloud = CloudDef(
            name=json_data.get('name'),
            cloudprovider_id=json_data.get('cloudprovider_id'),
            virtual_device_layer_id=json_data.get('virtual_device_layer_id',
                                                  None),
            test_layer_id=json_data.get('test_layer_id', None),
            client_startup_parameters=json_data.get(
                'client_startup_parameters', None))

        if str(new_cloud.virtual_device_layer_id) == "0":
            new_cloud.virtual_device_layer_id = None
        if str(new_cloud.test_layer_id) == "0": new_cloud.test_layer_id = None

        if clouddef_id is not None:
            new_cloud.clouddef_id = clouddef_id

        new_cloud = session.merge(new_cloud)
        session.commit()

        _merge_ec2(json_data, new_cloud)

        return json_status(True,
                           url=api_restful.url_for(
                               CloudApi, clouddef_id=new_cloud.clouddef_id))
예제 #40
0
def download(db_id):
    session = database.get_session()
    try:
        db_file = session.get_db_file(db_id)
    except KeyError:
        flask.abort(404)
    return flask.Response(''.join(db_file.iter_data()), # TODO stream response
                          mimetype="application/octet-stream")
예제 #41
0
def create_mock_app():
    from manage import create_app
    import database
    app = create_app()
    app.config["TESTING"] = True
    app.config["DATABASE_URI"] = get_testing_db_uri()
    app.config["FRAME_URL"] = None
    database.initialize_app(app)

    with app.test_request_context():
        database.get_session().create_all()

    def app_teardown():
        with app.test_request_context():
            database.get_session().drop_all()

    return app, app_teardown
예제 #42
0
def update_persons_using_relations():
    session = database.get_session()

    for person_row in database.find('person', meeting_id='1'):
        meeting_id = person_row.pop('meeting_id')
        person_id = person_row.id
        models.PersonMeeting.create(meeting=meeting_id, person=person_id)
        session.save(person_row)
        session.commit()
예제 #43
0
    def edit_catalog_item(category_name, item_id):
        """Allows the edition of a catalog item.

        Shows an edit form if is a GET request, and changes the information of
        the item if is a POST request. You can only edit an item if you were
        the one that created it or if the item has no owner (gplus_id is None).
        Args:
            category_name: Name of the current category.
            item_id: Id of the item that will be edited.

        Returns:
            An html form if its a GET request, or redirects to the item if is a
            POST request.
        """

        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        item = db_session.query(database.Item).get(item_id)
        if item is None:
            flask.abort(404)

        if flask.request.method == 'GET':
            try:
                if (flask.session['gplus_id'] == item.gplus_id):
                    categories = db_session.query(database.Category).all()
                    return flask.render_template('edit_item.html',
                                                 category_name=category_name,
                                                 categories=categories,
                                                 item=item)
                else:
                    flask.abort(404)
            except KeyError:
                flask.abort(401)
        elif flask.request.method == 'POST':
            try:
                if (flask.session['gplus_id'] == item.gplus_id):
                    item.name = flask.request.form['name']
                    item.description = flask.request.form['description']
                    filename = file_upload.save_upload()
                    if filename:
                        if item.image:
                            file_upload.delete_upload(item.image)
                        item.image = filename
                else:
                    flask.abort(403)
            except KeyError:
                flask.abort(401)
            db_session.commit()
            return flask.redirect(flask.url_for('show_catalog_item',
                                                category_name=category_name,
                                                item_id=item_id))
예제 #44
0
def photo(person_id):
    session = database.get_session()
    person_row = database.get_person_or_404(person_id)
    try:
        db_file = session.get_db_file(int(person_row["photo_id"]))
    except KeyError:
        flask.abort(404)
    return flask.Response(''.join(db_file.iter_data()), # TODO stream response
                          mimetype="application/octet-stream")
예제 #45
0
def update_participants_none_to_empty_values():
    session = database.get_session()

    for p in database.get_all("person"):
        for k,v in p.items():
            #convert None to empty strings
            if v == u'None':
                p[k] = u''
                session.save(p)
    session.commit()
예제 #46
0
파일: scraper.py 프로젝트: maroth/wgzimmer
def scrape():
    session = get_session()
    new_zimmers = 0
    for link in get_links():
        try:
            session.query(WgZimmer).filter(WgZimmer.link == link).one()
        except NoResultFound:
            new_zimmers += 1
            save_new_zimmer(link, session)

    print str(new_zimmers) + " new rooms found"
예제 #47
0
    def delete_catalog_item(category_name, item_id):
        """Allows the deletion of a catalog item.

        Shows a delete confirmation in a GET request, and deletes the item on a
        POST request. You can only delete an item if you were the one that
        created it or if the item has no owner (gplus_id is None).

        Args:
            category_name: Name of the current category.
            item_id: Id of the item that will be deleted.

        Returns:
            An html form if its a GET request, or redirects to the item if is a
            POST request.
        """

        try:
            if not flask.session['credentials']:
                flask.abort(403)
        except KeyError:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        item = db_session.query(database.Item).get(item_id)
        if item is None:
            flask.abort(404)

        if flask.request.method == 'GET':
            try:
                if (flask.session['gplus_id'] == item.gplus_id):
                    categories = db_session.query(database.Category).all()
                    return flask.render_template('delete_item.html',
                                                 category_name=category_name,
                                                 categories=categories,
                                                 item=item)
                else:
                    flask.abort(403)
            except KeyError:
                flask.abort(401)
        elif  flask.request.method == 'POST':
            try:
                if (flask.session['gplus_id'] == item.gplus_id):
                    if item.image:
                        file_upload.delete_upload(item.image)
                    db_session.delete(item)
                else:
                    flask.abort(403)
            except KeyError:
                flask.abort(401)
            db_session.commit()
            return flask.redirect(flask.url_for('show_category_items',
                                                category_name=category_name))
예제 #48
0
    def test_delete(self):
        client = self.app.test_client()
        with self.app.test_request_context():
            session = database.get_session()
            row = database.ReportRow(name="v323x,3240543#%")
            session.save(row)
            session.commit()

        post_response = client.post("reports/%s/delete/" %row.id)
        list_response = client.get('/reports/')
        self.assertFalse( "v323x,3240543#%" in list_response.data)
        self.assertIn("Report deleted.", list_response.data)
예제 #49
0
def delete(staff_id):
    staff = schema.Staff.get_or_404(staff_id)
    session = database.get_session()

    response = {
        "status": "success",
        "url": flask.url_for("staff.home", staff_id=staff_id)
    }

    session['staff'].delete(staff_id)
    session.commit()

    return flask.json.dumps(response)
예제 #50
0
def report_delete(report_id):
    if flask.request.method == 'POST':
        session = database.get_session()
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            #TODO change when multiple reviews will be implemented
            session.table(database.SerisReviewRow) \
                   .delete(database.get_seris_reviews_list(report_id)[0].id)

        session.table(database.ReportRow).delete(report_id)
        session.commit()
        flask.flash("Report deleted.", "success")
        return flask.redirect(flask.url_for('views.report_list'))
예제 #51
0
def update_staff_members_passwords():
    session = database.get_session()
    app = flask.current_app

    staff_members = [i for i in database.get_all("staff")]

    for account in app.config["ACCOUNTS"]:
        staff_member = [i for i in staff_members if i.get("email")  == account[0]]
        if staff_member:
            staff_member = staff_member[0]
            staff_member["password"] = sugar.make_hash(account[1])

            session.save(staff_member)
            session.commit()
예제 #52
0
    def _scan_folder(self, folder: Path):
        """
        @param folder: a Folder
        """
        logger.debug('Scanning Folder: %s' % folder)
        session = database.get_session(new_engine=False)
        try:
            FilesystemObject.by_uri('%s::%s' % (config.HOSTNAME, folder), session)
        except NoResultFound:
            self._add_child(folder)
        finally:
            session.close()

        for child_name in listdir(str(folder)):
            self._queue.put(folder / child_name)
예제 #53
0
    def new_catalog_item(category_name):
        """Adds a new item to the chosen category.

        Shows a insert form if is a GET request, and inserts a new item to the
        database on a POST request. You can only create an item if you are
        logged.

        Args:
            category_name: Name of the category which the new item will belong.

        Returns:
            An html form if is a GET request, or redirects to the catalog if
            ifs a POST request.
        """

        if 'credentials' in flask.session:
            if not flask.session['credentials']:
                flask.abort(403)
        else:
            flask.abort(403)

        db_session = database.get_session()
        prepare_login()
        if flask.request.method == 'GET':
            categories = db_session.query(database.Category).all()
            return flask.render_template('new_item.html',
                                         categories=categories,
                                         category_name=category_name)
        elif flask.request.method == 'POST':
            categories = db_session.query(database.Category).all()
            category = db_session.query(database.Category).filter(
                database.Category.name == category_name
            ).one()
            try:
                item = database.Item(
                    name=flask.request.form['name'],
                    description=flask.request.form['description'],
                    image=file_upload.save_upload(),
                    gplus_id=flask.session['gplus_id'],
                    category_id=category.id
                )
            except KeyError:
                flask.abort(401)
            db_session.add(item)
            db_session.commit()
            return flask.redirect(flask.url_for('show_category_items',
                                                category_name=category_name))
예제 #54
0
def update_participants_region():
    session = database.get_session()
    countries = [schema.Country.from_flat(c) for c in database.get_all("country")]
    countries = {c["iso"].value: c["region"].value for c in countries}

    for p in database.get_all("person"):
        try:
            region = int(p['representing_region'])
            if region == 0:
                region = None
        except ValueError:
            region = None

        if not region and p["representing_country"]:
            p["representing_region"] = countries[p["representing_country"]]
            session.save(p)
            session.commit()
예제 #55
0
파일: emailer.py 프로젝트: mitro-co/emailer
def main():
    logging.root.setLevel(logging.INFO)
    logging.info("Starting up email queue")

    session = database.get_session(config.database)
    provider = providers.get_provider(config.provider)
    processor = queue.QueueProcessor(config, session, provider)

    try:
        while not interrupted:
            logging.debug("checking email queue")
            processor.process()
            time.sleep(config.queue.getfloat('sleep_seconds', 10))
    except Exception as e:
        logging.critical(e.message)
    finally:
        database.close_connection()
예제 #56
0
def document_file_delete(meeting_id, document_id, lang):
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    response = {'status': 'success'}

    document_row = database.get_or_404('document', document_id)
    document_schema = schema.DocumentSchema.from_flat(document_row)
    file_id = int(document_schema['doc_id'][lang].value)
    document_schema['doc_id'][lang].set(None)
    document_schema['filename'][lang].set(None)
    document_row.clear()
    document_row.update(document_schema.flatten())

    session = database.get_session()
    session.del_db_file(file_id)
    session.save(document_row)
    session.commit()

    return flask.json.dumps(response)
예제 #57
0
def updat_resolution_order():
    session = database.get_session()
    conf_regex = re.compile('(\d+)\.(\d+)')
    for resolution in database.get_all('resolution'):
        if conf_regex.search(resolution['number']):
            first_number = conf_regex.search(resolution['number']).group(1)
            second_number = conf_regex.search(resolution['number']).group(2)

            if len(first_number) == 1:
                first_number = '0' + first_number
            if len(second_number) == 1:
                second_number = '0' + second_number
            resolution['order'] = first_number + '-' + second_number
        else:
            print 'error', resolution['number']

        session.save(resolution)
        session.commit()
예제 #58
0
    def serve_until_stopped(self):

        """
        Does at it says
        """
        import select

        global DBSession
        logging.basicConfig(handlers=(SQLAlchemyHandler(), ))
        DBSession = database.get_session()

        abort = 0
        while not abort:
            rd, wr, ex = select.select([self.socket.fileno()], [], [],
                                       self.timeout)
            if rd:
                self.handle_request()
            abort = self.abort
예제 #59
0
def document_delete(meeting_id, document_id):
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    document = schema.Document.get_or_404(document_id)

    response = {
        'status': 'success',
        'url': flask.url_for('meeting.documents', meeting_id=meeting.id)
    }

    doc_ids = [int(id) for id in document['doc_id'].values() if id]
    session = database.get_session()

    for d in doc_ids:
        session.del_db_file(d)

    session['document'].delete(document_id)
    session.commit()

    return flask.json.dumps(response)
예제 #60
0
def update_activity_what_id():
    session = database.get_session()
    activity = [a for a in database.get_all("activity")]

    persons = [schema.Person.from_flat(p) for p in database.get_all("person")]
    persons = {p.name: p.id for p in persons}

    def replace_title(name):
        for i in ("Mr", "Ms", "M", "Mme.", "Sra.", "Sr."):
            name = name.replace(i, "")

        return name.strip()

    for a in activity:
        p = persons.get(a["what"], None) or persons.get(replace_title(a["what"]), None)
        if p:
            a["what_id"] = str(p)
            session.save(a)
            session.commit()