Ben Sturmfels
531a97a3c9
The directory nesting is unnecessary here and confusing to navigate. I've moved all apps to the project subdirectory, currently called "www", but soon to be renamed "conservancy". I've also moved manage.py to the top-level directory.
57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
import uuid
|
|
|
|
from django.core.validators import URLValidator, ValidationError
|
|
from django.db import models
|
|
from django_countries.fields import CountryField
|
|
|
|
|
|
def validate_mutiple_urls(value):
|
|
"""Map the URLValidator() over text containing multiple URLs."""
|
|
candidate_urls = [c.strip() for c in value.split()]
|
|
invalid_urls = []
|
|
# TODO: Improve this https://docs.djangoproject.com/en/3.2/ref/forms/validation/#raising-multiple-errors
|
|
validator = URLValidator()
|
|
for url in candidate_urls:
|
|
try:
|
|
validator(url)
|
|
except ValidationError:
|
|
invalid_urls.append(url)
|
|
print(invalid_urls)
|
|
if invalid_urls:
|
|
raise ValidationError('These don\'t seem to be complete URLs:\n{}'.format('\n'.join(invalid_urls)))
|
|
|
|
|
|
class Assignment(models.Model):
|
|
"""A copyright assignment to Conservancy."""
|
|
|
|
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
full_name = models.CharField(max_length=255)
|
|
email = models.EmailField('Email address (to contact you if we have questions)')
|
|
country_of_residence = CountryField()
|
|
repositories = models.TextField(
|
|
'Code repositories containing contributions of yours whose copyright you are assigning',
|
|
help_text='List of URLs, one per line',
|
|
validators=[validate_mutiple_urls],
|
|
)
|
|
all_emails = models.TextField(
|
|
'All email addresses or other unique user identities, such as nicknames or handles, used by you to contribute to the above (i.e. in the commit logs)',
|
|
)
|
|
period_begins = models.DateField(
|
|
'Assignment period begins',
|
|
)
|
|
period_end_type = models.CharField(
|
|
'Time period to assign',
|
|
max_length=50,
|
|
choices=[
|
|
('all future contributions', 'all future contributions'),
|
|
('a specific past date', 'a specific past date'),
|
|
],
|
|
)
|
|
period_ends = models.DateField(
|
|
'Assignment period ends (if applicable)',
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
attestation_of_copyright = models.BooleanField(
|
|
'By checking the box below, I am confirming that I agree to be bound by the terms of the Copyright Assignment Agreement above.',
|
|
)
|