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)
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)
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)