def generate_preview(app, n=1): im = Image.new("RGB", (320, 480), "#" + hashlib.md5(unicode(app.name).encode("utf8") + chr(n)).hexdigest()[:6]) p = Preview.objects.create( addon=app, filetype="image/png", thumbtype="image/png", caption="screenshot " + str(n), position=n ) f = tempfile.NamedTemporaryFile() im.save(f, "png") resize_preview(f.name, p)
def generate_app_from_spec(name, categories, type, status, num_previews=1, num_ratings=1, num_locales=0, preview_files=(), developer_name='Fake App Developer', developer_email='*****@*****.**', privacy_policy='Fake privacy policy', premium_type='free', description=None, rereview=False, **spec): status = STATUS_CHOICES_API_LOOKUP[status] if type == 'hosted': app = generate_hosted_app(name, categories, developer_name, status=status, **spec) else: app = generate_packaged_app( name, type, categories, developer_name, status=status, **spec) generate_icon(app) if not preview_files: generate_previews(app, num_previews) if preview_files: for i, f in enumerate(preview_files): p = Preview.objects.create(addon=app, filetype="image/png", thumbtype="image/png", caption="screenshot " + str(i), position=i) resize_preview(f, p) generate_ratings(app, num_ratings) app.name = generate_localized_names(app.name, num_locales) if not description: description = GENERIC_DESCRIPTION app.description = description app.privacy_policy = privacy_policy app.support_email = developer_email premium_type = mkt.ADDON_PREMIUM_API_LOOKUP[premium_type] app.premium_type = premium_type if premium_type != mkt.ADDON_FREE and status != mkt.STATUS_NULL: acct = get_or_create_payment_account(developer_email, developer_name) product_uri = Reference().product_create(acct, app) AddonPaymentAccount.objects.create(addon=app, payment_account=acct, account_uri=acct.uri, product_uri=product_uri) price = get_or_create_price(spec.get('price', '0.99')) AddonPremium.objects.create(addon=app, price=price) # Status has to be updated at the end because STATUS_DELETED apps can't # be saved. app.status = status app.save() addon_review_aggregates(app.pk) if rereview: RereviewQueue.objects.get_or_create(addon=app) try: u = UserProfile.objects.get(email=developer_email) except UserProfile.DoesNotExist: u = create_user(developer_email) u.display_name = developer_name u.save() AddonUser.objects.create(user=u, addon=app) return app
def test_preview_rotated(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon) src = get_image_path('preview_landscape.jpg') tasks.resize_preview(src, preview) preview = preview.reload() eq_(preview.image_size, [533, 400]) eq_(preview.thumbnail_size, [240, 180]) eq_(preview.is_landscape, True) with storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [240, 180])
def generate_preview(app, n=1): im = Image.new( "RGB", (320, 480), "#" + hashlib.md5( unicode(app.name).encode('utf8') + chr(n)).hexdigest()[:6]) p = Preview.objects.create(addon=app, filetype="image/png", thumbtype="image/png", caption="screenshot " + str(n), position=n) f = tempfile.NamedTemporaryFile() im.save(f, 'png') resize_preview(f.name, p)
def test_preview(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon) src = get_image_path('preview.jpg') tasks.resize_preview(src, preview) preview = preview.reload() eq_(preview.image_size, [400, 533]) eq_(preview.thumbnail_size, [180, 240]) eq_(preview.is_landscape, False) with storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [180, 240])
def test_preview_rotated(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon, caption='Test') src = get_image_path('preview_landscape.jpg') tasks.resize_preview(src, preview) preview = preview.reload() eq_(preview.image_size, [533, 400]) eq_(preview.thumbnail_size, [240, 180]) eq_(preview.is_landscape, True) with storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [240, 180])
def test_preview(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon, caption='Test') src = get_image_path('preview.jpg') tasks.resize_preview(src, preview) preview = preview.reload() eq_(preview.image_size, [400, 533]) eq_(preview.thumbnail_size, [180, 240]) eq_(preview.is_landscape, False) with storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [180, 240])
def generate_previews(app, n=1): gen = pydenticon.Generator(8, 12, foreground=foreground, digest=hashlib.sha512) for i in range(n): img = gen.generate(unicode(app.name) + unichr(i), 320, 480, output_format="png") p = Preview.objects.create(addon=app, filetype="image/png", caption="screenshot " + str(i), position=i) fn = tempfile.mktemp() try: f = private_storage.open(fn, "w") f.write(img) f.close() resize_preview(fn, p.pk) finally: private_storage.delete(fn)
def test_preview_dont_generate_image(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon) src = self.get_image('preview.jpg') tasks.resize_preview(src, preview.pk, generate_image=False) preview = preview.reload() eq_(preview.image_size, []) eq_(preview.thumbnail_size, [100, 133]) eq_(preview.sizes, {u'thumbnail': [100, 133]}) with public_storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [100, 133]) assert not os.path.exists(preview.image_path), preview.image_path
def test_preview_dont_generate_image(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon) src = self.get_image('preview.jpg') tasks.resize_preview(src, preview, generate_image=False) preview = preview.reload() eq_(preview.image_size, []) eq_(preview.thumbnail_size, [100, 133]) eq_(preview.sizes, {u'thumbnail': [100, 133]}) with storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [100, 133]) assert not os.path.exists(preview.image_path), preview.image_path
def generate_previews(app, n=1): gen = pydenticon.Generator(8, 12, foreground=foreground, digest=hashlib.sha512) for i in range(n): img = gen.generate(unicode(app.name) + unichr(i), 320, 480, output_format="png") p = Preview.objects.create(addon=app, filetype="image/png", thumbtype="image/png", caption="screenshot " + str(i), position=i) f = tempfile.NamedTemporaryFile(suffix='.png') f.write(img) f.flush() resize_preview(f.name, p.pk)
def test_preview(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon) src = self.get_image('preview.jpg') tasks.resize_preview(src, preview.pk) preview = preview.reload() eq_(preview.image_size, [400, 533]) eq_(preview.thumbnail_size, [100, 133]) eq_(preview.is_landscape, False) with public_storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [100, 133]) with public_storage.open(preview.image_path) as fp: im = Image.open(fp) eq_(list(im.size), [400, 533])
def test_preview_rotated(self): addon = Webapp.objects.get(pk=337141) preview = Preview.objects.create(addon=addon) src = self.get_image('preview_landscape.jpg') tasks.resize_preview(src, preview.pk) preview = preview.reload() eq_(preview.image_size, [533, 400]) eq_(preview.thumbnail_size, [133, 100]) eq_(preview.is_landscape, True) with public_storage.open(preview.thumbnail_path) as fp: im = Image.open(fp) eq_(list(im.size), [133, 100]) with public_storage.open(preview.image_path) as fp: im = Image.open(fp) eq_(list(im.size), [533, 400])
def generate_app_from_spec(name, categories, type, status, num_previews=1, num_ratings=1, num_locales=0, preview_files=(), author='*****@*****.**', premium_type='free', description=None, **spec): status = STATUS_CHOICES_API_LOOKUP[status] if type == 'hosted': app = generate_hosted_app(name, categories, author, status=status, **spec) else: app = generate_packaged_app( name, type, categories, author, status=status, **spec) generate_icon(app) if not preview_files: generate_previews(app, num_previews) if preview_files: for i, f in enumerate(preview_files): p = Preview.objects.create(addon=app, filetype="image/png", thumbtype="image/png", caption="screenshot " + str(i), position=i) resize_preview(f, p) generate_ratings(app, num_ratings) app.name = generate_localized_names(app.name, num_locales) if not description: description = requests.get('http://baconipsum.com/api/' '?type=meat-and-filler¶s=2' '&start-with-lorem=1').json()[0] app.description = description app.support_email = author premium_type = mkt.ADDON_PREMIUM_API_LOOKUP[premium_type] app.premium_type = premium_type if premium_type != mkt.ADDON_FREE: acct = get_or_create_payment_account() AddonPaymentAccount.objects.create(addon=app, payment_account=acct, account_uri=acct.uri, product_uri=app.app_slug) price = get_or_create_price(spec.get('price', '0.99')) AddonPremium.objects.create(addon=app, price=price) app.solitude_public_id = 'fake' # Status has to be updated at the end because STATUS_DELETED apps can't # be saved. app.status = status app.save() addon_review_aggregates(app.pk) u = create_user(author) AddonUser.objects.create(user=u, addon=app) return app
def generate_previews(app, n=1): gen = pydenticon.Generator(8, 12, foreground=foreground, digest=hashlib.sha512) for i in range(n): img = gen.generate(unicode(app.name) + unichr(i), 320, 480, output_format="png") p = Preview.objects.create(addon=app, filetype="image/png", caption="screenshot " + str(i), position=i) fn = tempfile.mktemp() try: f = private_storage.open(fn, 'w') f.write(img) f.close() resize_preview(fn, p.pk) finally: private_storage.delete(fn)
def generate_app_from_spec(name, categories, type, status, num_previews=1, num_ratings=1, locale_names=('en-US', 'es-ES'), preview_files=(), video_files=(), developer_name='Fake App Developer', developer_email='*****@*****.**', privacy_policy='Fake privacy policy', premium_type='free', description=None, default_locale='en-US', rereview=False, special_regions={}, inapp_id=None, inapp_secret=None, popularity=0, tarako=False, **spec): status = STATUS_CHOICES_API_LOOKUP[status] names = generate_localized_names(name, locale_names) if type == 'hosted': app = generate_hosted_app( names[default_locale], categories, developer_name, status=status, default_locale=default_locale, **spec) else: app = generate_packaged_app( names, type, categories, developer_name, default_locale=default_locale, status=status, **spec) generate_icon(app) if not preview_files: generate_previews(app, num_previews) if video_files: for i, f in enumerate(video_files): t = tempfile.mktemp() copy_stored_file(f, t, src_storage=local_storage, dst_storage=private_storage) p = Preview.objects.create(addon=app, filetype="video/webm", caption="video " + str(i), position=i) resize_video(t, p.pk) if preview_files: for i, f in enumerate(preview_files): p = Preview.objects.create(addon=app, filetype="image/png", caption="screenshot " + str(i), position=i + len(video_files)) t = tempfile.mktemp() copy_stored_file(f, t, src_storage=local_storage, dst_storage=private_storage) resize_preview(t, p.pk) generate_ratings(app, num_ratings) app.name = names if not description: description = GENERIC_DESCRIPTION app.description = description app.privacy_policy = privacy_policy app.support_email = developer_email premium_type = mkt.ADDON_PREMIUM_API_LOOKUP[premium_type] app.premium_type = premium_type app.default_locale = default_locale if popularity: app.popularity.create(value=popularity) if premium_type != mkt.ADDON_FREE and status != mkt.STATUS_NULL: acct = get_or_create_payment_account(developer_email, developer_name) product_uri = Reference().product_create(acct, app) AddonPaymentAccount.objects.create(addon=app, payment_account=acct, account_uri=acct.uri, product_uri=product_uri) if premium_type in (mkt.ADDON_PREMIUM, mkt.ADDON_PREMIUM_INAPP): price = get_or_create_price(spec.get('price', '0.99')) AddonPremium.objects.create(addon=app, price=price) if premium_type in (mkt.ADDON_FREE_INAPP, mkt.ADDON_PREMIUM_INAPP): UserInappKey.create(acct.user, secret=inapp_secret, public_id=inapp_id, access_type=ACCESS_PURCHASE) for optField in ('support_url', 'homepage', 'is_offline'): if optField in spec: setattr(app, optField, spec[optField]) # Status has to be updated at the end because STATUS_DELETED apps can't # be saved. app.status = status app.save() for (region, region_status) in special_regions.iteritems(): app.geodata.update(**{'region_%s_nominated' % (region,): datetime.datetime.now(), 'region_%s_status' % (region,): STATUS_CHOICES_API_LOOKUP[region_status]}) if tarako: AdditionalReview.objects.create(app=app, queue='tarako') addon_review_aggregates(app.pk) if rereview: RereviewQueue.objects.get_or_create(addon=app) try: u = UserProfile.objects.get(email=developer_email) except UserProfile.DoesNotExist: u = create_user(developer_email) u.display_name = developer_name u.save() AddonUser.objects.create(user=u, addon=app) return app
def generate_app_from_spec(name, categories, type, status, num_previews=1, num_ratings=1, locale_names=('en-US', 'es-ES'), preview_files=(), video_files=(), developer_name='Fake App Developer', developer_email='*****@*****.**', privacy_policy='Fake privacy policy', premium_type='free', description=None, default_locale='en-US', rereview=False, special_regions={}, inapp_id=None, inapp_secret=None, popularity=0, **spec): status = STATUS_CHOICES_API_LOOKUP[status] names = generate_localized_names(name, locale_names) if type == 'hosted': app = generate_hosted_app( names[default_locale], categories, developer_name, status=status, default_locale=default_locale, **spec) else: app = generate_packaged_app( names, type, categories, developer_name, default_locale=default_locale, status=status, **spec) generate_icon(app) if not preview_files: generate_previews(app, num_previews) if video_files: for i, f in enumerate(video_files): t = tempfile.mktemp() copy_stored_file(f, t, src_storage=local_storage, dst_storage=private_storage) p = Preview.objects.create(addon=app, filetype="video/webm", caption="video " + str(i), position=i) resize_video(t, p.pk) if preview_files: for i, f in enumerate(preview_files): p = Preview.objects.create(addon=app, filetype="image/png", caption="screenshot " + str(i), position=i + len(video_files)) t = tempfile.mktemp() copy_stored_file(f, t, src_storage=local_storage, dst_storage=private_storage) resize_preview(t, p.pk) generate_ratings(app, num_ratings) app.name = names if not description: description = GENERIC_DESCRIPTION app.description = description app.privacy_policy = privacy_policy app.support_email = developer_email premium_type = mkt.ADDON_PREMIUM_API_LOOKUP[premium_type] app.premium_type = premium_type app.default_locale = default_locale if popularity: app.popularity.create(value=popularity) if premium_type != mkt.ADDON_FREE and status != mkt.STATUS_NULL: acct = get_or_create_payment_account(developer_email, developer_name) product_uri = Reference().product_create(acct, app) AddonPaymentAccount.objects.create(addon=app, payment_account=acct, account_uri=acct.uri, product_uri=product_uri) if premium_type in (mkt.ADDON_PREMIUM, mkt.ADDON_PREMIUM_INAPP): price = get_or_create_price(spec.get('price', '0.99')) AddonPremium.objects.create(addon=app, price=price) if premium_type in (mkt.ADDON_FREE_INAPP, mkt.ADDON_PREMIUM_INAPP): UserInappKey.create(acct.user, secret=inapp_secret, public_id=inapp_id, access_type=ACCESS_PURCHASE) for optField in ('support_url', 'homepage', 'is_offline'): if optField in spec: setattr(app, optField, spec[optField]) # Status has to be updated at the end because STATUS_DELETED apps can't # be saved. app.status = status app.save() for (region, region_status) in special_regions.iteritems(): app.geodata.update(**{'region_%s_nominated' % (region,): datetime.datetime.now(), 'region_%s_status' % (region,): STATUS_CHOICES_API_LOOKUP[region_status]}) addon_review_aggregates(app.pk) if rereview: RereviewQueue.objects.get_or_create(addon=app) try: u = UserProfile.objects.get(email=developer_email) except UserProfile.DoesNotExist: u = create_user(developer_email) u.display_name = developer_name u.save() AddonUser.objects.create(user=u, addon=app) return app