def process(self, tweet):
        stored_tweet = Repository.create(tweet)

        if stored_tweet is None:
            return None

        username = tweet.user.username
        sorted_scores = self.get_potential_places(tweet)
        actual_places = self.places[username]
        actual_communes = self.communes[username]

        # Iterate over all the potential places by score to find commune
        for potential_place, score in sorted_scores:
            potential_commune = potential_place

            # If the place is a commune, restrict all places to be inside that commune
            if potential_commune in actual_communes:
                actual_places = actual_communes[potential_place]

                # We found a commune, do not look for any more
                break

        # Iterate over all the potential places by score
        for potential_place, score in sorted_scores:

            # Check if the potential place is in the actual places
            if potential_place in actual_places:
                actual_place = actual_places[potential_place]

                # Create a relation between the tweet and the place
                position = self.link_tweet_to_place(tweet, actual_place)

                # We found a place, so lets move on to the next weet
                break

        return Repository.read(tweet.id)
 def test_processor_creates_a_tweet_in_the_database(self):
     processor = Processor()
     processor.process(self.tweet)
     stored_tweet = Repository.read('6969')
     assert stored_tweet.id == '6969'