From 1f4e175da5ebb96d79cccb5d2a4dd5299a972af9 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 20 Jul 2011 20:55:26 +0530 Subject: [PATCH] first commit --- requirements.txt | 6 +- urlweb/.gitignore | 6 + urlweb/LICENSE | 22 ++++ urlweb/README | 34 ++++++ urlweb/__init__.py | 0 urlweb/database.sqlite | Bin 0 -> 445440 bytes urlweb/deploy/deploy.wsgi | 20 ++++ urlweb/manage.py | 11 ++ urlweb/settings.py | 108 +++++++++++++++++ urlweb/shortener/__init__.py | 0 urlweb/shortener/admin.py | 9 ++ urlweb/shortener/baseconv.py | 58 ++++++++++ urlweb/shortener/models.py | 60 ++++++++++ urlweb/shortener/tests.py | 89 ++++++++++++++ urlweb/shortener/views.py | 109 ++++++++++++++++++ urlweb/templates/404.html | 12 ++ urlweb/templates/base.html | 65 +++++++++++ urlweb/templates/shortener/index.html | 27 +++++ urlweb/templates/shortener/link_info.html | 12 ++ urlweb/templates/shortener/submit_failed.html | 16 +++ .../templates/shortener/submit_success.html | 29 +++++ urlweb/urls.py | 17 +++ 22 files changed, 707 insertions(+), 3 deletions(-) create mode 100644 urlweb/.gitignore create mode 100644 urlweb/LICENSE create mode 100644 urlweb/README create mode 100644 urlweb/__init__.py create mode 100644 urlweb/database.sqlite create mode 100644 urlweb/deploy/deploy.wsgi create mode 100755 urlweb/manage.py create mode 100644 urlweb/settings.py create mode 100644 urlweb/shortener/__init__.py create mode 100644 urlweb/shortener/admin.py create mode 100755 urlweb/shortener/baseconv.py create mode 100644 urlweb/shortener/models.py create mode 100644 urlweb/shortener/tests.py create mode 100644 urlweb/shortener/views.py create mode 100644 urlweb/templates/404.html create mode 100644 urlweb/templates/base.html create mode 100644 urlweb/templates/shortener/index.html create mode 100644 urlweb/templates/shortener/link_info.html create mode 100644 urlweb/templates/shortener/submit_failed.html create mode 100644 urlweb/templates/shortener/submit_success.html create mode 100644 urlweb/urls.py diff --git a/requirements.txt b/requirements.txt index b139f49..c840b7e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ --e svn+http://code.djangoproject.com/svn/django/branches/releases/1.1.X/#egg=django --e bzr+http://code.0xdb.org/python-oxdjango/#egg=python-oxdjango -South +# -e svn+http://code.djangoproject.com/svn/django/branches/releases/1.1.X/#egg=django +-e bzr+http://code.0xdb.org/python-ox/#egg=python-ox +# South diff --git a/urlweb/.gitignore b/urlweb/.gitignore new file mode 100644 index 0000000..a86d332 --- /dev/null +++ b/urlweb/.gitignore @@ -0,0 +1,6 @@ +*.sqlite +*.pyc +.DS_Store +.svn +svn-commit.tmp +svn-prop.tmp diff --git a/urlweb/LICENSE b/urlweb/LICENSE new file mode 100644 index 0000000..550880b --- /dev/null +++ b/urlweb/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2009 Nilesh Kapadia + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/urlweb/README b/urlweb/README new file mode 100644 index 0000000..0848741 --- /dev/null +++ b/urlweb/README @@ -0,0 +1,34 @@ +url-shortener +============= + +This is URL shortening application using the Django framework + +The shortened URLs use the base 62 value of ids of the model they are +stored in. A count of how many times the URLs are used is kept. The +main page shows the 10 most recent and 10 most popular URLs. + +Prerequisites +============= + +Download Blueprint from: http://www.blueprintcss.org/ +Copy the "blueprint" folder into static/css/ (which you may need to create) + +Note that in a production installation, you'll want to have your web +server serve the "static" folder instead of letting Django serve it. + +Settings +======== + +The following values need to be set in settings.py: + +SITE_NAME + The name of the site (e.g. 'urlshorteningsite.com') + +SITE_BASE_URL + The base URL of the site. This can be based on the SITE_NAME: + SITE_BASE_URL = 'http://' + SITE_NAME + '/' + +REQUIRE_LOGIN + Set REQUIRE_LOGIN to True if you want to require that a user be + logged in to be able to submit a URL to be shortened. Set it + to False if you do not want to require login to submit a URL. diff --git a/urlweb/__init__.py b/urlweb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/urlweb/database.sqlite b/urlweb/database.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..c5322c00b1d0060bad2d5d4ee873f95df09b2007 GIT binary patch literal 445440 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 SoZn4gL(+*;Et2>> base20 = BaseConverter('0123456789abcdefghij') +>>> base20.from_decimal(1234) +'31e' +>>> base20.to_decimal('31e') +1234 +""" + +class BaseConverter(object): + decimal_digits = "0123456789" + + def __init__(self, digits): + self.digits = digits + + def from_decimal(self, i): + return self.convert(i, self.decimal_digits, self.digits) + + def to_decimal(self, s): + return int(self.convert(s, self.digits, self.decimal_digits)) + + def convert(number, fromdigits, todigits): + # Based on http://code.activestate.com/recipes/111286/ + if str(number)[0] == '-': + number = str(number)[1:] + neg = 1 + else: + neg = 0 + + # make an integer out of the number + x = 0 + for digit in str(number): + x = x * len(fromdigits) + fromdigits.index(digit) + + # create the result in base 'len(todigits)' + if x == 0: + res = todigits[0] + else: + res = "" + while x > 0: + digit = x % len(todigits) + res = todigits[digit] + res + x = int(x / len(todigits)) + if neg: + res = '-' + res + return res + convert = staticmethod(convert) + +bin = BaseConverter('01') +hexconv = BaseConverter('0123456789ABCDEF') +base62 = BaseConverter( + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz' +) diff --git a/urlweb/shortener/models.py b/urlweb/shortener/models.py new file mode 100644 index 0000000..fcad23e --- /dev/null +++ b/urlweb/shortener/models.py @@ -0,0 +1,60 @@ +import datetime + +from django.db import models +from django.conf import settings +#from django.contrib.auth.models import User +from django import forms + +from urlweb.shortener.baseconv import base62 + +class Link(models.Model): + """ + Model that represents a shortened URL + + # Initialize by deleting all Link objects + >>> Link.objects.all().delete() + + # Create some Link objects + >>> link1 = Link.objects.create(url="http://www.google.com/") + >>> link2 = Link.objects.create(url="http://www.nileshk.com/") + + # Get base 62 representation of id + >>> link1.to_base62() + 'B' + >>> link2.to_base62() + 'C' + + # Set SITE_BASE_URL to something specific + >>> settings.SITE_BASE_URL = 'http://uu4.us/' + + # Get short URL's + >>> link1.short_url() + 'http://uu4.us/B' + >>> link2.short_url() + 'http://uu4.us/C' + + # Test usage_count + >>> link1.usage_count + 0 + >>> link1.usage_count += 1 + >>> link1.usage_count + 1 + + """ + url = models.TextField(unique=True, max_length=200000) + date_submitted = models.DateTimeField(default=datetime.datetime.now()) + usage_count = models.IntegerField(default=0) + + def to_base62(self): + return base62.from_decimal(self.id) + + def short_url(self): + return settings.SITE_BASE_URL + self.to_base62() + + def __unicode__(self): + return self.to_base62() + ' : ' + self.url + +class LinkSubmitForm(forms.Form): + u = forms.CharField( + label='URL to be shortened:', + ) diff --git a/urlweb/shortener/tests.py b/urlweb/shortener/tests.py new file mode 100644 index 0000000..85e4920 --- /dev/null +++ b/urlweb/shortener/tests.py @@ -0,0 +1,89 @@ +""" +Tests for views +""" + +__test__ = {"doctest": """ + +# Initialize by deleting all Link objects +>>> from models import Link +>>> Link.objects.all().delete() + +>>> from django.test import Client +>>> client = Client() + +# Index page +>>> r = client.get('/') +>>> r.status_code # / +200 +>>> r.template[0].name +'shortener/index.html' + +# Turn off logged-in requirement and set base URL +>>> from django.conf import settings +>>> settings.REQUIRE_LOGIN = False +>>> settings.SITE_BASE_URL = 'http://uu4.us/' + +# Empty submission should forward to error page +>>> r = client.get('/submit/') +>>> r.status_code # /submit/ +200 +>>> r.template[0].name # /submit/ +'shortener/submit_failed.html' + +# Submit a URL +>>> url = 'http://www.google.com/' +>>> r = client.get('/submit/', {'u': url}) +>>> r.status_code # /submit/u?=http%3A%2F%2Fwww.google.com%2F +200 +>>> r.template[0].name +'shortener/submit_success.html' +>>> link = r.context[0]['link'] +>>> link.to_base62() +'B' +>>> link.short_url() +'http://uu4.us/B' +>>> link_from_db = Link.objects.get(url = url) +>>> base62 = link_from_db.to_base62() +>>> base62 +'B' +>>> link_from_db.usage_count +0 + +# Short URL for previously submitted URL +>>> r = client.get('/' + base62) +>>> r.status_code # '/' + base62 +301 +>>> r['Location'] +'http://www.google.com/' + +# Invalid URL should get a 404 +>>> r = client.get('/INVALID') +>>> r.status_code # /INVALID +404 + +# Index now shows link in recent_links / most_popular_links +>>> r = client.get('/') +>>> r.status_code # / +200 +>>> r.template[0].name +'shortener/index.html' +>>> context = r.context[0] +>>> len(context['recent_links']) +1 +>>> len(context['most_popular_links']) +1 + +# Get info on Link +>>> r = client.get('/info/' + base62) +>>> r.status_code # info +200 +>>> r.template[0].name +'shortener/link_info.html' +>>> link = r.context[0]['link'] +>>> link.url +u'http://www.google.com/' +>>> link.usage_count # Usage count should be 1 now +1 + +"""} + diff --git a/urlweb/shortener/views.py b/urlweb/shortener/views.py new file mode 100644 index 0000000..6141ff1 --- /dev/null +++ b/urlweb/shortener/views.py @@ -0,0 +1,109 @@ +import logging + +from django.contrib.auth.decorators import login_required +from django.contrib.auth import authenticate +from django.views.generic import list_detail +from django.shortcuts import get_object_or_404, get_list_or_404, render_to_response +from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponsePermanentRedirect +from django.utils import simplejson +from django.template import RequestContext +from django.views.decorators.http import require_POST +from django.db import transaction +from django.conf import settings + +from urlweb.shortener.baseconv import base62 +from urlweb.shortener.models import Link, LinkSubmitForm + +def follow(request, base62_id): + """ + View which gets the link for the given base62_id value + and redirects to it. + """ + key = base62.to_decimal(base62_id) + link = get_object_or_404(Link, pk = key) + link.usage_count += 1 + link.save() + return HttpResponse("" % (link.url,)); + +def default_values(request, link_form=None): + """ + Return a new object with the default values that are typically + returned in a request. + """ + if not link_form: + link_form = LinkSubmitForm() + allowed_to_submit = is_allowed_to_submit(request) + return { 'show_bookmarklet': allowed_to_submit, + 'show_url_form': allowed_to_submit, + 'site_name': settings.SITE_NAME, + 'site_base_url': settings.SITE_BASE_URL, + 'link_form': link_form, + } + +def info(request, base62_id): + """ + View which shows information on a particular link + """ + key = base62.to_decimal(base62_id) + link = get_object_or_404(Link, pk = key) + values = default_values(request) + values['link'] = link + return render_to_response( + 'shortener/link_info.html', + values, + context_instance=RequestContext(request)) + +def submit(request): + """ + View for submitting a URL + """ + if settings.REQUIRE_LOGIN and not request.user.is_authenticated(): + # TODO redirect to an error page + foo = 'foo' + # raise Http404 + url = None + link_form = None + if request.GET: + link_form = LinkSubmitForm(request.GET) + elif request.POST: + link_form = LinkSubmitForm(request.POST) + if link_form and link_form.is_valid(): + url = link_form.cleaned_data['u'] + link = None + try: + link = Link.objects.get(url = url) + except Link.DoesNotExist: + pass + if link == None: + new_link = Link(url = url) + new_link.save() + link = new_link + values = default_values(request) + values['link'] = link + return render_to_response( + 'shortener/submit_success.html', + values, + context_instance=RequestContext(request)) + values = default_values(request, link_form=link_form) + return render_to_response( + 'shortener/submit_failed.html', + values, + context_instance=RequestContext(request)) + +def index(request): + """ + View for main page (lists recent and popular links) + """ + values = default_values(request) + values['recent_links'] = Link.objects.all().order_by('-date_submitted')[0:10] + values['most_popular_links'] = Link.objects.all().order_by('-usage_count')[0:10] + return render_to_response( + 'shortener/index.html', + values, + context_instance=RequestContext(request)) + +def is_allowed_to_submit(request): + """ + Return true if user is allowed to submit URLs + """ + return not settings.REQUIRE_LOGIN or request.user.is_authenticated() diff --git a/urlweb/templates/404.html b/urlweb/templates/404.html new file mode 100644 index 0000000..e8c72f9 --- /dev/null +++ b/urlweb/templates/404.html @@ -0,0 +1,12 @@ + + + + 404 + + + +

404 Not Found

+ Home + + diff --git a/urlweb/templates/base.html b/urlweb/templates/base.html new file mode 100644 index 0000000..60bdc5d --- /dev/null +++ b/urlweb/templates/base.html @@ -0,0 +1,65 @@ + + + + {% block title %}URLs{% endblock %} + + + + + + + + + + + + {% block extra_head %} + {% endblock %} + + + +
+ +
+ {% block content %}{% endblock %} +
+
+ +
+ {% if show_url_form %} + {% block url_form %} +
+ {{ link_form.as_p }} + +
+ {% endblock %} + {% endif %} +
+
+ {% if show_bookmarklet %} + {% block bookmarklet %} +
+ Bookmarklet (drag this to your bookmarks bar):
+ Shorten with {{ site_name }} + {% endblock %} + {% endif %} +
+ {% block extra_body %}{% endblock %} +
+ + diff --git a/urlweb/templates/shortener/index.html b/urlweb/templates/shortener/index.html new file mode 100644 index 0000000..c1bae4c --- /dev/null +++ b/urlweb/templates/shortener/index.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} +{% block content %} +

Recent Links

+
    +{% for link in recent_links %} +
  • {{ link.url }} (Score: {{ link.usage_count }}) +(Info)
  • +{% endfor %} +
+ +

Most Popular Links

+
    +{% for link in most_popular_links %} +
  • {{ link.url }} (Score: {{ link.usage_count }}) +(Info)
  • +{% endfor %} +
+{% endblock %} + +{% block extra_body %} + +{% endblock %} diff --git a/urlweb/templates/shortener/link_info.html b/urlweb/templates/shortener/link_info.html new file mode 100644 index 0000000..fb46404 --- /dev/null +++ b/urlweb/templates/shortener/link_info.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} + +{% block title %}Link info{% endblock %} + +{% block content %} +

+{{ link.url }} (Score: {{ link.usage_count }}) +
+
+Submitted on: {{ link.date_submitted|date:"M d, Y" }} +

+{% endblock %} diff --git a/urlweb/templates/shortener/submit_failed.html b/urlweb/templates/shortener/submit_failed.html new file mode 100644 index 0000000..b565c6e --- /dev/null +++ b/urlweb/templates/shortener/submit_failed.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}URL submission failed{% endblock %} + +{% block content %} +

URL submission failed

+{% endblock %} + +{% block extra_body %} + +{% endblock %} diff --git a/urlweb/templates/shortener/submit_success.html b/urlweb/templates/shortener/submit_success.html new file mode 100644 index 0000000..92e1d05 --- /dev/null +++ b/urlweb/templates/shortener/submit_success.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block title %}URL shortened{% endblock %} + +{% block content %} +The following URL:
+
+{{ link.url }}
+
+
+Was shortened to:
+ +
+
+Score: {{ link.usage_count }} +(Info) +
+
+{% endblock %} + +{% block extra_body %} + +{% endblock %} diff --git a/urlweb/urls.py b/urlweb/urls.py new file mode 100644 index 0000000..272634a --- /dev/null +++ b/urlweb/urls.py @@ -0,0 +1,17 @@ +from django.conf.urls.defaults import * +from django.contrib import admin +from django.conf import settings + +admin.autodiscover() + +urlpatterns = patterns( + '', + (r'^$', 'shortener.views.index'), + (r'^admin/(.*)', admin.site.root), + (r'^submit/$', 'shortener.views.submit'), + (r'^(?P\w+)$', 'shortener.views.follow'), + (r'^info/(?P\w+)$', 'shortener.views.info'), + + (r'^static/(?P.*)$', 'django.views.static.serve', + {'document_root': settings.STATIC_DOC_ROOT}), +)