Как переместить все атрибуты в хранилище данных со значением True в другое хранилище данных? - PullRequest
2 голосов
/ 02 мая 2011

Есть ли способ переместить все атрибуты в модели со значением True в другую модель? Я пишу на Python и имею следующее:

 class crimechecker(webapp.RequestHandler):
    def get(self):
        #Checks for crime
        articles = Article.all().filter('crime = ', None)
        for article in articles:
            crime = False
            for word in triggers:
                body = article.body
                if body.find(word) != -1:
                    crime = True
            article.crime = crime
            a = article.put()

Затем запускается отдельный крон: каждая криминальная история добавляется в историю с указанием их местоположения. Но истории не появляются в модели Story?!

class place(webapp.RequestHandler):
    def post(self):
        # Check for any article which was classified as "TRUE" therefore it is a crime document
        crimes = Article.all().filter('crime = ', True)
        for crimestory in crimes:
            if Story.all().filter('title = ', crimestory.title).count() == 0:
                #Yahoo Placemaker key
                p = placemaker('HSnG9pPV34EUBcexz.tDYuSrZ8Hnp.LowswI7TxreF8sXrdpVyVIKB4uPGXBYOA9VjjF1Ca42ipd_KhdJsKYjI5cXRo0eJM-')
                #Encoding for symbols and euro signs etc.
                print p.find_places(crimestory.body.encode('utf-8'))
                for place in p.places:
                    splitted = place.name.split()
                    #Check for locations within Ireland (IE)
                    if 'IE' in splitted:
                        story = Story(long=place.centroid.longitude, lat=place.centroid.latitude, link=crimestory.link, loc_name=place.name, title=crimestory.title, date=crimestory.date).put()
                        logging.info(story)

У меня есть 2 модели: статья и история. Все статьи хранятся в модели статей, а любая статья с crime = True устанавливается в модель Story. По некоторым причинам это не двигает истории. Cron работает и не имеет ошибок в журнале. Могу ли я выполнить эту задачу на моей панели инструментов ? Я запросил обе модели:

* * 1010

ВЫБРАТЬ * ИЗ СТАТЬИ ПОРЯДОК ПО ДАТЕ DESC

Модель Article имеет истории с сегодняшней даты (2 мая)

У истории есть статьи с 19 апреля и не более с тех пор. Могу ли я запросить модели и сказать, что все сущности с преступностью установлены в истинное значение для модели истории?

1 Ответ

1 голос
/ 02 мая 2011

Я не вижу ничего плохого в вашем коде. Поскольку мы уже установили, что ошибок нет, я бы посоветовал добавить больше вызовов logging.info выше, чтобы увидеть, какой оператор if оценивает как false, или какой цикл for выполняет итерацию по пустому набору. Кроме того, подтвердили ли вы, что криминалист успешно устанавливает новые истории о криминале в True? Не похоже, что вы определили, какая из ваших двух задач cron виновата.

Более фундаментально, я думаю, вам следует пересмотреть базовый дизайн этой задачи. Давайте классифицировать это как 3 шага:

  1. Пользователь создает новый объект Article с заголовком и телом
  2. Если тело содержит определенные ключевые слова, пометьте его как содержащее преступление.
  3. Если в нем содержится преступление, создайте соответствующий объект Story.

Почему бы просто не выполнить всю эту работу в одном обработчике при сохранении статьи? Зачем разбивать его на три части? Помимо того, что вы усложняете работу, ваша работа на втором кроне также неэффективна в масштабе. Вы выбираете каждую криминальную историю с начала времен и делаете один запрос для каждой, чтобы увидеть, есть ли соответствующая история. Если вы накопите значительное количество статей, это не будет выполнено вовремя.

Если вы беспокоитесь о влиянии на производительность выполнения всех этих задач при первом сохранении статьи, используйте очередь задач. Когда статья будет впервые сохранена, создайте одну задачу, чтобы отсканировать ее по ключевым словам. Если ключевые слова найдены, создайте одну задачу для хранения соответствующей сюжетной сущности. Передайте ключ сущности в параметрах задачи, чтобы вам не пришлось ничего запрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...