Skip to content

Instantly share code, notes, and snippets.

@twbagustin
Forked from armonge/gist:2830057
Last active August 29, 2015 14:01
Show Gist options
  • Save twbagustin/0f0bc6c78b2715e10c59 to your computer and use it in GitHub Desktop.
Save twbagustin/0f0bc6c78b2715e10c59 to your computer and use it in GitHub Desktop.
from urllib.parse import urlparse, parse_qs
from django.utils.translation import ugettext_lazy as _
from django.db import models
from django import forms
import re
def validate_youtube_url(value):
"""
El patron lo saque de http://stackoverflow.com/questions/2964678/jquery-youtube-url-validation-with-regex
"""
pattern = r'^http(?:s)?:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:\S+)?$'
if value[:16] == 'http://youtu.be/':
if re.match(r'\w+', value[16:]) is None:
raise forms.ValidationError(_('Not a valid Youtube URL'))
elif re.match(pattern, value) is None:
raise forms.ValidationError(_('Not a valid Youtube URL'))
class YoutubeUrl(str):
@property
def video_id(self):
parsed_url = urlparse(self)
if parsed_url.query == '':
return parsed_url.path
return parse_qs(parsed_url.query)['v'][0]
@property
def embed_url(self):
return 'http://youtube.com/embed/%s/' % self.video_id
@property
def thumb(self):
return "http://img.youtube.com/vi/%s/2.jpg" % self.video_id
class YoutubeUrlField(models.URLField, metaclass=models.SubfieldBase):
def __init__(self, *args, **kwargs):
super(YoutubeUrlField, self).__init__(*args, **kwargs)
self.validators.append(validate_youtube_url)
def to_python(self, value):
url = super(YoutubeUrlField, self).to_python(value)
return YoutubeUrl(url)
def get_prep_value(self, value):
return str(value)
@twbagustin
Copy link
Author

Forked and updated to work with python3, and https video

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment