예제 #1
0
def test_ImageCreation():
    '''String Tests'''
    #True tests
    assert buildWithString("tree", "tree") == True
    assert buildWithString("12345", "12345") == True
    assert buildWithString("voc@b", "voc@b") == True

    #False tests
    assert buildWithString("tree", "apple") == False
    assert buildWithString("12345", "17892") == False
    assert buildWithString("voc@b", "#xtra!") == False
    '''Hash Tests'''
    #True Tests
    assert buildWithHash(1, 1) == True
    assert buildWithHash(23, 23) == True
    assert buildWithHash(101, 101) == True

    #False Tests
    assert buildWithHash(1, 7) == False
    '''TODO: Fix these two hash tests, perhaps see what they generate'''
    assert buildWithHash(0, 1) == False
    assert buildWithHash(3, 2) == False
    '''Combination Tests'''
    imgTree1 = pagan.Avatar("Tree")
    imgTree2 = pagan.Avatar("Tree", 0)
    imgFalse1 = pagan.Avatar("Tree", 1)
    imgFalse2 = pagan.Avatar("Tree", 3)
    assert imgTree1.img == imgTree2.img
    assert imgFalse1.img != imgFalse2.img
예제 #2
0
def test_create():
    img0 = pagan.Avatar("")
    img1 = pagan.Avatar("", 0)
    img2 = pagan.Avatar("", -111)
    img3 = pagan.Avatar("", None)
    assert img2.img == img3.img
    assert img0.img == img1.img
예제 #3
0
def buildWithHash(numOne, numTwo):
    #Create two images with the same string using passed in numbers
    img = pagan.Avatar("", numOne)
    img2 = pagan.Avatar("", numTwo)

    #Compate the images using the .img format
    if (img.img == img2.img):
        return True
    else:
        return False
예제 #4
0
def buildWithString(stringOne, stringTwo):
    #Create two images from the two strings
    img = pagan.Avatar(stringOne)
    img2 = pagan.Avatar(stringTwo)

    #compare the two images (Must use .img format to compare them)
    if (img.img == img2.img):
        return True
    else:
        return False
예제 #5
0
def test_ImageChange():
    '''Change Image Test'''
    #True Tests
    imgOne = pagan.Avatar("1")
    imgZero = pagan.Avatar("0")
    assert imgOne.img != imgZero.img
    imgZero.change("1")
    assert imgZero.img == imgOne.img

    #False Tests
    imgOne = pagan.Avatar("Chicken")
    imgZero = pagan.Avatar("Chicken")
    assert imgOne.img == imgZero.img
    imgZero.change("Egg")
    assert imgZero.img != imgOne.img
예제 #6
0
def hashimage(hashvalue):
    """generate image by hash, uses tempfile :-/"""
    tmpf = tempfile.mkstemp(".png")[1]
    image = pagan.Avatar("")
    image.img = pagan.generator.generate_by_hash(hashvalue)
    image.save("/", tmpf)
    return static_file(tmpf, root="/")
예제 #7
0
def generate_users(count):
    users = []

    for i in range(count):
        name = fake.name()
        email = fake.email()
        password = fake.name()
        location = ', '.join((fake.address(), fake.city(), fake.country()))
        bio = fake.text()
        avatar = pagan.Avatar(name)

        temp = io.BytesIO()
        avatar.img.save(temp, format='gif')

        users.append((email, password))
        result = requests.post(ENDPOINT + 'users/',
                               data={
                                   'name': name,
                                   'email': email,
                                   'password': password,
                                   'location': location,
                                   'bio': bio,
                               },
                               files={
                                   'avatar': ('image.gif', temp.getvalue()),
                               })
        check_result(result, 'Created user ' + name)

    return users
예제 #8
0
def test_save():
    img0 = pagan.Avatar("1")
    tmpdir = tempfile.gettempdir()
    tmpfile = tempfile.mkstemp(".png", dir=tmpdir)[1]
    img0.save("/", tmpfile)
    img0.save(tmpdir, tmpfile)
    tmpfile = tempfile.mkstemp("", dir=tmpdir)[1]
    img0.save("/", tmpfile)
    img0.save(tmpdir, tmpfile)
def hashimage(hashvalue):
    """generate image by hash, usese tempfile :-/"""
    tmpf = tempfile.mkstemp(".png")[1]
    print(tmpf)
    print(hashvalue)

    image = pagan.Avatar("")
    image.img = pagan.generator.generate_by_hash(hashvalue)
    image.save("/", tmpf)
    return static_file(hashvalue + ".png",
                       root="C:/Users/Alberto/AppData/Local/Temp")
예제 #10
0
def register():
    schema = {
        Required('name'):
        All(Match(r'^[a-zA-Z0-9_.-]+$', msg='username has invalid symbol'),
            Length(min=1, max=30, msg='username too long')),
        Required('nickname'):
        All(
            str,
            Length(min=1, max=30, msg='nickname too long'),
        ),
        Required('email'):
        All(Email(), msg='bad email format'),
        Required('password'):
        All(
            str,
            Length(min=6, msg='password less then 6 letters'),
        ),
    }
    payload = retrieve_payload(schema)
    user = User.query.filter_by(name=payload['name']).first()
    if user:
        raise ConflictException(desc='username already used')
    user = User.query.filter_by(email=payload['email']).first()
    if user:
        raise ConflictException(desc='email already used')

    avatar = pagan.Avatar(payload['name'], pagan.SHA512)
    upload_folder = current_app.config['UPLOAD_FOLDER']
    filepath = os.path.join('avatar', uuid4().hex[:8])
    avatar.save(os.path.join(upload_folder, filepath), '_.png')
    avatar_path = '/' + os.path.join('upload', filepath, '_.png')
    user = User(
        role=User.ROLE_USER,
        name=payload['name'],
        nickname=payload['nickname'],
        email=payload['email'],
        avatar=avatar_path,
    )
    user.password = payload['password']
    with db.auto_commit():
        db.session.add(user)

    confirm_url = 'https://morio.cc/confirm?token={}'.format(
        user.gen_email_token())
    mailgun.send_mail.delay(
        user.email,
        'Welcome to Morio',
        html=render_template('email/confirm.html', url=confirm_url),
    )

    resp = jsonify(user)
    resp.headers['Authorization'] = user.gen_auth_token()
    return resp
예제 #11
0
    def generate_avatar(self, hash=None):
        """
        Generate a avatar from a random hash
        
        Returns a bytesIO object
        """
        if not hash:
            hash = secrets.token_urlsafe(16)

        avatar = pagan.Avatar(hash, pagan.SHA512)
        bio = io.BytesIO()
        avatar.img.save(bio, format='PNG')
        bio.seek(0)
        return bio
예제 #12
0
def fetch_player_avatar(player, avatar_fname):
    if player.avatar_url:
        # download avatar
        r = requests.get(player.avatar_url, stream=True)
        if r.status_code == 200:
            with open(avatar_fname, 'wb') as f:
                r.raw.decode_content = True
                shutil.copyfileobj(r.raw, f)
            return
    # generate a pagan avatar
    avatar = pagan.Avatar(player.name.encode('utf-8'), pagan.SHA512)
    scaled = avatar.img
    scaled.thumbnail((80, 80))
    scaled.save(avatar_fname, 'PNG')
예제 #13
0
def fake_command():
    from faker import Factory
    fake = Factory.create()
    users = []
    db.drop_all()
    db.create_all()
    for i in range(100):
        name = fake.name()
        password = fake.pystr(min_chars=6, max_chars=20)
        email = fake.email()
        username = fake.user_name()
        sign_up_time = fake.date_time_this_year(before_now=True,
                                                after_now=False,
                                                tzinfo=None)
        avatar_img = pagan.Avatar(username, pagan.SHA512)
        avatar = 'static/avatar/' + username + '.png'
        avatar_img.save(os.path.join(app.root_path, 'static/avatar/'),
                        username)
        u = User()
        u._create(username, password, name, email, sign_up_time, avatar)
        db.session.add(u)
        db.session.commit()
        users.append(u)
        # create 10 posts every user
        for _ in range(10):
            p = Post()
            title = fake.sentence(nb_words=6, variable_nb_words=True)
            content = fake.paragraph(nb_sentences=5,
                                     variable_nb_sentences=True)
            published_time = fake.date_time_this_year(before_now=True,
                                                      after_now=False,
                                                      tzinfo=None)
            p._create(title, content, published_time, u)
            db.session.add(p)
            db.session.commit()

    for user in users:
        count = 0
        while count < 10:
            i = random.randint(0, len(users) - 1)
            if users[i] != user and not users[i] in user.following:
                user.following.append(users[i])
                count += 1
    #users[0].following.append(users[1])
    #users[1].following.append(users[0])
    db.session.commit()
예제 #14
0
def dashboard(request):

    # Generate avatar base64
    avatar = pagan.Avatar(request.user.username, pagan.SHA512)
    buffered = BytesIO()
    avatar.img.save(buffered, format='PNG')
    avatar_base64 = base64.b64encode(buffered.getvalue()).decode('ascii')

    context = {
        'missions':
        Mission.objects.filter(end_time__gte=timezone.now()).exclude(
            completedmission__user=request.user).order_by('start_time'),
        'completed_missions':
        Mission.objects.filter(completedmission__user=request.user),
        'grade':
        request.user.grade,
        'avatar_base64':
        avatar_base64
    }
    return render(request, 'spiritdashboard/dashboard.html', context=context)
예제 #15
0
def generate_agent_avatars():
    # Defining the directory to save the avatars images
    path = os.path.abspath(os.path.dirname(__file__)) + '/static'

    # Checking for existing avatars in directory
    files = os.listdir(path)

    # Querying agents
    agents = AgentModel.query.all()

    for a in agents:
        # Converting the agent object to string (agent name)
        name = str(a)
        name = name[6:-17]

        if any(name in s for s in files):
            # If any avatar image with the agent name already exists
            # then nothing is necessary
            pass
        else:
            # If no avatar image with the agent name was found
            # then one is created
            img = pagan.Avatar(name, pagan.SHA512)
            img.save(path, name)
import pagan

input = "Python"

img = pagan.Avatar(input, pagan.SHA384)
img.show()

img.save(path='imgs/', filename=f'{input}.png')
img.change(str(input), pagan.SHA384)
예제 #17
0
import pagan

input_name = 'blog'

img = pagan.Avatar(input_name, pagan.SHA512)

img.show()

out_path = 'output/'
filename = input_name

img.save(out_path, filename)
예제 #18
0
#!/usr/bin/env python

import sys

import tensorflow as tf
import cv2

import pagan

if len(sys.argv) != 2:
    print('Usage: {} <id>'.format(argv[0]))
    exit(1)

img_data = cv2.imread('cit.jpg')

image = tf.constant(img_data)

result = tf.reduce_mean(tf.log(image))

with tf.Session() as sess:
    value = sess.run(result)

avatar = pagan.Avatar(str(value), pagan.SHA512)
avatar.save('/data_cifs/bnavetta', 'test-' + sys.argv[1])
예제 #19
0
파일: views.py 프로젝트: frah/libravatar
    def get(self, request, *args, **kwargs):  # pylint: disable=too-many-branches,too-many-statements,too-many-locals,too-many-return-statements
        '''
        Override get from parent class
        '''
        model = ConfirmedEmail
        size = get_size(request)
        imgformat = 'png'
        obj = None
        default = None
        forcedefault = False
        gravatarredirect = False
        gravatarproxy = True
        uri = request.build_absolute_uri()

        # Check the cache first
        if CACHE_RESPONSE:
            centry = caches['filesystem'].get(uri)
            if centry:
                # For DEBUG purpose only print('Cached entry for %s' % uri)
                return HttpResponse(
                    centry['content'], 
                    content_type=centry['content_type'], 
                    status=centry['status'], 
                    reason = centry['reason'], 
                    charset = centry['charset'])

        # In case no digest at all is provided, return to home page
        if not 'digest' in kwargs:
            return HttpResponseRedirect(reverse_lazy('home'))

        if 'd' in request.GET:
            default = request.GET['d']
        if 'default' in request.GET:
            default = request.GET['default']

        if 'f' in request.GET:
            if request.GET['f'] == 'y':
                forcedefault = True
        if 'forcedefault' in request.GET:
            if request.GET['forcedefault'] == 'y':
                forcedefault = True

        if 'gravatarredirect' in request.GET:
            if request.GET['gravatarredirect'] == 'y':
                gravatarredirect = True

        if 'gravatarproxy' in request.GET:
            if request.GET['gravatarproxy'] == 'n':
                gravatarproxy = False

        try:
            obj = model.objects.get(digest=kwargs['digest'])
        except ObjectDoesNotExist:
            try:
                obj = model.objects.get(digest_sha256=kwargs['digest'])
            except ObjectDoesNotExist:
                model = ConfirmedOpenId
                try:
                    d = kwargs['digest']
                    # OpenID is tricky. http vs. https, versus trailing slash or not
                    # However, some users eventually have added their variations already
                    # and therfore we need to use filter() and first()
                    obj = model.objects.filter(
                        Q(digest=d) |
                        Q(alt_digest1=d) |
                        Q(alt_digest2=d) |
                        Q(alt_digest3=d)).first()
                except:
                    pass


        # If that mail/openid doesn't exist, or has no photo linked to it
        if not obj or not obj.photo or forcedefault:
            gravatar_url = 'https://secure.gravatar.com/avatar/' + kwargs['digest'] \
                + '?s=%i' % size

            # If we have redirection to Gravatar enabled, this overrides all
            # default= settings, except forcedefault!
            if gravatarredirect and not forcedefault:
                return HttpResponseRedirect(gravatar_url)

            # Request to proxy Gravatar image - only if not forcedefault
            if gravatarproxy and not forcedefault:
                url = reverse_lazy('gravatarproxy', args=[kwargs['digest']]) \
                    + '?s=%i' % size + '&default=%s' % default
                return HttpResponseRedirect(url)

            # Return the default URL, as specified, or 404 Not Found, if default=404
            if default:
                # Proxy to gravatar to generate wavatar - lazy me
                if str(default) == 'wavatar':
                    url = reverse_lazy('gravatarproxy', args=[kwargs['digest']]) \
                        + '?s=%i' % size + '&default=%s&f=y' % default
                    return HttpResponseRedirect(url)

                if str(default) == str(404):
                    return HttpResponseNotFound(_('<h1>Image not found</h1>'))

                if str(default) == 'monsterid':
                    monsterdata = BuildMonster(seed=kwargs['digest'], size=(size, size))
                    data = BytesIO()
                    monsterdata.save(data, 'PNG', quality=JPEG_QUALITY)
                    data.seek(0)
                    response = CachingHttpResponse(
                        uri,
                        data,
                        content_type='image/png')
                    response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE
                    return response

                if str(default) == 'robohash':
                    roboset = 'any'
                    if request.GET.get('robohash'):
                        roboset = request.GET.get('robohash')
                    robohash = Robohash(kwargs['digest'])
                    robohash.assemble(roboset=roboset, sizex=size, sizey=size)
                    data = BytesIO()
                    robohash.img.save(data, format='png')
                    data.seek(0)
                    response = CachingHttpResponse(
                        uri,
                        data,
                        content_type='image/png')
                    response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE
                    return response

                if str(default) == 'retro':
                    identicon = Identicon.render(kwargs['digest'])
                    data = BytesIO()
                    img = Image.open(BytesIO(identicon))
                    img = img.resize((size, size), Image.ANTIALIAS)
                    img.save(data, 'PNG', quality=JPEG_QUALITY)
                    data.seek(0)
                    response =  CachingHttpResponse(
                        uri,
                        data,
                        content_type='image/png')
                    response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE
                    return response

                if str(default) == 'pagan':
                    paganobj = pagan.Avatar(kwargs['digest'])
                    data = BytesIO()
                    img = paganobj.img.resize((size, size), Image.ANTIALIAS)
                    img.save(data, 'PNG', quality=JPEG_QUALITY)
                    data.seek(0)
                    response = CachingHttpResponse(
                        uri,
                        data,
                        content_type='image/png')
                    response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE
                    return response

                if str(default) == 'identicon':
                    p = Pydenticon5()
                    # In order to make use of the whole 32 bytes digest, we need to redigest them.
                    newdigest = hashlib.md5(bytes(kwargs['digest'], 'utf-8')).hexdigest()
                    img = p.draw(newdigest, size, 0)
                    data = BytesIO()
                    img.save(data, 'PNG', quality=JPEG_QUALITY)
                    data.seek(0)
                    response = CachingHttpResponse(
                        uri,
                        data,
                        content_type='image/png')
                    response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE
                    return response

                if str(default) == 'mm' or str(default) == 'mp':
                    # If mm is explicitly given, we need to catch that
                    static_img = path.join('static', 'img', 'mm', '%s%s' % (str(size), '.png'))
                    if not path.isfile(static_img):
                        # We trust this exists!!!
                        static_img = path.join('static', 'img', 'mm', '512.png')
                    # We trust static/ is mapped to /static/
                    return HttpResponseRedirect('/' + static_img)
                return HttpResponseRedirect(default)

            static_img = path.join('static', 'img', 'nobody', '%s%s' % (str(size), '.png'))
            if not path.isfile(static_img):
                # We trust this exists!!!
                static_img = path.join('static', 'img', 'nobody', '512.png')
            # We trust static/ is mapped to /static/
            return HttpResponseRedirect('/' + static_img)

        imgformat = obj.photo.format
        photodata = Image.open(BytesIO(obj.photo.data))
        # If the image is smaller than what was requested, we need
        # to use the function resize
        if photodata.size[0] < size or photodata.size[1] < size:
            photodata = photodata.resize((size, size), Image.ANTIALIAS)
        else:
            photodata.thumbnail((size, size), Image.ANTIALIAS)
        data = BytesIO()
        photodata.save(data, pil_format(imgformat), quality=JPEG_QUALITY)
        data.seek(0)
        obj.photo.access_count += 1
        obj.photo.save()
        obj.access_count += 1
        obj.save()
        if imgformat == 'jpg':
            imgformat = 'jpeg'
        response = CachingHttpResponse(
            uri,
            data,
            content_type='image/%s' % imgformat)
        response['Cache-Control'] = 'max-age=%i' % CACHE_IMAGES_MAX_AGE
        return response
예제 #20
0
def test_show():
    """check only if error is raised"""
    img0 = pagan.Avatar("You rock!")
    img0.show()
예제 #21
0
def generate_profile_picture():
    img = pagan.Avatar(generate_random_key(), pagan.SHA512)
    return img
예제 #22
0
for i in range(1, 250000):

    fn = person.full_name()

    m = fn.translate(tr).replace(" ", ".")
    userName = m
    mail = m + "@" + mailDomain
    imageString = ""
    if usePhoto:
        avatarUrl = person.avatar()
        r = requests.get(avatarUrl)
        imageString = ""
        if r.status_code == 200:
            imageString = base64.b64encode(r.content).decode("utf-8")
        else:
            img = pagan.Avatar(userName, pagan.SHA512)
            img.save('.\\', 't')
            with open(".\\t.png", "rb") as binary_file:
                dataImage = binary_file.read()
            imageString = base64.b64encode(dataImage).decode("utf-8")

    entry = {
        'cn': fn,
        'name': userName,
        'displayName': fn,
        'mail': mail,
        'givenName': fn[:fn.find(' ')],
        'title': person.occupation(),
        "mobile": person.telephone(),
        "sAMAccountName": userName,
        "company": domain,
예제 #23
0
def test_diffrent_hash():
    img0 = pagan.Avatar("", 0)
    img1 = pagan.Avatar("", 1)
    assert img0.img != img1.img
예제 #24
0
def get_hash_img(value=None):
    if value is None or len(value) <= 0:
        im = Image.open("app/static/stare.png")
        return serve_pil_image(im)
    p = pagan.Avatar(value, pagan.SHA256)
    return serve_pil_image(p.img)
예제 #25
0
def test_change():
    img0 = pagan.Avatar("1")
    img1 = pagan.Avatar("0")
    assert img0.img != img1.img
    img0.change("0")
    assert img0.img == img1.img
예제 #26
0
# -*- coding: utf-8 -*-
"""图像生成
    workon test_env
"""

import pagan

inpt = 'leeing'

img = pagan.Avatar(inpt, pagan.SHA512)

img.save('./', 'test')
예제 #27
0
def test_umlaute():
    img0 = pagan.Avatar("äöüÄÖÜß")
    img1 = pagan.Avatar("äöüÄÖÜß", 4)
    assert img0.img != img1.img