Source code for gravify

"""Simple package to generate Gravatar URLs"""

from hashlib import md5

from six import PY3
from validate_email import validate_email

if PY3:
    from urllib.parse import urlencode
    from urllib.request import urlopen
else:
    from urllib import urlencode, urlopen  # pylint: disable=no-name-in-module

__version__ = '1.0.0'


[docs]class Gravatar: """A class to represent a Gravatar user Args: email (str): The user's email address verify_email (bool): Whether to verify that the email address is valid default_image (str): The default image code to use if the user isn't found (one of: 404, mp, identicon, monsterid, wavatar, retro, robohash, blank) size (int): A single dimension determining the size of the image (between 1 and 2048) force_default (bool): Whether to always force the default image max_rating (str): The maximum rating to be shown (one of: g, pg, r, x) Raises: ValueError: The email address is invalid """ def __init__( self, email, verify_email=True, default_image=None, size=None, force_default=False, max_rating=None, ): if verify_email and not validate_email(email): raise ValueError('Invalid email address') self.email = email.strip().lower() self.default_image = default_image self.size = size self.force_default = force_default self.max_rating = max_rating @property def url(self): """The generated secure (https) Gravatar URL Returns: str """ params = { 's': self.size, 'd': self.default_image, 'f': 'y' if self.force_default else None, 'r': self.max_rating if self.max_rating in ['g', 'pg', 'r', 'x'] else None, } url_params = urlencode( sorted({k: v for k, v in params.items() if v is not None}.items()) ) _url = 'https://www.gravatar.com/avatar/' + self.hash return _url + '?' + url_params if url_params else _url @property def unsecure_url(self): """The generated unsecure (http) Gravatar URL Returns: str """ return self.url.replace('https://', 'http://', 1) @property def hash(self): """The MD5-hashed email address Returns: str """ return md5(self.email.encode('utf-8')).hexdigest() @property def file(self): """The contents of the generated Gravatar URL Returns: str """ return urlopen(self.url)