Esempio n. 1
0
    def index(self):

        tmpl = lookup.get_template("employee.html")
        session_context = cherrypy.session.get('session_context')
        session_context['back_ref'] = '/employee'
        session = rwObjects.Session()
        users = session.query(rwObjects.Employee). \
            filter_by(comp_id=session_context['comp_id']).all()
        obj_keys = users[0].get_attrs()
        f = users[0].get_fields()
        linked_objects = dict()
        for user in users:
            refs = session.query(rwObjects.Reference). \
                filter(rwObjects.sqlalchemy.and_(rwObjects.Reference.source_uuid == user.uuid,
                                                 rwObjects.Reference.target_type == "accounts",
                                                 rwObjects.Reference.link == 0)).all()
            linked_objects[user.uuid] = []

            for ref in refs:
                linked_objects[user.uuid].append(rwObjects.get_by_uuid(ref.target_uuid)[0])

        session.close()

        return tmpl.render(obj=users, keys=obj_keys,
                           session_context=session_context,
                           view_f=f[1],
                           all_f=f[0],
                           linked=linked_objects)
Esempio n. 2
0
    def use(self,case_uuid, for_uuid):
        tmpl = lookup.get_template("use_case.html")
        session_context = cherrypy.session.get('session_context')
        session = rwObjects.Session()
        # Получаем объекты
        try:
            obj = rwObjects.get_by_uuid(for_uuid)[0]
            case = rwObjects.get_by_uuid(case_uuid)[0]
        except Exception as e:
            return ShowError(str(e))
        else:
            pass

        accounts = dict()
        obj_nbrs = G.neighbors(for_uuid)
        user_nbrs = G.neighbors(session_context['uuid'])
        # Создаем список аккаунтов пользователя через которые можно отправить ответ
        for i in user_nbrs:
            node = G.graph.node[i]['obj']
            if node.__class__.__name__ == 'Account':
                print "Аккаунт объекта: %s" % node.login
                accounts[node.uuid] = node
        # Получаем аккаунт объекта через который можно отправить ответ
        for i in obj_nbrs:
            node = G.graph.node[i]['obj']
            if node.__class__.__name__ == 'Account':
                print "Аккаунт пользователя: %s" % node.login
                obj_account = node

        soup = BeautifulSoup(obj.__dict__['raw_text_html'], from_encoding="utf8")
        body_old = str(soup.find('body').contents[0])

        session.close()
        return tmpl.render(obj=obj, case=case, session_context=session_context, body_old=body_old,
                           accounts=accounts, obj_account=obj_account)
Esempio n. 3
0
    def create_new(self, **kwargs):
        data = cherrypy.request.params
        session_context = cherrypy.session.get('session_context')
        url = session_context['back_ref']
        print "Данные запроса: %s" % data

        session = rwObjects.Session()
        # Получаем по uuid создателя кейса
        try:
            source = rwObjects.get_by_uuid(session_context['uuid'])[0]
        except Exception as e:
            return ShowError("""Case.create_new. Операция: rwObjects.get_by_uuid(). Ошибка : %s""" % str(e))
        else:
            pass

        # Создаем новый Case и проводим тренировку классификатора расстояний
        try:
            status, obj = rwObjects.create_new_object(session, "cases", data, source)
        except Exception as e:
            return ShowError("""Ktree.create_new. Операция: rwObjects.create_new_object(session, 'knowledge_tree',
                             params, source). Ошибка : %s""" % str(e))
        else:
            uuid = str(obj.uuid)
            rwLearn.train_neighbors(session, rwObjects.default_neighbors_classifier)
            print status

        # Линкуем новый Case с объектом из которого он был создан
        try:
            status = rwObjects.link_objects(session,obj.uuid,data['do_object_uuid'])
        except Exception as e:
            return ShowError("""Case.create_new. Операция: rwObjects.link_objects(session,obj.uuid,
                    data['do_object_uuid']). Ошибка : %s""" % str(e))
        else:
            print status[0]
            print status[1]
            if not status[0]:
                return ShowError(str(status[0]) + status[1])

        # Линкуем новый Case с узлами Навигатора Знаний коорые были в связаны с объектм родителем
        do_obj = rwObjects.get_by_uuid(data['do_object_uuid'])[0]
        print do_obj.NAME
        print do_obj.__dict__['custom_category']
        for cat in do_obj.__dict__['custom_category']:
            print cat.name
            try:
                status = rwObjects.link_objects(session,cat.uuid,obj.uuid)
            except Exception as e:
                return ShowError("""Case.create_new. Операция: rwObjects.link_objects(session,obj.uuid,cat).
                            Ошибка : %s""" % str(e))
            else:
                print status[0]
                print status[1]
                if not status[0]:
                    return ShowError(str(status[0]) + status[1])

        session.close()
        G.reload()
        raise cherrypy.HTTPRedirect("/object/%s/addlink" % uuid)
Esempio n. 4
0
    def index(self, category_uuid):

        tmpl = lookup.get_template("ktree_show_category.html")
        session_context = cherrypy.session.get('session_context')
        session_context['back_ref'] = '/ktree'
        session_context['menu'] = 'ktree_category'
        if session_context['menu'] == 'ktree_category':
            #session_context['back_ref'] = '/ktree/' + str(category_uuid)
            session_context['menu'] = 'ktree_category'

        if session_context['menu'] == 'ktree_settings':
            session_context['back_ref'] = '/settings?menu=ktree'
            session_context['menu'] = 'ktree_settings'

        cherrypy.session['session_context'] = session_context

        # print category_uuid

        session = rwObjects.Session()
        leaf = rwObjects.get_by_uuid(category_uuid)[0]

        # Получаем все связанные объекты для этого пользователя
        neighbors = G.neighbors(session_context['uuid'])
        neighbors.append(session_context['uuid'])

        # Получаем все объекты связанные с этим узлом НЗ
        try:
            response = session.query(rwObjects.Reference). \
                filter(rwObjects.or_(rwObjects.Reference.source_uuid == leaf.uuid, \
                                     rwObjects.Reference.target_uuid == leaf.uuid)). \
                order_by(rwObjects.desc(rwObjects.Reference.timestamp)).all()
        except Exception as e:
            raise e
        else:
            pass
        nodes = list()
        for line in response:
            source = rwObjects.get_by_uuid(line.source_uuid)[0]
            target = rwObjects.get_by_uuid(line.target_uuid)[0]
            if line.link == 0 and source.uuid == category_uuid:
                nodes.append(target)
            elif line.link == 0 and target.uuid == category_uuid:
                nodes.append(source)

        # Получаем результаты автоклассификации для объектов в этом узле НЗ
        auto_cats = dict()
        for node in nodes:
            auto_cats[node.uuid] = rwObjects.get_classification_results(session, node.uuid)
            # print "Автоклассификация : %s" % auto_cats[node.uuid]

        return tmpl.render(obj=leaf, session=session, name=leaf.name,
                           nodes=nodes, session_context=session_context,
                           auto_cats=auto_cats, cats_name=rwObjects.get_ktree_custom(session),
                           neighbors=neighbors)
Esempio n. 5
0
    def index(self):

        tmpl = lookup.get_template("ktree.html")
        session = rwObjects.Session()
        tree = rwObjects.KnowledgeTree()
        session_context = cherrypy.session.get('session_context')
        session_context['back_ref'] = '/ktree'
        session_context['menu'] = 'ktree'
        cherrypy.session['session_context'] = session_context
        G.reload()
        return tmpl.render(obj=tree, session=session,
                           session_context=session_context)
Esempio n. 6
0
    def add(self):

        tmpl = lookup.get_template("add_employee.html")
        session_context = cherrypy.session.get('session_context')
        session = rwObjects.Session()
        obj = session.query(rwObjects.Employee). \
            filter_by(uuid=session_context['uuid']).one()
        obj_keys = obj.get_attrs()
        f = obj.get_fields()

        return tmpl.render(obj=obj, keys=obj_keys, name=obj.NAME,
                           session_context=session_context,
                           all_f=f[0], create_f=f[3],
                           access_groups=obj.ACCESS_GROUPS)
Esempio n. 7
0
    def create_new(self, **kwargs):
        data = cherrypy.request.params
        session_context = cherrypy.session.get('session_context')
        employee_uuid = session_context.pop('employee_uuid')
        print employee_uuid
        print "Данные из запроса : "
        print data
        print "\nКонтекст :"
        print session_context

        params = {}

        for p in data.keys():
            params[p] = data[p]

        """
        Проверка параметров тут.
        """

        """ Извлекаем создателя и Создаем новый объект """
        source = rwObjects.get_by_uuid(session_context['uuid'])[0]
        session = rwObjects.Session()

        try:
            print "Создаем новый аккаунт."
            status, obj = rwObjects.create_new_object(session, "accounts", params, source)
        except Exception as e:
            print e
        else:
            print status

        """
        Если возвращен объект, выполняем бизнес логику.
        Если None, значит ошибка.
        """
        if obj:
            """
            Бизнес логика.
            Связываем новый аккаунт с его пользователем.
            Пользователь передается в session_context['employee_uuid']
            """
            print "Делаем линкование с пользователем при создании аккаунта."
            rwObjects.link_objects(session, employee_uuid, obj.uuid)

        session.close()

        cherrypy.session['session_context'] = session_context
        print "Переадресация на  ", session_context['back_ref']
        raise cherrypy.HTTPRedirect(session_context['back_ref'])
Esempio n. 8
0
    def classify(self):

        s = rwLearn.check_conditions_for_classify()
        if s[0]:
            session = rwObjects.Session()
            status = rwLearn.retrain_classifier(session, rwObjects.default_classifier)
            print status[0]
            print status[1]
            session.close()
        else:
            return ShowError(s[1])

        session_context = cherrypy.session.get('session_context')

        raise cherrypy.HTTPRedirect(session_context['back_ref'])
Esempio n. 9
0
    def add(self, parent_id, name):

        tmpl = lookup.get_template("add_ktree.html")
        session_context = cherrypy.session.get('session_context')
        session_context['parent_id'] = parent_id
        session_context['parent_name'] = name
        session_context['type'] = "custom"
        session = rwObjects.Session()
        obj = rwObjects.KnowledgeTree()
        obj_keys = obj.get_attrs()
        f = obj.get_fields()
        experts = rwObjects.get_userlist_in_group(session, 'expert')

        return tmpl.render(obj=obj, keys=obj_keys, name="раздел Навигатора Знаний",
                           session_context=session_context,
                           all_f=f[0], create_f=f[3],
                           experts=experts[1])
Esempio n. 10
0
    def edit(self, uuid):
        print uuid
        tmpl = lookup.get_template("edit_ktree.html")
        session_context = cherrypy.session.get('session_context')
        session = rwObjects.Session()
        obj = rwObjects.get_by_uuid(uuid)[0]
        f = obj.get_fields()
        experts = rwObjects.get_userlist_in_group(session, 'expert')
        all_leafs = obj.get_all(session)

        # print "OBJ : %s" % obj
        # print "Status experts : %s" % experts[0]
        # print "Experts : %s" % experts[1]
        # print "All leafs : %s" % all_leafs
        session.close()
        return tmpl.render(obj=obj, experts=experts[1], all=all_leafs,
                           session_context=session_context,
                           all_f=f[0], edit_f=f[2])
Esempio n. 11
0
    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)
Esempio n. 12
0
    def add(self, uuid):

        tmpl = lookup.get_template("add_case.html")
        session_context = cherrypy.session.get('session_context')
        session = rwObjects.Session()
        try:
            do_object = rwObjects.get_by_uuid(uuid)[0]
        except Exception as e:
            return ShowError(str(e))
        else:
            pass

        obj = rwObjects.Case()
        obj_keys = obj.get_attrs()
        f = obj.get_fields()
        session.close()
        return tmpl.render(obj=obj, keys=obj_keys, name=obj.NAME,
                           session_context=session_context,
                           all_f=f[0], create_f=f[3],
                           do_object=do_object)
Esempio n. 13
0
    def create_new(self, **kwargs):
        data = cherrypy.request.params
        session_context = cherrypy.session.get('session_context')
        url = session_context['back_ref']

        print "Данные из запроса : "
        print data
        print "\nКонтекст :"
        print session_context
        print "Переадресация на show_object... ", url

        session = rwObjects.Session()
        try:
            rwObjects.KnowledgeTree.ktree_return_childs(session, data['parent_id'])
        except Exception as e:
            return ShowError("""Ktree.create_new. Операция: rwObjects.KnowledgeTree.ktree_return_childs(session,
            data['parent_id']). Ошибка : %s""" % str(e))
        else:
            pass

        source = rwObjects.get_by_uuid(session_context['uuid'])[0]

        """
        Создаем новый объект класса KnowledgeTree
        Для каждого нового типа необходимо добавить в  create_new_object условия.
        Проверка параметров происходит там же, если чего-то не хватает то ловим Exception.
        """

        try:
            status, obj = rwObjects.create_new_object(session, "knowledge_tree", data, source)
        except Exception as e:
            return ShowError("""Ktree.create_new. Операция: rwObjects.create_new_object(session, 'knowledge_tree',
                             params, source). Ошибка : %s""" % str(e))
        else:
            print status

        session.close()
        raise cherrypy.HTTPRedirect(url)
Esempio n. 14
0
    def save(self, **kwargs):
        data = cherrypy.request.params
        session_context = cherrypy.session.get('session_context')
        url = "/settings?menu=ktree"

        print "Данные из запроса : %s" % data
        print "\nКонтекст :" % session_context

        params = dict()

        try:

            params['parent_id'] = data['parent_id']
            params['name'] = data['name']
            params['description'] = data['description']
            params['tags'] = data['tags']
            params['expert'] = data['expert']
            params['action'] = data['action']
        except Exception as e:
            raise e
        else:
            pass

        """
        Проверка параметров тут.
        """
        session = rwObjects.Session()
        try:
            st = rwObjects.set_by_uuid(data['uuid'], data)
        except Exception as e:
            return ShowError("Функция Ktree.save операция rwObjects.set_by_uuid(data['uuid'],data)" + str(e))
        else:
            print st[0]
            print st[1]

        session.close()
        raise cherrypy.HTTPRedirect(url)
Esempio n. 15
0
    def index(self):

        tmpl = lookup.get_template("clients.html")
        session_context = cherrypy.session.get('session_context')
        session_context['back_ref'] = '/clients'
        session_context['menu'] = 'clients'
        session = rwObjects.Session()
        objs = session.query(rwObjects.Client).all()
        obj_keys = []
        session.close()

        if objs:
            obj_keys = objs[0].get_attrs()
            f = objs[0].get_fields()

            return tmpl.render(obj=objs, keys=obj_keys,
                               session_context=session_context,
                               all_f=f[0],
                               view_f=f[1])
        else:
            return tmpl.render(obj=objs, keys=obj_keys,
                               session_context=session_context,
                               all_f={"": ""},
                               view_f=[""])
Esempio n. 16
0
    def settings(self, menu=None):
        session_context = cherrypy.session.get('session_context')
        if not menu or menu == "":
            tmpl = lookup.get_template("settings_dashboard.html")
            session_context['back_ref'] = '/'
            session_context['menu'] = "settings"
            params = cherrypy.request.headers
            cherrypy.session['session_context'] = session_context
            return tmpl.render(params=params, session_context=session_context)

        elif menu == 'company':
            tmpl = lookup.get_template("settings_dashboard.html")
            session_context['back_ref'] = '/settings'
            session_context['menu'] = "company"

        elif menu == 'employee' or menu == 'accounts':
            tmpl = lookup.get_template("employee.html")
            session = rwObjects.Session()

            # если пользователь с правами администратора, выбираем всех сотрудников
            if 'admin' in session_context['groups']:
                users = session.query(rwObjects.Employee). \
                    filter_by(comp_id=session_context['comp_id']).all()
                obj_keys = users[0].get_attrs()
                f = users[0].get_fields()
                session_context['back_ref'] = '/settings'
                session_context['menu'] = "employee"

            # если пользователь с обычными правами, только свой профиль
            else:
                users = [rwObjects.get_by_uuid(session_context['uuid'])[0]]
                obj_keys = users[0].get_attrs()
                f = users[0].get_fields()
                session_context['back_ref'] = '/settings'
                session_context['menu'] = "accounts"

            linked_objects = dict()
            for user in users:
                refs = session.query(rwObjects.Reference). \
                    filter(rwObjects.sqlalchemy.and_(rwObjects.Reference.source_uuid == user.uuid,
                                                     rwObjects.Reference.target_type == "accounts",
                                                     rwObjects.Reference.link == 0)).all()
                linked_objects[user.uuid] = []

                for ref in refs:
                    linked_objects[user.uuid].append(rwObjects.get_by_uuid(ref.target_uuid)[0])

            session.close()
            cherrypy.session['session_context'] = session_context
            return tmpl.render(obj=users, keys=obj_keys, session_context=session_context,
                               view_f=f[1], all_f=f[0], linked=linked_objects)

        elif menu == 'clients':
            tmpl = lookup.get_template("settings_dashboard.html")
            session_context['back_ref'] = '/settings?menu=clients'

        elif menu == 'ktree':
            tmpl = lookup.get_template("ktree_settings.html")
            session = rwObjects.Session()
            tree = rwObjects.KnowledgeTree()
            session_context['back_ref'] = '/settings?menu=ktree'
            session_context['menu'] = "ktree_settings"
            return tmpl.render(obj=tree, session=session,
                               session_context=session_context)
        else:
            print "меню без указания."
            tmpl = lookup.get_template("settings_dashboard.html")
            session_context['back_ref'] = '/settings'
            session_context['menu'] = "settings"
            params = cherrypy.request.headers
            return tmpl.render(params=params, session_context=session_context)
Esempio n. 17
0
    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)
Esempio n. 18
0
    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)
Esempio n. 19
0
    def create_new(self, **kwargs):
        data = cherrypy.request.params
        session_context = cherrypy.session.get('session_context')
        url = session_context['back_ref']

        print "Данные запроса: %s" % data

        params = dict()
        try:
            params['login'] = data['login']
            params['company_prefix'] = session_context['company_prefix']
            params['name'] = data['name']
            params['password'] = data['password']
            params['surname'] = data['surname']
            params['comp_id'] = session_context['comp_id']
            params['groups'] = data['groups']
        except KeyError as e:
            return ShowError("Функция Employee.create_new(). Ошибка KeyError: %s" % str(e))
        else:
            pass

        # Проверяем что этот параметр список, иначе делаем из одного значения список
        if not isinstance(params['groups'], list):
            params['groups'] = [params['groups']]

        """
        Проверка параметров тут.
        """
        for k in params.keys():
            if params[k] == "" or not params[k]:
                print "Параметр %s незаполнен." % k
                return ShowError("Параметр %s незаполнен." % k)

        source = rwObjects.get_by_uuid(session_context['uuid'])[0]
        print "Данные из запроса : "
        print params
        print "\nКонтекст :"
        print session_context
        print "Переадресация на show_object... ", url
        print source

        session = rwObjects.Session()

        try:
            status, obj = rwObjects.create_new_object(session, "employees", params, source)
        except Exception as e:
            return ShowError("Ошибка создания объекта. " + str(e))
        else:
            pass

        if not status[0]:
            return ShowError(str(status[0]) + str(status[1]))

        """
        Если возвращен объект, проводим привязку согласно бизнес логики.
        Если None, значит ошибка.
        """
        if obj:
            """
            Бизнес логика.
            Связываем нового пользователя с Компанией.
            """
            company = rwObjects.get_company_by_id(params['comp_id'])
            ref = rwObjects.Reference(source_uuid=company.uuid,
                                      source_type=company.__tablename__,
                                      source_id=company.id,
                                      target_uuid=obj.uuid,
                                      target_type=obj.__tablename__,
                                      target_id=obj.id,
                                      link=0)
            ref.create(session)

        session.close()
        raise cherrypy.HTTPRedirect(url)
Esempio n. 20
0
    def index(self, view_type=None, date=None):

        print "Тип отображения: %s" % view_type
        print "Дата %s" % date
        v = ["", "", ""]

        if view_type == "links":
            link = 0
            v[2] = "active"
        elif view_type == "create":
            link = 1
            v[1] = "active"
        else:
            link = 1
            v[0] = "active"

        print v

        tmpl = lookup.get_template("timeline.html")
        session_context = cherrypy.session.get('session_context')
        session_context['back_ref'] = '/timeline'
        session_context['menu'] = 'timeline'
        cherrypy.session['session_context'] = session_context
        session = rwObjects.Session()
        try:
            events = session.query(rwObjects.Reference).filter(rwObjects.Reference.link == link). \
                order_by(rwObjects.desc(rwObjects.Reference.timestamp)).all()
            obj_keys = events[0].get_attrs()
            fields = events[0].get_fields()
        except IndexError:
            obj_keys = rwObjects.rw_parent().get_attrs()
            fields = rwObjects.rw_parent().get_fields()
        except Exception as e:
            return ShowError(str(e))

        actors = {}
        neighbors = G.neighbors(session_context['uuid'])

        for event in events:
            event.read(session)
            # print "Source UUID : %s" % event.source_uuid
            # print "Target UUID : %s" % event.target_uuid
            try:
                obj = rwObjects.get_by_uuid(event.source_uuid)[0]
            except Exception as e:
                print e[0]
                print e[1]
                return ShowError(str(e))
            else:
                if event.source_uuid not in actors.keys():
                    actors[event.source_uuid] = obj
                    print "Actor: %s" % actors[event.source_uuid].SHORT_VIEW_FIELDS

            try:
                obj = rwObjects.get_by_uuid(event.target_uuid)[0]
            except Exception as e:
                print e[0]
                print e[1]
                return ShowError(str(e))
            else:
                if event.target_uuid not in actors.keys():
                    actors[event.target_uuid] = obj
                    print "Actor: %s" % actors[event.target_uuid].SHORT_VIEW_FIELDS

                    # print "events[0].get_fields() : %s" % fields
                    # print "obj_keys : %s " % obj_keys
        print "All actors: %s" % actors.keys()
        print "Соседи: %s" % neighbors
        return tmpl.render(obj=events, keys=obj_keys,
                           session_context=session_context,
                           all_f=fields[0], view_f=fields[1],
                           actors=actors, view_type=v,
                           neighbors=neighbors)