Skip to content

Commit bdcb163

Browse files
committed
Merged in changes from conversion branch.
- Legacy-Id: 4174
2 parents 4b4d455 + 58f50b7 commit bdcb163

12 files changed

Lines changed: 47 additions & 31 deletions

File tree

django/contrib/auth/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,15 @@ def login(request, user):
6464
Persist a user id and a backend in the request. This way a user doesn't
6565
have to reauthenticate on every request.
6666
"""
67+
from MySQLdb import OperationalError
6768
if user is None:
6869
user = request.user
6970
# TODO: It would be nice to support different login methods, like signed cookies.
7071
user.last_login = datetime.datetime.now()
71-
user.save()
72+
try:
73+
user.save()
74+
except OperationalError:
75+
pass
7276

7377
if SESSION_KEY in request.session:
7478
if request.session[SESSION_KEY] != user.id:

django/contrib/auth/forms.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ class UserCreationForm(forms.ModelForm):
1111
"""
1212
A form that creates a user, with no privileges, from the given username and password.
1313
"""
14-
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
15-
help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
14+
username = forms.RegexField(label=_("Username"), max_length=64, regex=r'^[\w.@+-]+$',
15+
help_text = _("Required. 64 characters or fewer. Letters, digits and @/./+/-/_ only."),
1616
error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
1717
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
1818
password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
@@ -45,8 +45,8 @@ def save(self, commit=True):
4545
return user
4646

4747
class UserChangeForm(forms.ModelForm):
48-
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
49-
help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
48+
username = forms.RegexField(label=_("Username"), max_length=64, regex=r'^[\w.@+-]+$',
49+
help_text = _("Required. 64 characters or fewer. Letters, digits and @/./+/-/_ only."),
5050
error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
5151

5252
class Meta:
@@ -63,7 +63,7 @@ class AuthenticationForm(forms.Form):
6363
Base class for authenticating users. Extend this to get a form that accepts
6464
username/password logins.
6565
"""
66-
username = forms.CharField(label=_("Username"), max_length=30)
66+
username = forms.CharField(label=_("Username"), max_length=64)
6767
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
6868

6969
def __init__(self, request=None, *args, **kwargs):

django/contrib/auth/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ class User(models.Model):
189189
190190
Username and password are required. Other fields are optional.
191191
"""
192-
username = models.CharField(_('username'), max_length=64, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
192+
username = models.CharField(_('username'), max_length=64, unique=True, help_text=_("Required. 64 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
193193
first_name = models.CharField(_('first name'), max_length=30, blank=True)
194194
last_name = models.CharField(_('last name'), max_length=30, blank=True)
195195
email = models.EmailField(_('e-mail address'), blank=True)

ietf/doc/admin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,15 @@ class DocAliasAdmin(admin.ModelAdmin):
111111
list_display = [ 'name', 'document_link', ]
112112
search_fields = [ 'name', 'document__name', ]
113113
raw_id_fields = ['document']
114-
document_link = admin_link("document")
115114
admin.site.register(DocAlias, DocAliasAdmin)
116115

117116

118117
# events
119118

120119
class DocEventAdmin(admin.ModelAdmin):
121-
list_display = ["doc", "type", "by", "time"]
120+
def rev(obj):
121+
return obj.doc.rev
122+
list_display = ["doc", "type", "rev", "by", "time"]
122123
search_fields = ["doc__name", "by__name"]
123124
raw_id_fields = ["doc", "by"]
124125

ietf/doc/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from ietf.group.models import *
88
from ietf.name.models import *
99
from ietf.person.models import Email, Person
10+
from ietf.utils.admin import admin_link
1011

1112
import datetime, os
1213

@@ -266,6 +267,7 @@ class DocAlias(models.Model):
266267
name = models.CharField(max_length=255, db_index=True)
267268
def __unicode__(self):
268269
return "%s-->%s" % (self.name, self.document.name)
270+
document_link = admin_link("document")
269271
class Meta:
270272
verbose_name = "document alias"
271273
verbose_name_plural = "document aliases"

ietf/idrfc/mails.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
from ietf.utils.mail import send_mail, send_mail_text
1212
from ietf.idtracker.models import *
1313
from ietf.ipr.search import iprs_from_docs
14-
from ietf.ietfworkflows.streams import (get_stream_from_draft)
15-
from ietf.ietfworkflows.models import (Stream)
1614
from ietf.doc.models import WriteupDocEvent, BallotPositionDocEvent, LastCallDocEvent, DocAlias
1715
from ietf.person.models import Person
1816
from ietf.group.models import Group
@@ -258,7 +256,8 @@ def generate_approval_mail_rfc_editor(request, doc):
258256
status = full_status.replace("a ", "").replace("an ", "")
259257
disapproved = doc.idinternal.cur_state_id in IDState.DO_NOT_PUBLISH_STATES
260258
doc_type = "RFC" if type(doc) == Rfc else "Internet Draft"
261-
259+
260+
from ietf.ietfworkflows.streams import get_stream_from_draft
262261
stream = get_stream_from_draft(doc)
263262
to = ", ".join([u"%s <%s>" % x.email() for x in stream.get_chairs_for_document(doc) ])
264263
if stream.name == "IRTF":

ietf/idrfc/mirror_rfc_editor_queue.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def insert_into_databaseREDESIGN(drafts, refs):
231231
from ietf.name.models import DocTagName
232232

233233
tags = get_rfc_tag_mapping()
234-
states = get_rfc_state_mapping()
234+
state_map = get_rfc_state_mapping()
235235

236236
rfc_editor_tags = tags.values()
237237

@@ -242,20 +242,25 @@ def insert_into_databaseREDESIGN(drafts, refs):
242242

243243
log("inserting new data...")
244244

245-
for name, date_received, state, stream_id in drafts:
245+
for name, date_received, state_info, stream_id in drafts:
246246
try:
247247
d = Document.objects.get(name=name)
248248
except Document.DoesNotExist:
249249
log("unknown document %s" % name)
250250
continue
251251

252-
s = state.split(" ")
253-
if s:
252+
state_list = state_info.split(" ")
253+
if state_list:
254+
state = state_list[0]
255+
# For now, ignore the '*R...' that's appeared for some states.
256+
# FIXME : see if we need to add some refinement for this.
257+
if '*' in state:
258+
state = state.split("*")[0]
254259
# first is state
255-
d.set_state(states[s[0]])
260+
d.set_state(state_map[state])
256261

257262
# remainding are tags
258-
for x in s[1:]:
263+
for x in state_list[1:]:
259264
d.tags.add(tags[x])
260265

261266
if settings.USE_DB_REDESIGN_PROXY_CLASSES:

ietf/idrfc/mirror_rfc_index.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ def log(line):
5353
else:
5454
log_data += line + "\n"
5555

56+
# python before 2.7 doesn't have the total_seconds method on datetime.timedelta.
57+
def total_seconds(td):
58+
return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
59+
5660
def parse(response):
5761
def getChildText(parentNode, tagName):
5862
for node in parentNode.childNodes:
@@ -262,7 +266,7 @@ def insert_to_databaseREDESIGN(data):
262266
if abs(pubdate - synthesized) > timedelta(days=60):
263267
synthesized = pubdate
264268
else:
265-
direction = -1 if (pubdate - synthesized).total_seconds() < 0 else +1
269+
direction = -1 if total_seconds(pubdate - synthesized) < 0 else +1
266270
while synthesized.month != pubdate.month or synthesized.year != pubdate.year:
267271
synthesized += timedelta(days=direction)
268272
e.time = synthesized

ietf/idrfc/views_doc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def include_text(request):
8484
return include_text
8585

8686
def document_main_rfc(request, rfc_number, tab):
87-
rfci = get_object_or_404(RfcIndex, rfc_number=rfc_number)
87+
rfci = get_object_or_404(RfcIndex, rfc_number=rfc_number, states__type="draft", states__slug="rfc")
8888
rfci.viewing_as_rfc = True
8989
doc = RfcWrapper(rfci)
9090

ietf/name/utils.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
def name(name_class, slug, name, desc="", order=0, **kwargs):
22
# create if it doesn't exist, set name and desc
3-
obj, _ = name_class.objects.get_or_create(slug=slug)
4-
obj.name = name
5-
obj.desc = desc
6-
obj.order = order
7-
for k, v in kwargs.iteritems():
8-
setattr(obj, k, v)
9-
obj.save()
3+
obj, created = name_class.objects.get_or_create(slug=slug)
4+
if created:
5+
obj.name = name
6+
obj.desc = desc
7+
obj.order = order
8+
for k, v in kwargs.iteritems():
9+
setattr(obj, k, v)
10+
obj.save()
1011
return obj

0 commit comments

Comments
 (0)