Пример #1
0
 def delete_like(cls, project_id, scientist_id):
     project = yield Project.get_by_id(project_id)
     project.likes -= 1
     scientist = yield Scientist.get_by_id(scientist_id)
     scientist.liked_projects.remove(project_id)
     yield project.save(fields=['likes'])
     yield scientist.save(fields=['liked_projects'])
Пример #2
0
 def add_like(cls, project_id, scientist_id):
     project = yield Project.get_by_id(project_id)
     project.likes += 1
     scientist = yield Scientist.get_by_id(scientist_id)
     scientist.liked_projects = list(set(scientist.liked_projects.append(project_id)))
     yield project.save(fields=['likes'])
     yield scientist.save(fields=['liked_projects'])
Пример #3
0
 def delete_like(cls, project_id, scientist_id):
     project = yield Project.get_by_id(project_id)
     project.likes -= 1
     scientist = yield Scientist.get_by_id(scientist_id)
     scientist.liked_projects.remove(project_id)
     yield project.save(fields=['likes'])
     yield scientist.save(fields=['liked_projects'])
Пример #4
0
 def add_like(cls, project_id, scientist_id):
     project = yield Project.get_by_id(project_id)
     project.likes += 1
     scientist = yield Scientist.get_by_id(scientist_id)
     scientist.liked_projects = list(
         set(scientist.liked_projects.append(project_id)))
     yield project.save(fields=['likes'])
     yield scientist.save(fields=['liked_projects'])
Пример #5
0
    def delete(cls, scientist_id):
        scientist = yield Scientist.get_by_id(scientist_id)

        try:
            print 'deleting from postgres'
            yield Scientist.delete(scientist_id, tbl=globals.TABLE_ROLES)
        except PSQLException, ex:
            raise ex
Пример #6
0
    def delete_participation(cls, scientist_id, data):
        """

        :param scientist_id:
        :param data: {role_id, project_id}
        """
        scientist = yield Scientist.get_by_id(scientist_id)
        project = yield Project.get_by_id(data[u'project_id'])
        scientist.participating_projects.remove(dict(project_id=project.id, role_id=data[u'role_id']))
        yield scientist.save(fields=[u'participating_projects'])
        for i in xrange(len(project.participants)):
            if project.participants[i][u'id'] == data[u'role_id']:
                project.participants[i][u'status'] = globals.STATUS_DELETED
        yield project.save(fields=[u'participants'])
Пример #7
0
    def delete_desired_project(cls, scientist_id, data):
        """

        :param scientist_id:
        :param data: {project_id, vacancy_id}
        """
        scientist = yield Scientist.get_by_id(scientist_id)
        project = yield Project.get_by_id(data[u'project_id'])
        scientist.desired_vacancies = [scientist.desired_vacancies[i] for i in xrange(len(scientist.desired_vacancies))
                                       if scientist.desired_vacancies[i][u'vacancy_id'] != data[u'vacancy_id']]
        yield scientist.save(fields=[u'desired_vacancies'])
        project.responses = [project.responses[i] for i in xrange(len(project.responses))
                             if (project.responses[i][u'scientist_id'] != scientist_id) and
                             (project.responses[u'vacancy_id'] != data[u'vacancy_id'])]
        yield project.save(fields=[u'responses'])
Пример #8
0
 def add_response(cls, conn, data):
     """
     Участник нажимает кнопку "Участвовать" у проекта. Добавляем втаблицу откликов новое значение.
     Прописываем отклик у ученого и у проекта.
     :param data: {scientist_id, project_id, vacancy_id, message}
     :type data: dict
     """
     project = yield Project.get_by_id(data[u'project_id'])
     scientist = yield Scientist.get_by_id(data[u'scientist_id'])
     sql_query = get_insert_query(globals.TABLE_RESPONSES, data, returning=u'')
     try:
         yield momoko.Op(conn.execute, sql_query)
     except PSQLException, ex:
         logging.exception(ex)
         raise
Пример #9
0
 def delete(cls, project_id):
     """
     Удалить участников, удалить вакансии, поставить статус откликам - удаленные.
     У ученого убрать из managing_project_ids.
     """
     project = yield Project.get_by_id(project_id)
     for participant_id in project.participants:
         yield cls.delete_participant(participant_id)
     for vacancy_id in project.vacancies:
         yield cls.delete_vacancy(vacancy_id)
     for response_id in project.responses:
         yield cls.set_del_status_response(response_id)
     scientist = yield Scientist.get_by_id(project.manager_id)
     scientist.managing_project_ids.remove(project_id)
     yield scientist.save(fields=[u'managing_project_ids'], columns=[u'managing_project_ids'])
     yield Project.delete(project_id, tbl=Project.TABLE)
Пример #10
0
    def get_response_data(cls, conn, response_id):
        scientist_id = response_id[:response_id.find(u':')]
        project_id = response_id[response_id.find(u':')+1:response_id.rfind(u':')]
        vacancy_id = response_id[response_id.rfind(u':')+1:]

        response_data = dict(
            scientist_id=scientist_id,
            vacancy_id=vacancy_id
        )

        # get message and status
        columns = [u'message', u'status']
        where_list = [
            dict(
                column=u'scientist_id',
                value=scientist_id
            ),
            dict(
                column=u'project_id',
                value=project_id
            ),
            dict(
                column=u'vacancy_id',
                value=vacancy_id
            )
        ]
        sql_query = get_select_query(globals.TABLE_RESPONSES, columns=columns, where=where_list)
        cursor = yield momoko.Op(conn.execute, sql_query)
        data = cursor.fetchone()
        response_data.update(dict(zip(columns, data)))

        # get vacancy name
        v_col = [u'vacancy_name']
        sql_query = get_select_query(globals.TABLE_VACANCIES, columns=v_col, where=dict(column=u'id',
                                                                                            value=vacancy_id))
        cursor = yield momoko.Op(conn.execute, sql_query)
        data = cursor.fetchone()
        response_data.update(dict(zip(v_col, data)))

        # get scientist name
        scientist = yield Scientist.get_by_id(scientist_id)
        scientist_name = u' '.join(map(lambda x: x.decode('utf8'), [scientist.last_name, scientist.first_name,
                                                                    scientist.middle_name]))
        response_data.update(dict(
            scientist_name=scientist_name,
        ))
        raise gen.Return(response_data)
Пример #11
0
 def delete(cls, project_id):
     """
     Удалить участников, удалить вакансии, поставить статус откликам - удаленные.
     У ученого убрать из managing_project_ids.
     """
     project = yield Project.get_by_id(project_id)
     for participant_id in project.participants:
         yield cls.delete_participant(participant_id)
     for vacancy_id in project.vacancies:
         yield cls.delete_vacancy(vacancy_id)
     for response_id in project.responses:
         yield cls.set_del_status_response(response_id)
     scientist = yield Scientist.get_by_id(project.manager_id)
     scientist.managing_project_ids.remove(project_id)
     yield scientist.save(fields=[u'managing_project_ids'],
                          columns=[u'managing_project_ids'])
     yield Project.delete(project_id, tbl=Project.TABLE)
Пример #12
0
 def add_response(cls, conn, data):
     """
     Участник нажимает кнопку "Участвовать" у проекта. Добавляем втаблицу откликов новое значение.
     Прописываем отклик у ученого и у проекта.
     :param data: {scientist_id, project_id, vacancy_id, message}
     :type data: dict
     """
     project = yield Project.get_by_id(data[u'project_id'])
     scientist = yield Scientist.get_by_id(data[u'scientist_id'])
     sql_query = get_insert_query(globals.TABLE_RESPONSES,
                                  data,
                                  returning=u'')
     try:
         yield momoko.Op(conn.execute, sql_query)
     except PSQLException, ex:
         logging.exception(ex)
         raise
Пример #13
0
    def create(cls, project_dict, test_mode=False):

        participants = project_dict.pop(u'participants', [])
        vacancies = project_dict.pop(u'vacancies', [])

        if not project_dict.get(u'manager_id'):
            raise Exception(u'No manager ID in creating project')

        # create ID
        if test_mode:
            project_id = project_dict.pop(u'id')
        else:
            project_id = generate_id(21)

        editable_data = Project.get_editable_data(project_dict, update=False)
        editable_data.update(id=project_id)
        project = Project(**editable_data)
        yield project.save(update=False, fields=editable_data.keys())

        participant_ids = []
        for participant in participants:
            participant.update(project_id=project_id)
            participant_id = yield cls.add_participant(participant)
            participant_ids.append(participant_id)

        vacancy_ids = []
        for vacancy in vacancies:
            vacancy.update(project_id=project_id)
            v_id = yield cls.add_vacancy(vacancy)
            vacancy_ids.append(v_id)

        project.participants = participant_ids
        project.vacancies = vacancy_ids

        yield project.save(fields=[u'participants', u'vacancies'])

        scientist = yield Scientist.get_by_id(editable_data[u'manager_id'])
        scientist.managing_project_ids.append(project_id)
        yield scientist.save(fields=[u'managing_project_ids'],
                             columns=[u'managing_project_ids'])
        raise gen.Return(dict(id=project_id))
Пример #14
0
    def create(cls, project_dict, test_mode=False):

        participants = project_dict.pop(u'participants', [])
        vacancies = project_dict.pop(u'vacancies', [])

        if not project_dict.get(u'manager_id'):
            raise Exception(u'No manager ID in creating project')

        # create ID
        if test_mode:
            project_id = project_dict.pop(u'id')
        else:
            project_id = generate_id(21)

        editable_data = Project.get_editable_data(project_dict, update=False)
        editable_data.update(id=project_id)
        project = Project(**editable_data)
        yield project.save(update=False, fields=editable_data.keys())

        participant_ids = []
        for participant in participants:
            participant.update(project_id=project_id)
            participant_id = yield cls.add_participant(participant)
            participant_ids.append(participant_id)

        vacancy_ids = []
        for vacancy in vacancies:
            vacancy.update(project_id=project_id)
            v_id = yield cls.add_vacancy(vacancy)
            vacancy_ids.append(v_id)

        project.participants = participant_ids
        project.vacancies = vacancy_ids

        yield project.save(fields=[u'participants', u'vacancies'])

        scientist = yield Scientist.get_by_id(editable_data[u'manager_id'])
        scientist.managing_project_ids.append(project_id)
        yield scientist.save(fields=[u'managing_project_ids'], columns=[u'managing_project_ids'])
        raise gen.Return(dict(id=project_id))
Пример #15
0
    def update(cls, scientist_dict, scientist_photo):
        scientist_id = scientist_dict.pop(u'scientist_id')

        if not scientist_id:
            raise Exception(u'No scientist id on update')

        scientist = yield Scientist.get_by_id(scientist_id)

        # if image arrived - change image url, else save the same
        if scientist_photo:
            new_image_url = yield cls.upload_avatar(scientist_id, scientist_photo)
            scientist_dict.update(image_url=new_image_url)
        else:
            scientist_dict.update(image_url=scientist.image_url)

        updated_data = scientist.get_updated_data(scientist_dict)

        scientist.populate_fields(updated_data)

        yield scientist.save(fields=updated_data.keys())
        image_url = globals.GET_IMG(scientist.image_url, globals.IMG_S) if scientist.image_url else u''
        raise gen.Return(dict(scientist_id=scientist_id, image_url=image_url))
Пример #16
0
                                     where_params=dict(scientist_id=data[u'scientist_id'],
                                                       project_id=data[u'project_id'],
                                                       vacancy_id=data[u'vacancy_id']), returning=u'')
        try:
            yield momoko.Op(conn.execute, sql_query)
        except PSQLException, ex:
            logging.exception(ex)

        if data[u'result'] == globals.STATUS_ACCEPTED:

            sql_query = get_select_query(globals.TABLE_VACANCIES, columns=[u'vacancy_name'],
                                            where=dict(column=u'id', value=data[u'vacancy_id']))
            cursor = yield momoko.Op(conn.execute, sql_query)
            vacancy_name = cursor.fetchone()[0]

            scientist = yield Scientist.get_by_id(data[u'scientist_id'])
            participant_data = dict(
                project_id=data[u'project_id'],
                scientist_id=data[u'scientist_id'],
                role_name=vacancy_name,
                first_name=scientist.first_name.decode('utf-8') if isinstance(scientist.first_name, str) else scientist.first_name,
                last_name=scientist.last_name.decode('utf-8') if isinstance(scientist.last_name, str) else scientist.last_name,
                middle_name=scientist.middle_name.decode('utf-8') if isinstance(scientist.middle_name, str) else scientist.middle_name,
            )
            project = yield Project.get_by_id(data[u'project_id'])
            participant_id = yield cls.add_participant(participant_data)
            project.participants.append(participant_id)
            yield project.save(fields=[u'participants'], columns=[u'participants'])

    @classmethod
    @gen.coroutine
Пример #17
0
 def get_current_user(self):
     user = None
     if self.current_user_id:
         user = yield Scientist.get_by_id(self.current_user_id)
     raise gen.Return(user)
Пример #18
0
 def get_current_user(self):
     user = None
     if self.current_user_id:
         user = yield Scientist.get_by_id(self.current_user_id)
     raise gen.Return(user)
Пример #19
0
                                     returning=u'')
        try:
            yield momoko.Op(conn.execute, sql_query)
        except PSQLException, ex:
            logging.exception(ex)

        if data[u'result'] == globals.STATUS_ACCEPTED:

            sql_query = get_select_query(globals.TABLE_VACANCIES,
                                         columns=[u'vacancy_name'],
                                         where=dict(column=u'id',
                                                    value=data[u'vacancy_id']))
            cursor = yield momoko.Op(conn.execute, sql_query)
            vacancy_name = cursor.fetchone()[0]

            scientist = yield Scientist.get_by_id(data[u'scientist_id'])
            participant_data = dict(
                project_id=data[u'project_id'],
                scientist_id=data[u'scientist_id'],
                role_name=vacancy_name,
                first_name=scientist.first_name.decode('utf-8') if isinstance(
                    scientist.first_name, str) else scientist.first_name,
                last_name=scientist.last_name.decode('utf-8') if isinstance(
                    scientist.last_name, str) else scientist.last_name,
                middle_name=scientist.middle_name.decode('utf-8')
                if isinstance(scientist.middle_name, str) else
                scientist.middle_name,
            )
            project = yield Project.get_by_id(data[u'project_id'])
            participant_id = yield cls.add_participant(participant_data)
            project.participants.append(participant_id)