forked from djblets/djblets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNEWS
1434 lines (1021 loc) · 49.9 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
version 0.7.14 final (6-May-2013):
* JavaScript:
* inlineEditor now emits a "cancel" event when pressing OK without any
modifications. Previously, there was no indication that it had
finished.
* inlineEditor's "complete" event now has the initialValue parameter
(which comes after the new value) set correctly. Previously, it was
always the same as the value, making it hard to determine if
anything had changed.
* $.fn.html() now works with setting empty strings.
* djblets.gravatars:
* Added get_gravatar_url_for_email.
This returns the gravatar URL for a given e-mail address, rather
than needing a User object.
* djblets.webapi:
* The cache of known URI templates for a RootResource now works
properly when the path leading to the RootResource can change.
* When serializing an object while using ?expand, any QuerySet
will be converted to a list. This prevents any changes from
happening between serializing and rendering.
version 0.7.13 final (26-April-2013):
* djblets.log:
* Added enhanced request logging.
This supplements Python's logging functions (logging.info, etc.)
to take an optional request= parameter. When passed, the logging
information will show some additional details (by default, the
username and path) related to the log entry, helping with
debugging.
* djblets.siteconfig:
* Changing and loading the site_static_url setting will now actually
cause static media files to be loaded from that URL.
version 0.7.12 final (19-April-2013):
* djblets.datagrid:
* Massively speed up datagrid rendering.
The rendering code for datagrids had a flaw where it would
re-populate some state for every cell, and this could be very
expensive. It's now reused on all cells.
We saw this with one application where a datagrid would take
6 seconds to render. Now it takes 0.5 seconds.
* djblets.extensions:
* Added an install_extension function to ExtensionManager.
This can be used to install extensions dynamically from a file
or URL.
Patch by Surya Nallu.
* djblets.util.fields:
* CounterField now allows incrementing/decrementing by values other
than 1.
Patch by Raja Venkataraman.
* djblets.util.templatetags:
* The thumbnail and crop_image template tags now work with
Django Storage backends.
* Added a save_image_to_storage function in djblets_images that
makes it easy to save image data to Storage backends.
* djblets.webapi:
* Resources now consider both Last Modified and ETag headers
simultaneously when determining if a cached payload is still
valid. Previously, if the Last Modified timestamps were the same,
the ETag check would fail.
version 0.7.11 final (21-February-2013):
* General:
* Require Django 1.4.5 as a minimum.
This is the latest security release of Django. For more information,
see https://www.djangoproject.com/weblog/2013/feb/19/security/
* djblets.extensions:
* "config/" and "db/" links for extensions are now generated
properly when specifying a custom SITE_ROOT. (Bug #2843)
Patch by Raja Venkataraman.
* djblets.log:
* Added an Admin UI setting for changing log levels. This is the
'logging_level' setting in siteconfig, which controls
settings.LOGGING_LEVEL.
Patch by Raja Venkataraman.
* djblets.siteconfig:
* Added new 'list-siteconfig', 'get-siteconfig', and 'set-siteconfig'
management commands for manipulating siteconfig configuration
from the shell.
version 0.7.10 final (6-February-2013):
* djblets.util.fields:
* CounterField was failing to use the initializers for brand new
instances of a model, defaulting to None instead.
Patch by Raja Venkataraman.
version 0.7.9 final (27-January-2013):
* JavaScript:
* modalBoxes now use z-indexes of 99 and 100 for the box and content,
instead of 11000 and 11001.
* djblets.datagrid:
* Columns data by way of field access can now span field relationships.
For example, "some.other.object.field" can now be used.
Patch by Alexander Artemenko.
* djblets.extensions:
* Fixed a failure when clearing extension info.
Extensions that weren't properly set up yet were causing a crash
when attempting to reload the list of extensions.
* djblets.siteconfig:
* When loading the stored timezone, we're now longer setting
os.environ['TZ'] to that timezone. Instead, we're just activating
that timezone for Django only.
This works around some problems with auto-reload threads (which will
still be on the default timezone instead of the loaded one) and
importing certain Python eggs, which would end up causing file
timestamps relative to different timezones. That would cause
autoreload to kick in prematurely and break any spawned processes.
* djblets.webapi:
* Fixed a bug where list resources that had an unknown ID in the URL
could end up throwing an exception instead of returning a 404.
Patch by Niklas Hambuechen.
version 0.7.8 final (19-December-2012):
* JavaScript:
* Fixed a crash when enabling/disabling an inlineEditor without an
edit icon.
version 0.7.7 final (16-December-2012):
* djblets.datagrid:
* Fixed a possible XSS exploit in datagrids. Patch by
Alexander Artemenko.
* Failures during rendering the datagrid now results in a traceback.
* djblets.extensions:
* Database evolutions are no longer applying using
evolve --hint --execute. This fixes unintentional database
changes elsewhere.
* JavaScript:
* The second display of an inlineEditor no longer breaks the size
of the editor.
version 0.7.6 final (8-December-2012):
* JavaScript:
* inlineEditor now supports changing an "enabled" option, allowing
editors to start out enabled or disabled, or dynamically change
that state.
Patch by Jesus Zambrano.
* djblets.siteconfig:
* Siteconfig now handles old-style CACHE_BACKEND values and
new-style CACHES[cachename] dictionaries in hte 'cache_backend'
setting.
* djblets.util.cache:
* Added normalize_cache_backend.
This can take either an old-style CACHE_BACKEND or new-style
CACHES[cachename] and return a valid entry for CACHES['default'].
* djblets.webapi:
* Added unregister_resource_for_model.
This is useful for extensions that called register_resource_for_model.
Patch by Steven MacLeod.
version 0.7.5 final (30-November-2012):
* djblets.siteconfig:
* Fixed a couple missing imports.
version 0.7.4 final (29-November-2012):
* djblets.siteconfig:
* The stored cache_backend setting is now deserialized into
settings.CACHES['backend']. This leaves other caches
unaffected and stops accessing settings.CACHE_BACKEND.
version 0.7.3 final (29-November-2012):
* This version contains all the fixes and functionality of 0.6.27.
* General:
* Django 1.4.2 is now required.
* All admin-related templates have been changed to better fit
the admin template structure and styles. This includes siteconfig
and logs.
* djblets.extensions:
* Extension lists and state are now synchronized across
threads/processes/servers.
* Extension subclasses now must capture all variable arguments
(*args, **kwargs) and pass them to the parent constructor.
* URLHook, admin URLs, and API resource URLs are all now added and
removed properly when an extension is enabled or disabled.
* djblets.util:
* Cache keys are now bound to the SITE_ROOT, if one is set, to
prevent leakage across instances. (Bug #2538)
* Added DynamicURLResolver in djblets.util.urlresolvers.
This can be added to a urlpatterns list to provide an entry point
for dynamically adding or removing URLs on a site. This is used
primarily for extensions.
* djblets.webapi:
* API handler functions that specify allow_unknown=True in
@webapi_request_fields can now retrieve all extra fields as
an 'extra_fields' argument.
* JavaScript:
* The jQuery dependency has been updated to 1.8.2, and
jQuery-UI to 1.8.24.
* inlineEditor's animation speed has increased, and is now
customizable through options.fadeSpeedMS.
* inlineEditor now does a better job of matching the parent
container's bounds.
* inlineEditor no longer activates when simply selecting text.
Patch by Dave Druska.
* Added a $.fn.retinaGravatar function that, on Retina-capable
displays, requests a larger gravatar for the given URL
specified in an <img/>.
version 0.7.2 final (26-September-2012):
* This version contains all the fixes and functionality of 0.6.24.
* General:
* Styled all admin UI templates to add a "title" class to <h1> page
titles. This affects extensions, log viewer, and siteconfig.
* djblets.log:
* Fixed the columns to match the style of other admin UI columns.
* djblets.pipeline:
* Our 'bless' compiler is now compatible with the latest versions of
pipeline.
* JavaScript:
* modalBox's positioning is now properly centered. It was previously
just off-center a bit.
version 0.7.1 final (3-August-2012):
* Added the contrib directory to the source distribution.
This solves a packaging problem when not using eggs.
version 0.7.0 final (2-August-2012):
* General:
* Djblets now requires Django 1.4.1+.
* Added localized timezone awareness. Datagrids, log generation,
and various utility functions now operate in the user's
pre-configured local timezone.
* Djblets now uses Django's standard static media support.
It looks for bundled media files using the static support.
Applications must have STATIC_URL, STATIC_ROOT, etc. configured
correctly.
* djblets.datagrid:
* DateTimeColumn and DateTimeSinceColumn are now timezone-aware.
* djblets.extensions:
* Added a framework for supporting loadable, configurable extensions
in Django-based sites.
Extensions can be used to augment the functionality of a webapp.
Webapps can provide hooks in their codebase at any point they want
to extend. These can come in the form of template hooks, URLs hooks,
admin UI hooks, and other in-process hooks.
A webapp will provide a single ExtensionManager, specifying the name
of a Python setuptools entrypoint. This entrypoint will be scanned
for any installed packages on the system that provide Extension
subclasses. Integration in the Administration UI is provided by
linking to the provided admin URLs.
WebApps will typically only have a single ExtensionManager, but it is
possible for it to have multiple ExtensionManagers, allowing
different modules to provide their own extension mechanisms.
Extensions themselves can depend on other extensions. Dependency
resolution happens automatically when enabling extensions.
Extensions also have easy support for configuration forms in the
admin UI. All data is automatically loaded and stored in the
database.
This is an experimental feature, and at this point we are not
guaranteeing compatibility between 0.7.x releases. 0.8 will have
a stable API.
* djblets.util:
* ModificationTimestampField, http_date, and the the ageid filter have
been made timezone-aware.
* Added a TimeZoneField, which displays all known timezones for
selection. The timezones come from the pytz module, which is now
a dependency of djblets.
version 0.6.28 final (20-February-2013):
* General:
* Require Django 1.3.7 as a minimum.
This is the latest security release of Django. For more information,
see https://www.djangoproject.com/weblog/2013/feb/19/security/
* djblets.datagrid:
* Fixed a possible XSS exploit in datagrids. Patch by Alexander
Artemenko.
* Failures during rendering the datagrid now results in a traceback.
* djblets.util.fields:
* CounterField was failing to use the initializers for brand new
instances of a model, defaulting to None instead.
Patch by Raja Venkataraman.
verrsion 0.6.27 final (24-November-2012):
* djblets.gravatars:
* The gravatar URL used for HTTPS connections now uses
https://secure.gravatar.com and not https://www.gravatar.com.
* djblets.webapi:
* The allowed_mimetypes list in WebAPIResource is no longer
getting polluted with every WebAPIResource's allowed item and list
mimetypes.
version 0.6.26 final (5-November-2012):
* djblets.gravatars:
* Added a get_gravatar_url() function, which can be used to get
the URL for a user's gravatar without generating HTML.
* Made gravatar support smart enough to choose an HTTP vs. HTTPS
URL, depending on what was used to access the page. (Bug #2768)
* djblets.webapi:
* generate_etag() and serialize_*_field() functions now take a
request parameter.
This requires that all callers update their serialize_*_field()
functions to take a **kwargs parameter.
This breaks backwards-compatibility, but is a necessary change.
* Resource handler functions that provide default values for
parameters can now expect those to be used. Previously, when
a parameter to the API wasn't provided, the value passed would
be None.
version 0.6.25 final (27-October-2012):
* General:
* Require Django 1.3.4.
This is a simple release that just bumps our Django requirement,
in order to not have issues with consumers depending on the
latest security release in the 1.3.x branch.
version 0.6.24 final (25-September-2012):
* djblets.feedview:
* We now use the latest upstream of feedparser instead of an older
bundled version. This keeps us updated and prevents a security
issue with the version we shipped.
version 0.6.23 final (24-September-2012):
* General:
* We now require Django 1.3.3.
Previous versions claimed to work with Django 1.1.1 or higher,
but for the remainder of the 0.6.x line, we plan to stay only on
Django 1.3.x.
For Django 1.4+ support, use the latest 0.7.x releases.
* djblets.util:
* Added djblets.util.humanize.
This currently contains a humanize_list function. It's the same
as the template filter we provide, but is a bit nicer to include
and work with than a filter.
* djblets.webapi:
* Added an Item-Content-Type header to web API responses for
list resources.
This header contains the mimetype for the items in the list, making
it possible to determine what to use when fetching the items. The
documentation has been updated on how to use this.
version 0.6.22 final (31-July-2012):
* djblets.util:
* User and AnonymousUser are no longer imported globally in
the djblets_utils templatetags. This fixes some breakages in
apps that imported this file to get access to filters, but weren't
running in a Django settings environment.
version 0.6.21 final (24-July-2012):
* djblets.util:
* Fixed a bug with ifuserorperm and non-int IDs.
version 0.6.20 final (21-July-2012):
* djblets.datagrid:
* Improved performance of the datagrids.
Datagrids now fetch all needed ForeignKey-related objects in one
go, instead of having one query per unique object. This can reduce
the query count substantially.
* djblets.util:
* The ifuserorperm template tag now accepts both IDs and User
objects, allowing comparisons to be made without fetching the
User.
version 0.6.19 final (11-June-2012):
* JavaScript:
* inlineEditor no longer bubbles keypress events up. This helps prevent
problems with global key handlers being greedy.
version 0.6.18 final (5-June-2012):
* djblets.siteconfig:
* Settings form rows in the template now have IDs indicating the row
(in the form of "row-{{fieldname}}") and CSS class names
("field-{{fieldname}}").
* Help text for fields are now marked as safe, so that the contents
aren't escaped.
* The form's disabled_reasons is no longer assumed to be populated.
* The initial field values are now always set. Previously, they would
only be set if the field type was a boolean, or the value didn't
evaluate to false, which broke numeric fields set to 0.
* djblets.util:
* Added a json_dumps filter, which serialized a value to JSON.
version 0.6.17 final (2-April-2012):
* djblets.gravatars:
* Gravatars are no longer hard-coded to be jpegs. This was
breaking some gravatars.
* JavaScript:
* inlineEditor now has a showRequiredFlag option for indicating if
a field is required.
No validation is done on this, but an asterisk is displayed in
order to indicate that it's required.
Patch by Yazan Medanat.
* inlineEditor now indicates when its dirty state changes.
A new "dirtyStateChanged" signal is emitted whenever the dirty
state changes, which happens as the result of a number of
different events. Looking up the dirty state is now cheaper, as
it's calculated when needed instead of on lookup.
Patch by Jim Chen.
version 0.6.16 final (26-February-2012):
* djblets.datagrid:
* Removed an extraneous </span> in the paginator.
* Fixed a compatibility issue with Django 1.4 in the queries.
* djblets.util:
* Fix parsing of tokens in a blocktag in Django 1.4.
We were failing to pass a tuple to parser.parse() when specifying the
end tags for a block tag. Somehow this never bit us before, but a
seemingly unrelated change in Django 1.4 triggered this broken
behavior, making all custom blocktags break.
This led to some false-positives in other fixes, where it seemed that
removing custom tags starting with "if" solved things. In reality, it
didn't solve anything. It just masked the problem.
This change should be compatible with all versions of Django.
* djblets.webapi:
* Add support for resource-specific mimetypes.
A common method for REST services is to have payloads returned with
resource-specific mimetypes. These can help to identify the format of
a payload (useful for automatic bindings) without having to inspect
the URI.
This adds support for easily telling a resource to return such
mimetypes. If mimetype_vendor is specified, WebAPIResource can
populate the accepted mimetypes list with some
vendor/resource-specific mimetypes that will be used by default for
any responses.
When there's a vendor mimetype, the resources will use the resource
names for the mimetypes, but these can be overridden using
mimetype_list_resource_name and mimetype_item_resource_name.
* Accept "true" as a valid boolean value in the web API.
Patch by Jim Chen.
version 0.6.15 final (13-December-2011):
* djblets.pipeline:
* Replaced the djblets.compress module with djblets.pipeline.
django-compress was deprecated shortly after our 0.6.14 release, with
django-pipeline being the successor. As such, we've decided to get rid of
the djblets.compress support and just replace it with equivalent pipeline
support.
We're not aware of any projects this will break.
* djblets.util:
* Fixed Django 1.4 compatibility.
djblets.util.misc was importing RegexURLPattern from a location that
no longer worked. This has been updated to use the proper import path.
version 0.6.14 final (9-November-2011):
* djblets.compress:
* Added a new filters for django-compress that handles lesscss
(http://lesscss.org) files and automatically converts/deploys as
CSS.
* Added new templates for django-compress that handles the
MEDIA_SERIAL suffix.
* djblets.siteconfig:
* The settings template now allows fields to not have a label by
setting "fields_no_label" to True in the form class. Patch by
Hongbin Lu.
* djblets.webapi:
* Fixed authentication failures when ":" was in the password.
Patch by Dave Druska. (Bug #2334)
* djblets.util:
* The jQuery and jQuery-UI versions are now referenced in only one
place, in js/jquery.html and js/jquery-ui.html. Other templates
can include these and keep up-to-date with the versions Djblets
provides.
Projects can override these templates to provide their own
hard-coded versions.
In the next release, these will switch to the Google CDN by default.
version 0.6.13 final (7-October-2011):
* djblets.log:
* Include the HTTP method in the new page request logs.
* djblets.util:
* Moved controlled_subprocess into djblets.util.contextmanagers.
This makes it easier to selectively import on Python 2.4.
* Fixed a syntax error in controlled_subprocess on Python 2.4 and 2.5.
version 0.6.12 final (6-October-2011):
* djblets.log:
* Allow logging page access times.
If settings.LOGGING_PAGE_TIMES is set to True, page access times
(along with HTTP method, URL, and user) are logged. This can be
handy in tracking performance problems and blocked page loads.
* djblets.util:
* Added a controlled_subprocess context manager for Python 2.5+.
This is useful for using subprocess.Popen on a process that may end
up blocking. It ensures that a blocked process will terminate.
This is experimental and may change in behavior, or move to a new
file.
Patch by Mike Conley.
* djblets.webapi:
* API authorization failures, misparsed headers, and authorization
attempts are now logged.
version 0.6.11 final (10-September-2011):
* djblets.testing:
* Added a new TestCase class and @add_fixtures decorator for
having fixtures specific to text functions.
* djblets.util:
* Fixed defaults on counter fields on new model instances.
Counter fields on new model instances were being set to 0, preventing
them from recomputing the next time they're accessed. This would
cause any new models to be incorrect. They're now initialized to
NULL instead. (Bug #2268)
version 0.6.10 final (20-August-2011):
* djblets.datagrid:
* Log failed attempts at finding cell templates, in order to aid
debugging.
* djblets.feedview:
* Don't fail with an uncaught exception if loading an RSS feed fails.
(Bug #2189)
If loading the RSS feed fails (if it's behind a proxy, for example),
feedview would raise an error. Now it provides the error data for
the caller to render.
* djblets.log:
* Fixed a date range calculation bug in the log viewer. (Bug #2218)
The "This Month" view in the log viewer was broken due to it
attempting to use the beginning of the date range calculated, which
was 0, instead of 01. Since we can assume the start of the month
will continue to be 1 for the foreseeable future, we can just
hardcode this and be safe.
Patch by Lee Loucks.
* djblets.util:
* Added a make_cache_key function for generating usable cache keys.
The make_cache_key function generates a cache key guaranteed to be
able to fit inside the memcached key length restrictions. It will
generate a MD5 hash of the key if it exceeds the length.
This is the same logic that cache_memoize uses to build the keys.
It can be used to perform other operations on that key.
Patch by Vlad Filippov.
* Allow JSONField to store up to 4GB of data on MySQL. (Bug #1481)
JSONField on MySQL was hard-coding the "TEXT" column type,
allowing only 64KB of data. Now it uses the default for Django's
TextField, which is 4GB.
This won't break compatibility with existing fields, but those
fields won't gain the benefits. To update an existing field on
MySQL, you will need to perform the following:
ALTER TABLE table_name MODIFY field_name LONGTEXT;
* Fixed a storage problem with large cache data. (Bug #1660)
Large cache data was encoded incorrectly, causing anything stored to
become unloadable, meaning it'd have to be recomputed. This was due
to a string being stored for all but the last chunk, instead of a
string wrapped in a list. This affects any data that, after being
picked and zlib-compressed, is over 1MB in size.
* djblets.webapi:
* Make it easier to debug invalid data types in @webapi_request_fields.
If using an invalid data type in the @webapi_request_fields listing,
you'd see a cryptic error being raised. Now the field is ignored
and an error is logged.
version 0.6.9 final (21-July-2011):
* djblets.auth:
* Add optional first and last name fields to RegistrationForm.
* Prevent occasional errors when calling delete_test_cookie().
Sometimes validate_test_cookie() will work and then delete
delete_test_cookie() will throw an error. If the test cookie is
already gone from the session, we no longer care if it fails to
be deleted.
* djblets.datagrid:
* Fixed an occasional crash due to id_list not being set. (Bug #1526)
* Fixed an occasional rendering error caused by a 'None' object being
rendered.
* Changing datagrid columns no longer loses the current page you're on,
or other view settings. Patch by Simon Wu.
* djblets.util:
* Added a ifnotuserandperm template tag, which is the negation of
ifuserandperm. Patch by Hongbin Lu.
* djblets.webapi:
* Add support for browser-side caching of webapi resources.
WebAPIResource now has a few new properties and methods for handling
browser-side caching. Resources can handle Last Modified timestamps
or ETags, and generate them either based on fields or through custom
functions.
This can speed up access to resources, improving performance both
client-side and server-side.
* JavaScript:
* Prompt when canceling a dirty inlineEditor by default. (Bug #2096)
inlineEditor now prompts the user if they cancel via Escape or the
Cancel button when the editor is dirty. The user has a chance to
change his mind instead of just losing everything he wrote. This can
be turned off per-inlineEditor.
* Support Control-S for saving on inlineEditors. (Bug #1958)
When editing a long block of text on an edit field, it's handy to be
able to save periodically. Now, pressing Control-S will now trigger a
save without closing the field. Patch by Hongbin Lu.
version 0.6.8 final (23-June-2011):
* djblets.datagrid:
* Fixed an occasional ValueError with the datagrid.
On occasion, the "active" state of a column can sometimes be
True when the column isn't in self.datagrid.columns, which meant
it would throw a ValueError when trying to remove itself from the
list. We're more bullet-proof now.
* djblets.gravatars:
* The gravatar templatetag no longer errors out if the provided user
is anonymous.
* djblets.log:
* The "Logging to..." lines are now only logged when settings.DEBUG
is on.
* djblets.util:
* JSONField no longer errors out if blank=False is used. (Bug #2015)
* Fixed escaping of label names in label_tag() on newer versions
of Django.
* djblets.webapi:
* Fixed a problem when settings.WEB_API_ENCODERS isn't set.
Our fallback for when this setting wasn't set was broken, causing
new errors.
version 0.6.7 final (9-January-2011):
* djblets.datagrid:
* The datagrids now use a RequestContext when rendering cells, allowing
the columns or templates to access data from context processors.
* djblets.siteconfig:
* The form body of a siteconfig settings page can now be replaced.
It's now stored in the "form_content" block.
* SiteConfigurationManager no longer crashes if trying to clear
the cache for a SiteConfiguration that no longer exists.
* djblets.testing:
* The Selenium test suite has been updated to support Django 1.2's
multi-database support. Previously, fixtures would fail to load
if using the new settings.DATABASES variable.
* djblets.util:
* The @augment_method_from decorator wasn't properly calling up the
decorator chain, preventing some decorators from being invoked. This
has been fixed to ensure all decorators are called.
* djblets.webapi:
* Due to the @augment_method_from breakage listed above, webapi
decorators could fail to add their own checks, causing various
problems in field checking and authentication. This is now fixed.
* The Permission Denied (HTTP 403) errors being returned weren't
sufficient for clients that weren't authenticated. Now, an
unauthenticated client will instead see Not Logged In (HTTP 401)
errors.
* The HTTP_AUTHORIZATION header is now checked on all requests. When
provided by the client, it will be used for authentication. This
means that clients can now force a login from their very first
request on, instead of requiring a HTTP 401 Unauthorized being
sent out first.
This will also prevent multiple logins across different requests
from the same client, when the HTTP_AUTHORIZATION header is passed
on each request. This makes requests less heavy-weight and prevents
the last_login timestamp on the User from being updated on each
request.
As part of this change, any webapps manually using the
@webapi_login_required decorator without the new resource code
will no longer support HTTP Basic auth. However, this was never
a supported feature anyway, and was more there by accident.
* The 'api_format' parameter in requests is now treated specially
and doesn't trigger any invalid attribute errors during field
validation.
* WebAPIResource.delete now uses get_object instead of fetching
the object directly, which simplifies the function and guarantees
that the correct object is used (especially when a resource
overrides get_object).
* Redirects now preserve any special parameters ("callback",
"_method", "expand", and "api_format") passed to the request.
This works around problems in HTTP implementations that don't
allow the caller to know that redirects occurred (such as major
browsers), which would lead to this information being stripped and
the wrong results being returned.
* The "expand" parameter for expanding links in payloads is now
supported for POST and PUT requests.
version 0.6.6 final (22-November-2010):
* djblets.util:
* Fixed a compatibility problem with JSONField and Django 1.1. It
was assuming support for Django 1.2's multi-database support.
* Fixed multi-database support in Django 1.2 with JSONField, where
the default connection was always being used in one case.
version 0.6.5 final (20-November-2010):
* djblets.datagrid:
* MEDIA_SERIAL is now used for all the images in the datagrid
template. Patch by Ben Hollis.
* djblets.util:
* Added a @root_url decorator for use with get_absolute_url
implementations, which appends SITE-ROOT to any returned URLs.
* Added a CounterField for atomically updating counters.
CounterField can be used to atomically increment or decrement
an integer stored in the database, on individual models or
on many models at a time. It's intended to substitute for
potentially expensive or numerous SQL queries that retrieve
counts of objects.
* Updated the custom fields for Django 1.2 multi-database
compatibility.
* djblets.webapi:
* Fixed a bug in serializing 'long' values in XML.
* Resources now Vary on HTTP Accept, meaning that the browser won't
cache the wrong response type when accessing the same resource
with two different requested mimetypes.
* Reduced the SQL query count for resources.
* Fixed problems that could occur with URLs when serializing objects in
a list and when returning links.
version 0.6.4 final (14-September-2010):
* djblets.testing:
* An undefined variable error when using the Selenium test support
has been fixed.
* djblets.util:
* Added an augment_method_from decorator for augmenting existing
functions.
This allows a subclass to augment a parent class's function's
documentation and decorators. The existing decorators are
automatically inherited. Where this becomes useful is where you have
several classes that share common logic, but may need further
restrictions or new documentation.
The defined function is meant to have an empty body (or 'pass'),
but it can contain code wich will be executed after the parent
function. No returned values will be used, however.
* djblets.webapi:
* When serializing a dictionary in a webapi response into XML, we
now properly serialize keys that are integers. They are serialized
as <int value="...">.
* Fixed a circular dependency that occured between resources.py,
encoders.py, and core.py (depending on which was first imported).
* The User resource now accepts a '.' in the username.
* List-only resources now always have their get_list function called,
regardless of whether it had list_child_resources defined.
* Singleton resources (resources that exist as a single child item
with no object list) must now have the 'singleton' parameter set
to 'True'.
* HTTP Accept mimetypes and ?api_format= are now supported properly
for resources.
* Specifying api_format in POST requests now works.
* Resource classes instances can now be queried by class, using
the get_resource_from_class function.
* Resource classes can now be introspected:
* Functions can list which error classes the client can expect
to receive using the @webapi_response_errors decorator. It can
be queried using function.response_errors.
* The list of fields that can or must be specified for
HTTP GET/PUT/POST can now be queried. It can be queried using
function.required_fields and function.optional_fields.
* Usage of @webapi_login_required can now be checked by accessing
function.login_required.
* The list of fields on a resource should now be a dictionary,
which can include a description of the field.
* The custom links on a resource can now be explicitly listed
by overriding the get_related_links function.
version 0.6.3 final (4-July-2010):
* djblets.testing:
* Fixed Selenium unit testing to properly skip the tests when
the Selenium server was down.
* djblets.util:
* Added utility functions for HTTP Accept-based content negotation.
This adds new get_http_requested_mimetype and get_http_accept_lists
functions for doing content negotiation using the HTTP Accept request
header. This header allows clients to tell the server which mimetypes
it accepts or explicitly forbids, based on priorities, so that the
server can send the right data. This can allow a single URL to return
various forms of data based on the client (HTML, PDF, JSON, etc.).
The get_http_accept_lists() function parses the HTTP Accept request
header and returns sorted lists of acceptable mimetypes and
unacceptable mimetypes. These are sorted based on the priorities in
the header.
The get_http_requested_mimetype() function takes a HttpRequest and a
list of supported mimetypes for that URL and then, based on the
results of get_http_accept_lists() and the supported mimetypes,