Be explicit about ratios

break-out-core-urls-views
Eric Holscher 2016-04-01 16:28:49 -07:00
parent c18da798f5
commit ef0dabc25a
2 changed files with 28 additions and 13 deletions

View File

@ -11,25 +11,30 @@ class SupporterAdmin(admin.ModelAdmin):
class ImpressionInline(admin.TabularInline): class ImpressionInline(admin.TabularInline):
model = SupporterImpressions model = SupporterImpressions
readonly_fields = ('date', 'offers', 'views', 'clicks', 'shown') readonly_fields = ('date', 'offers', 'views', 'clicks', 'view_ratio', 'click_ratio')
extra = 0 extra = 0
can_delete = False can_delete = False
max_num = 15 max_num = 15
def shown(self, instance): def view_ratio(self, instance):
return instance.shown * 100 return instance.view_ratio * 100
def click_ratio(self, instance):
return instance.click_ratio * 100
class SupporterPromoAdmin(admin.ModelAdmin): class SupporterPromoAdmin(admin.ModelAdmin):
model = SupporterPromo model = SupporterPromo
list_display = ('name', 'display_type', 'text', 'live', 'shown') list_display = ('name', 'display_type', 'text', 'live', 'view_ratio', 'click_ratio')
readonly_fields = ('shown',) readonly_fields = ('view_ratio', 'click_ratio')
list_filter = ('live', 'display_type') list_filter = ('live', 'display_type')
inlines = [ImpressionInline] inlines = [ImpressionInline]
def shown(self, instance): def view_ratio(self, instance):
return instance.shown() * 100 return instance.view_ratio() * 100
def click_ratio(self, instance):
return instance.click_ratio() * 100
admin.site.register(Supporter, SupporterAdmin) admin.site.register(Supporter, SupporterAdmin)
admin.site.register(SupporterPromo, SupporterPromoAdmin) admin.site.register(SupporterPromo, SupporterPromoAdmin)

View File

@ -104,12 +104,17 @@ class SupporterPromo(models.Model):
# TODO: Support redis, more info on this PR # TODO: Support redis, more info on this PR
# github.com/rtfd/readthedocs.org/pull/2105/files/1b5f8568ae0a7760f7247149bcff481efc000f32#r58253051 # github.com/rtfd/readthedocs.org/pull/2105/files/1b5f8568ae0a7760f7247149bcff481efc000f32#r58253051
def shown(self, day=None): def view_ratio(self, day=None):
"""Return the percentage of times this ad was shown when offered."""
if not day: if not day:
day = get_ad_day() day = get_ad_day()
impression = self.impressions.get(date=day) impression = self.impressions.get(date=day)
return impression.shown return impression.view_ratio
def click_ratio(self, day=None):
if not day:
day = get_ad_day()
impression = self.impressions.get(date=day)
return impression.click_ratio
class SupporterImpressions(models.Model): class SupporterImpressions(models.Model):
@ -126,8 +131,13 @@ class SupporterImpressions(models.Model):
unique_together = ('promo', 'date') unique_together = ('promo', 'date')
@property @property
def shown(self): def view_ratio(self):
"""Return the percentage of times this ad was shown when offered.""" if self.offers == 0:
if self.views == 0:
return 0 # Don't divide by 0 return 0 # Don't divide by 0
return float(self.views) / float(self.offers) return float(self.views) / float(self.offers)
@property
def click_ratio(self):
if self.views == 0:
return 0 # Don't divide by 0
return float(self.clicks) / float(self.views)