Example #1
0
    def create_reply(self):
        message = ""
        text = self.text
        text = text.strip()
        if text_contains_emoji(text):
            emoji = text
        else:
            emoji = emojis_for_emoticons.get(text, None)
            if not emoji:
                raise RuntimeError("Improperly identified message type")
        # If it's a multi-emoji that we don't track, just grab the first emoji.
        # TODO: abstract out use of `keys()`.
        if len(emoji) > 1 and emoji not in google_spreadsheets.keys():
            emoji = text[0]

            # Check for skin-toned emojis.
            # (This only handles the one-emoji case for now.)
            if not emoji_contains_skin_tone(text) and not emoji_is_numeric(text):
                message = render_template('txt/requested_emoji_does_not_exist.txt',
                                          requested_emoji=text,
                                          fallback_emoji=emoji)

        # Time to grab the filepath for the emoji!
        corgi_urls = api.get(emoji)['results']

        # If that still doesn't work, we'll just grab a random one.
        if not corgi_urls:
            logger.warn("Couldn't find corgi for {}. Using random one.".format(
                        emoji))

            while not corgi_urls:
                results = api.get()
                emoji, corgi_urls = results['emoji'], results['results']
            message = render_template('txt/requested_emoji_does_not_exist.txt',
                                      requested_emoji=text,
                                      fallback_emoji=emoji)

        corgi_url = random.choice(corgi_urls)
        if message == "":
            supplements = get_supplement_messsage(self.phone_number, self.text)
            if supplements:
                message = supplements
        return create_response(message, image_url=corgi_url)
Example #2
0
File: api.py Project: jmduke/corji
    def get(self, emoji=None):
        """Returns an emoji associated with the given emoji.
        If no emoji is supplied, a random corji is returned."""

        if not emoji:
            emoji = random.choice(google_spreadsheets.keys())

        corgi_urls = []

        # Check for skin-toned emojis and fallback to the undecorated one.
        if len(emoji) == 2 and emoji_contains_skin_tone(emoji):
            emoji = emoji[0]

        # First we'll try using S3.
        if settings.Config.REMOTE_CACHE_RETRIEVE:
            try:
                corgi_urls = s3.get_all(emoji)
            except CorgiNotFoundException as e:
                logger.warn("Corji not found for emoji %s", emoji)

        # If S3 is a no-go, fall back to Spreadsheets.
        if not corgi_urls:
            corgi_urls = google_spreadsheets.get_all(emoji)

        # TODO: do this smarter somehow.
        for url in corgi_urls:
            try:
                requests.get(url)
            except Exception as e:
                logger.warn("URL {} is invalid; not returning.".format(url))
                corgi_urls.remove(url)

        return {
            "count": len(corgi_urls),
            "emoji": emoji if text_contains_emoji(emoji) else "",
            "results": corgi_urls
        }
Example #3
0
 def test_emoji_contains_skin_tone(self):
     assert not emoji_contains_skin_tone("🏀")
     assert not emoji_contains_skin_tone("🙏")
     assert emoji_contains_skin_tone("🙏🏾")