コード例 #1
0
ファイル: rework_webapp.py プロジェクト: jitterxx/bmtools
    def addlink(self, uuid):
        data = cherrypy.request.params
        session = rwObjects.Session()
        tmpl = lookup.get_template("add_link_to_ktree.html")

        try:
            obj = rwObjects.get_by_uuid(uuid)[0]
            custom = rwObjects.get_ktree_custom(session)
        except Exception as e:
            return ShowError("""LinkObject.addlink. Операция rwObjects.get_by_uuid() или
                                rwObjects.get_by_uuid(uuid)[0]. Ошибка : %s""" % str(e))
        print custom.values()
        used_category = rwObjects.get_ktree_for_object(session, uuid)[0]

        session.close()
        return tmpl.render(obj=obj, category=custom,
                           session_context=cherrypy.session.get('session_context'),
                           used_category=used_category)
コード例 #2
0
ファイル: rework_webapp.py プロジェクト: jitterxx/bmtools
    def index(self, uuid):

        tmpl = lookup.get_template("show_object.html")
        try:
            obj = rwObjects.get_by_uuid(uuid)[0]
        except Exception as e:
            print e
            return ShowError(str(e))
        else:
            obj_keys = obj.get_attrs()
            f = obj.get_fields()
            session_context = cherrypy.session.get('session_context')
            neighbors = G.neighbors(session_context['uuid'])

            # Ищем подходящие для этого ДО кейсы, считаем расстояние и выбираем только подходящие
            cases = dict()
            nbrs = list()

            if obj.__tablename__ == 'dynamic_object':
                obj.clear_text()
                nbr = list()
                try:
                    nbr = rwLearn.predict_neighbors(rwObjects.default_neighbors_classifier,\
                                                                        [obj.__dict__['text_clear']])
                except ValueError as e:
                    print "Недостаточно кейсов для тренировки. Ошибка: %s" % str(e)
                    session_context['message_to_user'] = "******" \
                                                         "или больше кейсов."
                    cherrypy.session['session_context'] = session_context
                except Exception as e:
                    print "Ошибка получения сосдей поиске кейсов. Ошибка: %s " % str(e)

                print "nbrs : %s" % nbr
                for i in nbr:
                    case = rwObjects.get_by_uuid(i[0])[0]
                    print "Кейс : %s (расстояние %s)" % (case.subject,i[1])
                    if i[1] < 0.9998:
                        cases[i[0]] = case
                        nbrs.append(i)

            # Является ли текущий пользователь экспертом для одного из узлов НЗ, к которому относиться объект
            # если являеться, то можно предоставить доступ
            show_object = False
            session = rwObjects.Session()
            leafs = rwObjects.get_ktree_for_object(session, obj.uuid)[0]
            session.close()
            for leaf in leafs.values():
                if session_context['login'] == leaf.expert:
                    show_object = True

            # Создаем список связанных объектов для показа
            linked_nodes = dict()
            for i in G.neighbors(obj.uuid):
                if i != obj.uuid:
                    try:
                        lo = rwObjects.get_by_uuid(i)[0]
                    except Exception as e:
                        return ShowError("Showbject. Операция : linked_nodes[i] = rwObjects.get_by_uuid(i)[0]. Ошибка :"
                                         "%s" % str(e))
                    try:
                        linked_nodes[lo.__tablename__]
                    except KeyError:
                        linked_nodes[lo.__tablename__] = dict()
                    linked_nodes[lo.__tablename__][lo.uuid] = lo

            print "Объект для вывода связей : %s" % obj.uuid
            print "linked_nodes : %s" % linked_nodes

            print "session_context['menu'] : %s " % session_context['menu']

            if session_context['menu'] in ['accounts', 'employee']:
                session_context['back_ref'] = "/settings/?menu=" + session_context['menu']
            if session_context['menu'] == 'settings':
                session_context['back_ref'] = "/settings"

            session_context['menu'] = "show_object"
            return tmpl.render(obj=obj, keys=obj_keys,
                               session_context=session_context, all_f=f[0], view_f=f[1],
                               neighbors=neighbors, cases=cases, nbrs=nbrs, show_object=show_object,
                               linked_nodes=linked_nodes)
コード例 #3
0
ファイル: rework_webapp.py プロジェクト: jitterxx/bmtools
    def savelink(self, object_uuid, object_type, category_type=None, category_uuid=None):
        data = cherrypy.request.params
        session_context = cherrypy.session.get('session_context')
        url = session_context['back_ref']

        if not category_uuid:
            print "Не указана категория."
            raise cherrypy.HTTPRedirect(url)

        if not isinstance(category_uuid, list):
            category_uuid = [category_uuid]

        print "Obj UUID: ", object_uuid
        print "Obj type: ", object_type
        print "Category uuid:", category_uuid
        print "Category type:", category_type

        session = rwObjects.Session()

        old_edges = rwObjects.get_ktree_for_object(session, object_uuid)[0]
        edges_for_delete = list()

        # Ищем связи которые надо удалить
        for old in old_edges.values():
            if old.uuid not in category_uuid:
                edges_for_delete.append(old.uuid)

        # Производим связывание объекта с категориями
        for category in category_uuid:
            # Устанавливаем новые связи
            try:
                st = rwObjects.link_objects(session, category, object_uuid)
            except Exception as e:
                print "Проблемы при связывании..."
                print e
                pass
            else:
                print "Связывание прошло успешно."
                print st[0]
                print st[1]

        # Получаем список старых связей
        try:
            resp = session.query(rwObjects.Reference).filter(rwObjects.and_(\
                rwObjects.Reference.source_type == 'knowledge_tree',
                rwObjects.Reference.source_uuid.in_(edges_for_delete),
                rwObjects.Reference.target_uuid == object_uuid,
                rwObjects.Reference.link == 0)).all()
        except Exception as e:
            print str(e)
            return ShowError("Ошибка : %s" % str(e))
        # Удаляем старые связи
        try:
            for one in resp:
                session.delete(one)
            session.commit()
        except Exception as e:
            print str(e)
            return ShowError("Ошибка : %s" % str(e))

        try:
            st = rwLearn.clear_autoclassify(session, object_uuid)
        except Exception as e:
            print "Проблемы удаления автоклассфиикации.."
            print e
        else:
            print "Удаление автоклассификации успешно."
            print st[0]
            print st[1]

        print "Переадресация на : ", url
        G.reload()
        session.close()
        raise cherrypy.HTTPRedirect(url)