Compare commits
944 Commits
stable/1.1
...
stable/1.6
Author | SHA1 | Date | |
---|---|---|---|
|
609d5e9f85 | ||
|
4e26a84a12 | ||
|
019eaacefc | ||
|
b178c02785 | ||
|
f25250fd76 | ||
|
fb069da49e | ||
|
1e03a662fc | ||
|
48f5adf308 | ||
|
999c31426a | ||
|
9d915ac1be | ||
|
5510f07071 | ||
|
b6b3cb9899 | ||
|
581a43948f | ||
|
fc2ec51941 | ||
|
412137a1e8 | ||
|
9cfcdd03e3 | ||
|
7d3418c9cd | ||
|
c5a8b442bd | ||
|
7a30dc87ad | ||
|
089dcbc266 | ||
|
778ccee9bc | ||
|
d686c9b631 | ||
|
64735731e0 | ||
|
3b1dc45602 | ||
|
16f533b2a4 | ||
|
5104d93504 | ||
|
9316a04a9c | ||
|
829d62bd52 | ||
|
46f1f73610 | ||
|
cba3d8ab07 | ||
|
fb614ff4a7 | ||
|
b9101fa7a2 | ||
|
79df62f4d2 | ||
|
4c6bd574ad | ||
|
e2fea7c714 | ||
|
f9de1998f9 | ||
|
d7a06ee7e5 | ||
|
553779c405 | ||
|
72e0b03366 | ||
|
d7597b31d5 | ||
|
f143e25883 | ||
|
a1a230382d | ||
|
5e45c4f7c2 | ||
|
3b76a82a26 | ||
|
8d21fee7ab | ||
|
4747c2f17f | ||
|
22d3048676 | ||
|
0114b9df13 | ||
|
e17d98ff02 | ||
|
116d2098f6 | ||
|
2d0ae995d6 | ||
|
70c965ad4f | ||
|
d237aaa929 | ||
|
0e3626260d | ||
|
ab6df6419c | ||
|
79561e7c3b | ||
|
b6c05b2b94 | ||
|
3ac7d83ba5 | ||
|
89f9bf61bb | ||
|
ec861bca69 | ||
|
5fb7086b6b | ||
|
30a12d6ca6 | ||
|
43c55a7d4e | ||
|
e24ec760f1 | ||
|
62048bcd62 | ||
|
9abfe2c02d | ||
|
fdbe038ced | ||
|
7e47c3e6af | ||
|
a87ade7e30 | ||
|
51dff0f588 | ||
|
2fd16232b1 | ||
|
c3a40af6ec | ||
|
3c317064d8 | ||
|
276332d85c | ||
|
1fa2e7aba1 | ||
|
db227d9d20 | ||
|
61be9373af | ||
|
614dd44d0d | ||
|
2e7ca09940 | ||
|
7323e15d87 | ||
|
159978e5c0 | ||
|
f31e9c7a9d | ||
|
b078ccf8bf | ||
|
bcdfa0eb9a | ||
|
df47f0c918 | ||
|
61f20b42cd | ||
|
672015407b | ||
|
78af6f134b | ||
|
4a30e0aeb9 | ||
|
89df9d244d | ||
|
de88256854 | ||
|
2365c7c230 | ||
|
5fa841d22f | ||
|
28033632f8 | ||
|
10890606bc | ||
|
aa9e90d849 | ||
|
deb11b0edf | ||
|
54c2c5e048 | ||
|
0f14263c90 | ||
|
2bc0dacd40 | ||
|
b087d9b5e6 | ||
|
164970bac1 | ||
|
811508b051 | ||
|
66be18ea58 | ||
|
ab0899fc6b | ||
|
7d90fed1a0 | ||
|
a57f32411f | ||
|
5e4ddcc52d | ||
|
0a31b4ea8e | ||
|
e24b246e2b | ||
|
c5c4bfa12a | ||
|
0aad1f1ea9 | ||
|
e71ef9b6f2 | ||
|
0004156873 | ||
|
011541d948 | ||
|
8c0851051d | ||
|
9beca95eb0 | ||
|
943716c8ee | ||
|
dd7346ed1d | ||
|
2376319ce0 | ||
|
8cee5875a6 | ||
|
59d369db78 | ||
|
a6c294a5a2 | ||
|
aa1939c1d1 | ||
|
9a66244bd8 | ||
|
452587aba8 | ||
|
31b5e3e010 | ||
|
cc8486b6fe | ||
|
eba54eb157 | ||
|
e2d4677a1c | ||
|
5767bc722f | ||
|
a7af6ad96a | ||
|
731654197c | ||
|
8635fa0b11 | ||
|
c9e0afe2d3 | ||
|
414e3fc59d | ||
|
289d38b731 | ||
|
f7c7ab0e89 | ||
|
900f28a2b5 | ||
|
75d03c7755 | ||
|
24d84520aa | ||
|
b877697472 | ||
|
ce4057591a | ||
|
996ac768e3 | ||
|
e3453b61c6 | ||
|
4db64e8491 | ||
|
8e77ac634f | ||
|
adb0c535a9 | ||
|
fa76275e8a | ||
|
9bc1091980 | ||
|
4684464b35 | ||
|
d3c75da7fb | ||
|
f8344398fc | ||
|
808c0dc705 | ||
|
66638a09c5 | ||
|
8b19a4e275 | ||
|
f7c494f250 | ||
|
0268b855f9 | ||
|
dd0c3f4ee1 | ||
|
da051da8df | ||
|
52b878d805 | ||
|
48368d421c | ||
|
477ab02312 | ||
|
9f9fdc4b0a | ||
|
c0e49ef767 | ||
|
18f25efc9e | ||
|
3cd3b49eb5 | ||
|
d1e4fb996b | ||
|
190d81179f | ||
|
75d7bb8d43 | ||
|
955fdc8cdb | ||
|
f5e8376288 | ||
|
73cc96478b | ||
|
99b5567796 | ||
|
123f490ae3 | ||
|
db1cfbc1a9 | ||
|
d07394a51e | ||
|
ffb9cbfdaa | ||
|
72e98d5c16 | ||
|
3d8e106ae9 | ||
|
5fdfa2d9b4 | ||
|
4121ce3dfa | ||
|
e275016f09 | ||
|
316178efe6 | ||
|
0dfc37669d | ||
|
1cfb1052ee | ||
|
faff723770 | ||
|
e4b2bea743 | ||
|
8567c1a3c2 | ||
|
f07e9f8796 | ||
|
838b7f8220 | ||
|
8e25b696ba | ||
|
6c70b1d7df | ||
|
a7fe87bd28 | ||
|
e3a99357cb | ||
|
1c714c18d2 | ||
|
2630cafc86 | ||
|
ae5a4668be | ||
|
deeaa78d5e | ||
|
83098dccdf | ||
|
290e389fe9 | ||
|
205090bc71 | ||
|
ca44366b15 | ||
|
24e97add31 | ||
|
21853c1b90 | ||
|
04d827a710 | ||
|
9be56ec62c | ||
|
227a0f27a6 | ||
|
609153d2bf | ||
|
685582940b | ||
|
a823a74975 | ||
|
f3bdb83ba5 | ||
|
d8f7e00708 | ||
|
837cad0f62 | ||
|
85f9745807 | ||
|
b6bfdacdae | ||
|
890a2d632e | ||
|
9207442fe2 | ||
|
f3cd0a009e | ||
|
e125984394 | ||
|
6883602021 | ||
|
735ece0b89 | ||
|
6b00b478d2 | ||
|
6d0acc344f | ||
|
90b4d20566 | ||
|
044d419c21 | ||
|
25d04ebe54 | ||
|
20a1c07ea1 | ||
|
e4670d988a | ||
|
c38e47bec0 | ||
|
ef3ae3d1c9 | ||
|
d4a3fd44f0 | ||
|
6b52e1793c | ||
|
b0e5a527db | ||
|
26983c4c64 | ||
|
15fe4ab671 | ||
|
631d0bb2da | ||
|
fcd2e06ae5 | ||
|
ab2a2f6695 | ||
|
f5b6b25c5f | ||
|
08bd249fa2 | ||
|
734e9ad232 | ||
|
9334150ca4 | ||
|
3a736c1836 | ||
|
4c358df66a | ||
|
3252e0654e | ||
|
c9a4c1d80b | ||
|
082920d827 | ||
|
475b3791a3 | ||
|
6a2f8985c1 | ||
|
26221445df | ||
|
f3b0829017 | ||
|
91e03e81bb | ||
|
ee075c4484 | ||
|
ba40d6509a | ||
|
20215f4cae | ||
|
1a3371d1e4 | ||
|
50a289d05f | ||
|
4b49cbfae4 | ||
|
d41a001011 | ||
|
9dc7f69a4b | ||
|
b5bacdea00 | ||
|
b053eb929b | ||
|
6011075245 | ||
|
1abcf3a808 | ||
|
e05a6222cd | ||
|
bff0eb3b24 | ||
|
c530a63429 | ||
|
b718e292ac | ||
|
42f8029b36 | ||
|
129c446e86 | ||
|
8ebf38b7a4 | ||
|
b6d3212190 | ||
|
dd9cedf16a | ||
|
f939e25b59 | ||
|
5783088eec | ||
|
cddbaca697 | ||
|
0e37049636 | ||
|
034866204b | ||
|
b97b24882c | ||
|
120a981207 | ||
|
c1692fa25a | ||
|
2a0f942cbd | ||
|
f6e9127483 | ||
|
2997a20072 | ||
|
6574e6c183 | ||
|
6265885c1e | ||
|
4a6b911fcf | ||
|
b4b63b3832 | ||
|
e9c78435ab | ||
|
2b0e9aa57d | ||
|
42659ceb3f | ||
|
d16948bd19 | ||
|
a742cf1711 | ||
|
274bedb928 | ||
|
6915220ff9 | ||
|
c5306d4af1 | ||
|
49f5a29493 | ||
|
362ce5e936 | ||
|
a937687633 | ||
|
6ec346ba7b | ||
|
7bb9bebe47 | ||
|
3f1abbfc40 | ||
|
d63bfb14dd | ||
|
5f0829a27e | ||
|
d63e20942f | ||
|
4352a50871 | ||
|
25adac9b42 | ||
|
1b43131b5d | ||
|
b6863879e1 | ||
|
839deb7a77 | ||
|
9e28bfb324 | ||
|
8e5ce99d83 | ||
|
fa60ac76c0 | ||
|
e093060823 | ||
|
82803611eb | ||
|
20dbbc5fa2 | ||
|
9510e96da6 | ||
|
a476b15aa5 | ||
|
724ccd2ec1 | ||
|
1252b77824 | ||
|
a357079892 | ||
|
d501c79f7b | ||
|
80f6cbbadb | ||
|
1d3d2b9a24 | ||
|
4ea02bdb0d | ||
|
746cded010 | ||
|
9afedbef42 | ||
|
de95867284 | ||
|
129cb7e222 | ||
|
728fd27c00 | ||
|
e68c084ed1 | ||
|
d5cef2a19c | ||
|
690a5984a3 | ||
|
6fa7d7c594 | ||
|
32529e6432 | ||
|
23526d2f48 | ||
|
1cce00a762 | ||
|
bd5965ce68 | ||
|
73474df954 | ||
|
07e2a56814 | ||
|
f0d03d41be | ||
|
a5297c1ef4 | ||
|
916f0de74b | ||
|
c0882fefca | ||
|
059bc7eb60 | ||
|
30ba506e97 | ||
|
31892af3f0 | ||
|
f659c8e13a | ||
|
fe83cfe9ed | ||
|
c0a9c2f72a | ||
|
38096da5c0 | ||
|
90916e1708 | ||
|
7af32bca38 | ||
|
779ef57c37 | ||
|
d908b67e81 | ||
|
c9b2feffee | ||
|
f05f5c231a | ||
|
5f7b3e56ce | ||
|
d1503afd66 | ||
|
c8c2d60614 | ||
|
0726482c9d | ||
|
a01daaf231 | ||
|
9f7bd83184 | ||
|
1a2939bc26 | ||
|
141bb90b4c | ||
|
f582b61f1c | ||
|
8e704b176f | ||
|
e7649789ed | ||
|
4aaea2921d | ||
|
5cda1d2702 | ||
|
f2b513c9e8 | ||
|
dde67de0f6 | ||
|
985d0865a3 | ||
|
3a5da7a11c | ||
|
39b099bdd2 | ||
|
4f6ff7ee85 | ||
|
98070b94a9 | ||
|
882f2a5b81 | ||
|
79cc1fa58d | ||
|
a36513c2b4 | ||
|
23cbfc9a25 | ||
|
12da6902e9 | ||
|
e56ce87bd8 | ||
|
a088ce90f2 | ||
|
14366ed33e | ||
|
a6f05af016 | ||
|
9a446211bd | ||
|
32a880ae95 | ||
|
d6db48e5f6 | ||
|
76700c5437 | ||
|
e9ffe7e3c8 | ||
|
dbb9819360 | ||
|
63d6983746 | ||
|
687b3d96c4 | ||
|
c58a98cc34 | ||
|
5f03b06919 | ||
|
a77ec25573 | ||
|
8864d24789 | ||
|
fd3fa851b5 | ||
|
0f272629ca | ||
|
5f42c02195 | ||
|
0573120cb4 | ||
|
05cef1939e | ||
|
6f8e655ca0 | ||
|
38635977b7 | ||
|
319cfd2097 | ||
|
db60a52085 | ||
|
a0a6112afc | ||
|
a21fc1c086 | ||
|
e2e4de6555 | ||
|
6ea5f9e0de | ||
|
e47b90e48f | ||
|
c91e772b3a | ||
|
6bf05c0267 | ||
|
6bca149af5 | ||
|
8eca53f0be | ||
|
4cf556db48 | ||
|
a4c32d70c2 | ||
|
f7c2852f30 | ||
|
a292ad1105 | ||
|
fcc290eda9 | ||
|
85149a8b7f | ||
|
4f058655d0 | ||
|
b8ec3b6ddd | ||
|
b1cc1633e0 | ||
|
363b8c690a | ||
|
b63dad3f45 | ||
|
f8d93f2c71 | ||
|
deefdc8e60 | ||
|
18d75e0792 | ||
|
cb4a000adb | ||
|
b79bf9c7a9 | ||
|
6728f159f0 | ||
|
bd3af2ee64 | ||
|
e694b0631f | ||
|
5d99cd6877 | ||
|
2206321ff9 | ||
|
7a4d2b8e3d | ||
|
0a4e36c68f | ||
|
8841cbbe82 | ||
|
5dcb287060 | ||
|
8b1de986f6 | ||
|
865723f267 | ||
|
ea82e98f8c | ||
|
3fd16e6261 | ||
|
a228545026 | ||
|
a05ca51c08 | ||
|
f82eb49301 | ||
|
e99eeefe44 | ||
|
d18f99dfc7 | ||
|
7c674dd1f1 | ||
|
2d554d29f2 | ||
|
51d6a7d53e | ||
|
ed167e53a5 | ||
|
35a447a263 | ||
|
2d08390d70 | ||
|
3b79fbabcd | ||
|
f3a9a76123 | ||
|
62f282a265 | ||
|
3bb7de8c7c | ||
|
0e8138349e | ||
|
b536ad09ca | ||
|
847d2ab5b3 | ||
|
54b04cc8e6 | ||
|
438f9edff6 | ||
|
07d3d57ded | ||
|
dd7e2925dd | ||
|
60517c9c09 | ||
|
e888760854 | ||
|
6a36b71fc2 | ||
|
5192713285 | ||
|
15ab4936d7 | ||
|
ad8a7819f2 | ||
|
f39579e09f | ||
|
eb4079597d | ||
|
704f581081 | ||
|
f05b381845 | ||
|
1c18c7f8ae | ||
|
194c5ab056 | ||
|
073eed9517 | ||
|
de1d5d5df5 | ||
|
7a2910d790 | ||
|
ebf55d32c1 | ||
|
b953b27a92 | ||
|
3f9d00e591 | ||
|
c558a43fd6 | ||
|
d32637d81b | ||
|
64483b4831 | ||
|
d6d700fc6d | ||
|
ef9832f148 | ||
|
45c0d2e1ce | ||
|
34c4b93c84 | ||
|
7d75a33331 | ||
|
5a4884a978 | ||
|
4f9590836c | ||
|
656a3adff7 | ||
|
49fab30496 | ||
|
6691abcdf0 | ||
|
c8cf49e5c4 | ||
|
3f8583a2c8 | ||
|
87433c30c7 | ||
|
c8b4ac814c | ||
|
adb8c563ed | ||
|
2f42bbaba7 | ||
|
14ddc1b517 | ||
|
02f9e90fdf | ||
|
655b8bb10b | ||
|
6cd5c67b69 | ||
|
593ec42ad1 | ||
|
df18cc632c | ||
|
af65860c5b | ||
|
432de54611 | ||
|
8750296918 | ||
|
ddd3926280 | ||
|
a0ab432f2f | ||
|
4212ae6fef | ||
|
d55df0b810 | ||
|
ea0d97c470 | ||
|
1eddca0a52 | ||
|
9cbcd06b1a | ||
|
5730bf2819 | ||
|
47abfa237e | ||
|
d8fdee7db8 | ||
|
6f48ae0b0f | ||
|
20e322f4bf | ||
|
ac2ef4af7c | ||
|
44469af34b | ||
|
833f7d11e8 | ||
|
62bb4fc806 | ||
|
4c9362d81f | ||
|
9f59149cfe | ||
|
a9c50fccf2 | ||
|
2b03d53438 | ||
|
a776e3f420 | ||
|
e85baa813f | ||
|
cbf8784d20 | ||
|
1fd762c106 | ||
|
e8dea1f35c | ||
|
882ee16f68 | ||
|
1e2bbc3b71 | ||
|
f2b5e9d5bb | ||
|
2a0039ba62 | ||
|
bdde6f6a03 | ||
|
2cfff0cb72 | ||
|
67c30426c1 | ||
|
0aa06bd378 | ||
|
c37b2e46b9 | ||
|
5b8c8c462d | ||
|
b107421acf | ||
|
b6acc4f749 | ||
|
4aed1ee339 | ||
|
4b9e932fd4 | ||
|
c9076a408c | ||
|
86e72f5ba9 | ||
|
82e756da83 | ||
|
c9917f4c83 | ||
|
d4b1724b36 | ||
|
3c8879f092 | ||
|
6c34e18bd4 | ||
|
6026a5091b | ||
|
b3da4cc092 | ||
|
c89a56d9fe | ||
|
a71ff76235 | ||
|
84b9ab7c1d | ||
|
72bc925491 | ||
|
66bf6b3f85 | ||
|
33503c57ef | ||
|
35fd14cf42 | ||
|
3f1b20841a | ||
|
f03c699159 | ||
|
8f104bb8d5 | ||
|
5217d01b77 | ||
|
d774cb219c | ||
|
1cdf7f83ff | ||
|
142757c61e | ||
|
da0c7723fa | ||
|
aa645d20df | ||
|
ec0a3f5085 | ||
|
e052ada0f6 | ||
|
747f77552a | ||
|
26e4576681 | ||
|
bc62a20a3e | ||
|
7f5555db2b | ||
|
27f3f34136 | ||
|
9c982053f4 | ||
|
bcc65c13a0 | ||
|
2e74d6cb53 | ||
|
4499dc81e2 | ||
|
b987fb188d | ||
|
7130609654 | ||
|
6781dc6243 | ||
|
86373dc63e | ||
|
823951ec55 | ||
|
37aea82b1c | ||
|
15a6667a70 | ||
|
0c850e2885 | ||
|
742585b59c | ||
|
f198abc7e4 | ||
|
5bb975a139 | ||
|
fa90b855b2 | ||
|
dc8176eb3a | ||
|
621fc1f1d7 | ||
|
37afcbeb92 | ||
|
b2f9c74ed1 | ||
|
1241a2cc10 | ||
|
ecfd958c84 | ||
|
07ebd23254 | ||
|
ba9cf9596b | ||
|
7f566fdb4c | ||
|
8222a48253 | ||
|
da181056a9 | ||
|
e3c8db61f3 | ||
|
8f5ea9d19b | ||
|
4a9bae0b39 | ||
|
5591fe6829 | ||
|
f0c7649b16 | ||
|
ddff6522fa | ||
|
503092b09a | ||
|
8f5d3d16cb | ||
|
f787869d8c | ||
|
2069dfeaef | ||
|
8765eddf2e | ||
|
7a58fde7a6 | ||
|
1bf95803f3 | ||
|
af46932b57 | ||
|
1ab84b6c65 | ||
|
7f0fdffd07 | ||
|
563b5c2000 | ||
|
b42f0665a8 | ||
|
5252885494 | ||
|
e2e7571035 | ||
|
02c7dbd255 | ||
|
06b149e220 | ||
|
9b89fcc0b0 | ||
|
dc26f3fc9b | ||
|
e5b0f5b95d | ||
|
4290cc1d6e | ||
|
3ec368014d | ||
|
65950805eb | ||
|
d16753eecd | ||
|
9972a101e6 | ||
|
5b97b99a01 | ||
|
47a65ad40e | ||
|
98773c4bb5 | ||
|
0d74bdaf0c | ||
|
c4468e0619 | ||
|
5d72ce061f | ||
|
5303afcd97 | ||
|
c2a35d40db | ||
|
15bdc85117 | ||
|
f621aba99b | ||
|
a979a2fea5 | ||
|
d1047c8b4c | ||
|
d7ae0bc372 | ||
|
5207928151 | ||
|
e5dc08f2db | ||
|
50a811a170 | ||
|
1a922870ea | ||
|
d30d66b907 | ||
|
11dfb58131 | ||
|
db98c48884 | ||
|
34f4053409 | ||
|
a6a5c8b06d | ||
|
5e549e7efe | ||
|
cdb56725d4 | ||
|
6e6d1b1ba8 | ||
|
eb32de2614 | ||
|
56201fe5a8 | ||
|
b2876c0c91 | ||
|
aef809f90c | ||
|
14f76b15c4 | ||
|
bb8a087949 | ||
|
e76dd4cd1a | ||
|
ece8d65217 | ||
|
e94efee946 | ||
|
0ad178c43d | ||
|
85ba68cc14 | ||
|
9888bb28ee | ||
|
538fdd2ae4 | ||
|
886e876c72 | ||
|
091ae7f172 | ||
|
778d4da9cc | ||
|
dbad65ded7 | ||
|
14e139ecdf | ||
|
275497c570 | ||
|
325b03ea84 | ||
|
5937f291c1 | ||
|
c0625a74ce | ||
|
e96bcdd64f | ||
|
623c4916df | ||
|
5ecc0f828e | ||
|
4c4954a3c1 | ||
|
097fb98f81 | ||
|
7a2adec4d0 | ||
|
6e17534c89 | ||
|
c91ffd5f23 | ||
|
a929adfd3b | ||
|
66e6e2d146 | ||
|
e8bb41d05c | ||
|
b05639dcac | ||
|
4f0ea1aca4 | ||
|
ed9b7b6295 | ||
|
2f2731e67e | ||
|
536cc64240 | ||
|
ef3604a085 | ||
|
f9f792eb04 | ||
|
960f5bc759 | ||
|
01ad508514 | ||
|
276e053803 | ||
|
e4274e3da1 | ||
|
b085e7c303 | ||
|
0035a0ce2e | ||
|
7c31e195db | ||
|
c03848b540 | ||
|
01edcf70f2 | ||
|
be9930d7be | ||
|
63b95ca452 | ||
|
7b8037f3aa | ||
|
17b67e17a3 | ||
|
7fcd6aa669 | ||
|
9244447cc4 | ||
|
a357c854c9 | ||
|
fac5735a3d | ||
|
f855058c35 | ||
|
2a2ac5c140 | ||
|
6ba01f64c1 | ||
|
3df9647ad9 | ||
|
99952bab30 | ||
|
b917458f47 | ||
|
2ab2d0fb25 | ||
|
92e89452f1 | ||
|
2c73ba88f2 | ||
|
da44a8bdc2 | ||
|
544382dd85 | ||
|
180b9955cc | ||
|
9f69ae7847 | ||
|
1dd061ad77 | ||
|
622d5c7650 | ||
|
77cf0d6519 | ||
|
a8624b22a7 | ||
|
7c1efc2fa6 | ||
|
cda4fc8225 | ||
|
fe0eb2f995 | ||
|
4420de89b6 | ||
|
a62b640f7d | ||
|
2a14c08e71 | ||
|
115318051c | ||
|
50012577f3 | ||
|
0514fbb2f3 | ||
|
bd0319a261 | ||
|
c0fb6bdde3 | ||
|
b53ce2f31c | ||
|
aa1c175687 | ||
|
0c57868908 | ||
|
4e3794dd1f | ||
|
64383e8349 | ||
|
68ae9f39b7 | ||
|
0089a9a854 | ||
|
21a3efcf48 | ||
|
1d874ce0f9 | ||
|
76e38a2177 | ||
|
cd10e998b6 | ||
|
60df34d477 | ||
|
10d15f79e5 | ||
|
ef1259342b | ||
|
58157be5ad | ||
|
68eca2b36f | ||
|
544a190ebf | ||
|
c4e2e4f630 | ||
|
28026c3e26 | ||
|
2c08d474a8 | ||
|
2a166623a6 | ||
|
5f061986b9 | ||
|
bf9382fb02 | ||
|
8d02c378ab | ||
|
26a4c83598 | ||
|
ff92a6eb5b | ||
|
161e26c2ec | ||
|
69a4594cb7 | ||
|
28b1317fd8 | ||
|
b0821e6d3a | ||
|
e7d4d41a30 | ||
|
12d364a9b0 | ||
|
b189169ed0 | ||
|
2b1101a4a6 | ||
|
3ae585b449 | ||
|
f0bc2865ff | ||
|
e7a6eaf5fe | ||
|
a6ac4f90d0 | ||
|
1b48de06c3 | ||
|
c769c26601 | ||
|
919934602f | ||
|
7825fb8788 | ||
|
ccff25b143 | ||
|
d2419bb2b8 | ||
|
52741004f6 | ||
|
8bd5251fd5 | ||
|
b720ece065 | ||
|
39db994790 | ||
|
529afa7138 | ||
|
57dc238d0e | ||
|
bfbae15c66 | ||
|
79594b40c0 | ||
|
4f470f5186 | ||
|
43f12f368b | ||
|
2cd1439c06 | ||
|
7c5d43eea0 | ||
|
7836bd502c | ||
|
9cc7407f2c | ||
|
25ce1e0e0a | ||
|
6264e39c34 | ||
|
e3e0cf8a0f | ||
|
4c90081b5b | ||
|
80b95a2b1f | ||
|
363b81c59c | ||
|
891cdf120a | ||
|
ea7bef318f | ||
|
06f484dcf9 | ||
|
7cc91eae7c | ||
|
59bf42f79e | ||
|
7a5f799193 | ||
|
74205c4a3c | ||
|
77293f9354 | ||
|
90bdb42702 | ||
|
9053c6da5f | ||
|
01a9604274 | ||
|
2eac989985 | ||
|
ccef8b2aa2 | ||
|
97254154ab | ||
|
4e7745cc1c | ||
|
4f8fb19994 | ||
|
b0bde21884 | ||
|
f942554cf3 | ||
|
e710f6dc56 | ||
|
6e4fd816c4 | ||
|
196cc875b2 | ||
|
b3e54f4a01 | ||
|
d32471f8c2 | ||
|
bc617fd42c | ||
|
badca4716f | ||
|
bf132bcb8d | ||
|
88e4a3a3d9 | ||
|
17e632929c | ||
|
e82846a9aa | ||
|
518faa19c1 | ||
|
5f8bf4368d | ||
|
c456a27725 | ||
|
192154fb17 | ||
|
081a27c358 | ||
|
dbbd2b1272 | ||
|
5cc1ea4773 | ||
|
7f892cedba | ||
|
efdf7442bb | ||
|
68c01e15a5 | ||
|
9abbad491a | ||
|
ec6928be34 | ||
|
d439f85bbf | ||
|
7604749871 | ||
|
cd46463eb1 | ||
|
45d5a4e7d2 | ||
|
7295a8262f | ||
|
4525eab077 | ||
|
ad898453b7 | ||
|
43f1d51b4b | ||
|
92f66a6134 | ||
|
816bf0c6a7 | ||
|
48516d3b85 | ||
|
706e542eb5 | ||
|
9d3f7a21a3 | ||
|
496f319970 | ||
|
9b26cb72d9 | ||
|
e7435fbe2f | ||
|
b7556a4980 | ||
|
c660f0e985 | ||
|
579ca9ee8d | ||
|
fcd5f3a8d9 | ||
|
1641aa7119 | ||
|
9d9f670d93 | ||
|
0db3c45f80 | ||
|
ed473d61e5 | ||
|
3d25f592fe | ||
|
f8fd38b560 | ||
|
e5241902f3 | ||
|
26b88e7658 | ||
|
db33b25e86 | ||
|
7f210563ab | ||
|
45fab74561 | ||
|
b30a872973 | ||
|
1c8e539a77 | ||
|
9bb04b1a6b | ||
|
fe0a563f81 | ||
|
f93b2fe7e6 | ||
|
2e3250fc90 | ||
|
aecbaaed0c | ||
|
a2b4af3a1a | ||
|
d200405471 | ||
|
ae685e54cb | ||
|
7788c71890 | ||
|
e2c1e9ef55 | ||
|
c1b24b09f4 | ||
|
f03398a246 | ||
|
b2afe39663 | ||
|
730069197f | ||
|
67a6b5e53f | ||
|
cf8d0933cb | ||
|
0a84cbadb7 | ||
|
ced144155e | ||
|
40d2687787 | ||
|
a22b2aea19 | ||
|
a9dd6221af | ||
|
430aae1b0d | ||
|
14a5b79e29 | ||
|
80dc8175a6 | ||
|
d14db25fee | ||
|
541a30c376 | ||
|
23748c483b | ||
|
9687e387d8 | ||
|
25b9939fed | ||
|
2de0d4c452 | ||
|
75041d5ea3 | ||
|
2f9e5483f6 | ||
|
295a925cef | ||
|
b36f55c5a5 | ||
|
5ecdf0eb9c | ||
|
4c1029971e | ||
|
3c51962cab | ||
|
e03a88ba21 | ||
|
0de21a6a7a | ||
|
c1d8f3b207 | ||
|
3493f18d78 | ||
|
02976a46c9 | ||
|
d255004289 | ||
|
b930733a67 | ||
|
59be2c6875 | ||
|
a9b5a1e506 | ||
|
b6aed803b2 | ||
|
c55cb6fa45 | ||
|
6908b65939 | ||
|
7bd9c32f14 | ||
|
e628753e7d | ||
|
dc99128343 | ||
|
ec2a102d84 | ||
|
70f2d9aaff |
@ -1,41 +0,0 @@
|
||||
# http://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
|
||||
# Docstrings and comments use max_line_length = 79
|
||||
[*.py]
|
||||
max_line_length = 119
|
||||
|
||||
# Use 2 spaces for the HTML files
|
||||
[*.html]
|
||||
indent_size = 2
|
||||
|
||||
# The JSON files contain newlines inconsistently
|
||||
[*.json]
|
||||
indent_size = 2
|
||||
insert_final_newline = ignore
|
||||
|
||||
[**/admin/js/vendor/**]
|
||||
indent_style = ignore
|
||||
indent_size = ignore
|
||||
|
||||
# Minified JavaScript files shouldn't be changed
|
||||
[**.min.js]
|
||||
indent_style = ignore
|
||||
insert_final_newline = ignore
|
||||
|
||||
# Makefiles always use tabs for indentation
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
# Batch files use tabs for indentation
|
||||
[*.bat]
|
||||
indent_style = tab
|
@ -1,4 +0,0 @@
|
||||
**/*.min.js
|
||||
**/vendor/**/*.js
|
||||
django/contrib/gis/templates/**/*.js
|
||||
node_modules/**.js
|
33
.eslintrc
33
.eslintrc
@ -1,33 +0,0 @@
|
||||
{
|
||||
"rules": {
|
||||
"camelcase": [0, {"properties": "always"}],
|
||||
"comma-spacing": [2, {"before": false, "after": true}],
|
||||
"dot-notation": [2, {"allowKeywords": true}],
|
||||
"curly": [2, "all"],
|
||||
"indent": [2, 4],
|
||||
"key-spacing": [2, {"beforeColon": false, "afterColon": true}],
|
||||
"new-cap": [0, {"newIsCap": true, "capIsNew": true}],
|
||||
"no-alert": [0],
|
||||
"no-eval": [2],
|
||||
"no-extend-native": [2, {"exceptions": ["Date", "String"]}],
|
||||
"no-multi-spaces": [2],
|
||||
"no-octal-escape": [2],
|
||||
"no-underscore-dangle": [2],
|
||||
"no-unused-vars": [2, {"vars": "local", "args": "none"}],
|
||||
"no-script-url": [2],
|
||||
"no-shadow": [2, {"hoist": "functions"}],
|
||||
"quotes": [0, "single"],
|
||||
"linebreak-style": [2, "unix"],
|
||||
"semi": [2, "always"],
|
||||
"space-before-blocks": [2, "always"],
|
||||
"space-before-function-paren": [2, {"anonymous": "never", "named": "never"}],
|
||||
"space-infix-ops": [2, {"int32Hint": false}],
|
||||
"strict": [1, "function"]
|
||||
},
|
||||
"env": {
|
||||
"browser": true
|
||||
},
|
||||
"globals": {
|
||||
"django": false
|
||||
}
|
||||
}
|
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1,7 +1,5 @@
|
||||
# Normalize line endings to avoid spurious failures in the core test suite on Windows.
|
||||
*html text eol=lf
|
||||
*css text eol=lf
|
||||
*js text eol=lf
|
||||
tests/staticfiles_tests/apps/test/static/test/*txt text eol=lf
|
||||
tests/staticfiles_tests/project/documents/test/*txt text eol=lf
|
||||
docs/releases/*.txt merge=union
|
||||
|
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,18 +1,10 @@
|
||||
# If you need to exclude files such as those generated by an IDE, use
|
||||
# $GIT_DIR/info/exclude or the core.excludesFile configuration variable as
|
||||
# described in https://git-scm.com/docs/gitignore
|
||||
|
||||
*.egg-info
|
||||
*.pot
|
||||
*.py[co]
|
||||
.tox/
|
||||
__pycache__
|
||||
MANIFEST
|
||||
dist/
|
||||
docs/_build/
|
||||
docs/locale/
|
||||
node_modules/
|
||||
tests/coverage_html/
|
||||
tests/.coverage
|
||||
build/
|
||||
tests/report/
|
||||
|
@ -4,12 +4,6 @@ syntax:glob
|
||||
*.pot
|
||||
*.py[co]
|
||||
__pycache__
|
||||
MANIFEST
|
||||
dist/
|
||||
docs/_build/
|
||||
docs/locale/
|
||||
node_modules/
|
||||
tests/coverage_html/
|
||||
tests/.coverage
|
||||
build/
|
||||
tests/report/
|
||||
|
18
.tx/config
18
.tx/config
@ -1,6 +1,6 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = sr@latin:sr_Latn, zh_CN:zh_Hans, zh_TW:zh_Hant
|
||||
lang_map = sr@latin:sr_Latn
|
||||
|
||||
[django.core]
|
||||
file_filter = django/conf/locale/<lang>/LC_MESSAGES/django.po
|
||||
@ -27,6 +27,11 @@ file_filter = django/contrib/auth/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/auth/locale/en/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
|
||||
[django.contrib-comments]
|
||||
file_filter = django/contrib/comments/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/comments/locale/en/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
|
||||
[django.contrib-contenttypes]
|
||||
file_filter = django/contrib/contenttypes/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po
|
||||
@ -37,6 +42,11 @@ file_filter = django/contrib/flatpages/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/flatpages/locale/en/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
|
||||
[django.contrib-formtools]
|
||||
file_filter = django/contrib/formtools/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/formtools/locale/en/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
|
||||
[django.contrib-gis]
|
||||
file_filter = django/contrib/gis/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/gis/locale/en/LC_MESSAGES/django.po
|
||||
@ -47,9 +57,9 @@ file_filter = django/contrib/humanize/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/humanize/locale/en/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
|
||||
[django.contrib-postgres]
|
||||
file_filter = django/contrib/postgres/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/postgres/locale/en/LC_MESSAGES/django.po
|
||||
[django.contrib-messages]
|
||||
file_filter = django/contrib/messages/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_file = django/contrib/messages/locale/en/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
|
||||
[django.contrib-redirects]
|
||||
|
@ -15,8 +15,7 @@ Extensive contribution guidelines are available in the repository at
|
||||
|
||||
https://docs.djangoproject.com/en/dev/internals/contributing/
|
||||
|
||||
**Warning: non-trivial pull requests (anything more than fixing a typo) without
|
||||
Trac tickets will be closed!** `Please file a ticket`__ to suggest changes.
|
||||
**Warning: pull requests are ignored!** `File a ticket`__ to suggest changes.
|
||||
|
||||
__ https://code.djangoproject.com/newticket
|
||||
|
||||
@ -24,9 +23,3 @@ Django uses Trac to keep track of bugs, feature requests, and associated
|
||||
patches because GitHub doesn't provide adequate tooling for its community.
|
||||
Patches can be submitted as pull requests, but if you don't file a ticket,
|
||||
it's unlikely that we'll notice your contribution.
|
||||
|
||||
Code of Conduct
|
||||
===============
|
||||
|
||||
As a contributor, you can help us keep the Django community open and inclusive.
|
||||
Please read and follow our `Code of Conduct <https://www.djangoproject.com/conduct/>`_.
|
||||
|
13
Gruntfile.js
13
Gruntfile.js
@ -1,13 +0,0 @@
|
||||
var globalThreshold = 50; // Global code coverage threshold (as a percentage)
|
||||
|
||||
module.exports = function(grunt) {
|
||||
grunt.initConfig({
|
||||
qunit: {
|
||||
all: ['js_tests/tests.html']
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-qunit');
|
||||
grunt.registerTask('test', ['qunit']);
|
||||
grunt.registerTask('default', ['test']);
|
||||
};
|
3
INSTALL
3
INSTALL
@ -1,6 +1,6 @@
|
||||
Thanks for downloading Django.
|
||||
|
||||
To install it, make sure you have Python 2.7 or greater installed. Then run
|
||||
To install it, make sure you have Python 2.6 or greater installed. Then run
|
||||
this command from the command prompt:
|
||||
|
||||
python setup.py install
|
||||
@ -12,6 +12,7 @@ site-packages directory, which is located wherever your Python installation
|
||||
lives. Some places you might check are:
|
||||
|
||||
/usr/lib/python2.7/site-packages (Unix, Python 2.7)
|
||||
/usr/lib/python2.6/site-packages (Unix, Python 2.6)
|
||||
C:\\PYTHON\site-packages (Windows)
|
||||
|
||||
For more detailed instructions, see docs/intro/install.txt.
|
||||
|
6
LICENSE
6
LICENSE
@ -4,10 +4,10 @@ All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
|
255
LICENSE.python
255
LICENSE.python
@ -1,255 +0,0 @@
|
||||
A. HISTORY OF THE SOFTWARE
|
||||
==========================
|
||||
|
||||
Python was created in the early 1990s by Guido van Rossum at Stichting
|
||||
Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
|
||||
as a successor of a language called ABC. Guido remains Python's
|
||||
principal author, although it includes many contributions from others.
|
||||
|
||||
In 1995, Guido continued his work on Python at the Corporation for
|
||||
National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
|
||||
in Reston, Virginia where he released several versions of the
|
||||
software.
|
||||
|
||||
In May 2000, Guido and the Python core development team moved to
|
||||
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
|
||||
year, the PythonLabs team moved to Digital Creations (now Zope
|
||||
Corporation, see http://www.zope.com). In 2001, the Python Software
|
||||
Foundation (PSF, see http://www.python.org/psf/) was formed, a
|
||||
non-profit organization created specifically to own Python-related
|
||||
Intellectual Property. Zope Corporation is a sponsoring member of
|
||||
the PSF.
|
||||
|
||||
All Python releases are Open Source (see http://www.opensource.org for
|
||||
the Open Source Definition). Historically, most, but not all, Python
|
||||
releases have also been GPL-compatible; the table below summarizes
|
||||
the various releases.
|
||||
|
||||
Release Derived Year Owner GPL-
|
||||
from compatible? (1)
|
||||
|
||||
0.9.0 thru 1.2 1991-1995 CWI yes
|
||||
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
|
||||
1.6 1.5.2 2000 CNRI no
|
||||
2.0 1.6 2000 BeOpen.com no
|
||||
1.6.1 1.6 2001 CNRI yes (2)
|
||||
2.1 2.0+1.6.1 2001 PSF no
|
||||
2.0.1 2.0+1.6.1 2001 PSF yes
|
||||
2.1.1 2.1+2.0.1 2001 PSF yes
|
||||
2.1.2 2.1.1 2002 PSF yes
|
||||
2.1.3 2.1.2 2002 PSF yes
|
||||
2.2 and above 2.1.1 2001-now PSF yes
|
||||
|
||||
Footnotes:
|
||||
|
||||
(1) GPL-compatible doesn't mean that we're distributing Python under
|
||||
the GPL. All Python licenses, unlike the GPL, let you distribute
|
||||
a modified version without making your changes open source. The
|
||||
GPL-compatible licenses make it possible to combine Python with
|
||||
other software that is released under the GPL; the others don't.
|
||||
|
||||
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
|
||||
because its license has a choice of law clause. According to
|
||||
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
|
||||
is "not incompatible" with the GPL.
|
||||
|
||||
Thanks to the many outside volunteers who have worked under Guido's
|
||||
direction to make these releases possible.
|
||||
|
||||
|
||||
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
|
||||
===============================================================
|
||||
|
||||
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||
--------------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||
otherwise using this software ("Python") in source or binary form and
|
||||
its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
||||
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
||||
analyze, test, perform and/or display publicly, prepare derivative works,
|
||||
distribute, and otherwise use Python alone or in any derivative version,
|
||||
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
||||
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights
|
||||
Reserved" are retained in Python alone or in any derivative version prepared by
|
||||
Licensee.
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python.
|
||||
|
||||
4. PSF is making Python available to Licensee on an "AS IS"
|
||||
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. Nothing in this License Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between PSF and
|
||||
Licensee. This License Agreement does not grant permission to use PSF
|
||||
trademarks or trade name in a trademark sense to endorse or promote
|
||||
products or services of Licensee, or any third party.
|
||||
|
||||
8. By copying, installing or otherwise using Python, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
|
||||
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
|
||||
-------------------------------------------
|
||||
|
||||
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
|
||||
|
||||
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
|
||||
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
|
||||
Individual or Organization ("Licensee") accessing and otherwise using
|
||||
this software in source or binary form and its associated
|
||||
documentation ("the Software").
|
||||
|
||||
2. Subject to the terms and conditions of this BeOpen Python License
|
||||
Agreement, BeOpen hereby grants Licensee a non-exclusive,
|
||||
royalty-free, world-wide license to reproduce, analyze, test, perform
|
||||
and/or display publicly, prepare derivative works, distribute, and
|
||||
otherwise use the Software alone or in any derivative version,
|
||||
provided, however, that the BeOpen Python License is retained in the
|
||||
Software, alone or in any derivative version prepared by Licensee.
|
||||
|
||||
3. BeOpen is making the Software available to Licensee on an "AS IS"
|
||||
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
|
||||
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
|
||||
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
|
||||
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
5. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
6. This License Agreement shall be governed by and interpreted in all
|
||||
respects by the law of the State of California, excluding conflict of
|
||||
law provisions. Nothing in this License Agreement shall be deemed to
|
||||
create any relationship of agency, partnership, or joint venture
|
||||
between BeOpen and Licensee. This License Agreement does not grant
|
||||
permission to use BeOpen trademarks or trade names in a trademark
|
||||
sense to endorse or promote products or services of Licensee, or any
|
||||
third party. As an exception, the "BeOpen Python" logos available at
|
||||
http://www.pythonlabs.com/logos.html may be used according to the
|
||||
permissions granted on that web page.
|
||||
|
||||
7. By copying, installing or otherwise using the software, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
|
||||
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
|
||||
---------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Corporation for National
|
||||
Research Initiatives, having an office at 1895 Preston White Drive,
|
||||
Reston, VA 20191 ("CNRI"), and the Individual or Organization
|
||||
("Licensee") accessing and otherwise using Python 1.6.1 software in
|
||||
source or binary form and its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, CNRI
|
||||
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||
license to reproduce, analyze, test, perform and/or display publicly,
|
||||
prepare derivative works, distribute, and otherwise use Python 1.6.1
|
||||
alone or in any derivative version, provided, however, that CNRI's
|
||||
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
|
||||
1995-2001 Corporation for National Research Initiatives; All Rights
|
||||
Reserved" are retained in Python 1.6.1 alone or in any derivative
|
||||
version prepared by Licensee. Alternately, in lieu of CNRI's License
|
||||
Agreement, Licensee may substitute the following text (omitting the
|
||||
quotes): "Python 1.6.1 is made available subject to the terms and
|
||||
conditions in CNRI's License Agreement. This Agreement together with
|
||||
Python 1.6.1 may be located on the Internet using the following
|
||||
unique, persistent identifier (known as a handle): 1895.22/1013. This
|
||||
Agreement may also be obtained from a proxy server on the Internet
|
||||
using the following URL: http://hdl.handle.net/1895.22/1013".
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python 1.6.1 or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python 1.6.1.
|
||||
|
||||
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
|
||||
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. This License Agreement shall be governed by the federal
|
||||
intellectual property law of the United States, including without
|
||||
limitation the federal copyright law, and, to the extent such
|
||||
U.S. federal law does not apply, by the law of the Commonwealth of
|
||||
Virginia, excluding Virginia's conflict of law provisions.
|
||||
Notwithstanding the foregoing, with regard to derivative works based
|
||||
on Python 1.6.1 that incorporate non-separable material that was
|
||||
previously distributed under the GNU General Public License (GPL), the
|
||||
law of the Commonwealth of Virginia shall govern this License
|
||||
Agreement only as to issues arising under or with respect to
|
||||
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
|
||||
License Agreement shall be deemed to create any relationship of
|
||||
agency, partnership, or joint venture between CNRI and Licensee. This
|
||||
License Agreement does not grant permission to use CNRI trademarks or
|
||||
trade name in a trademark sense to endorse or promote products or
|
||||
services of Licensee, or any third party.
|
||||
|
||||
8. By clicking on the "ACCEPT" button where indicated, or by copying,
|
||||
installing or otherwise using Python 1.6.1, Licensee agrees to be
|
||||
bound by the terms and conditions of this License Agreement.
|
||||
|
||||
ACCEPT
|
||||
|
||||
|
||||
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
|
||||
--------------------------------------------------
|
||||
|
||||
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
|
||||
The Netherlands. All rights reserved.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the name of Stichting Mathematisch
|
||||
Centrum or CWI not be used in advertising or publicity pertaining to
|
||||
distribution of the software without specific, written prior
|
||||
permission.
|
||||
|
||||
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
||||
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
46
MANIFEST.in
46
MANIFEST.in
@ -1,17 +1,37 @@
|
||||
include README.rst
|
||||
include AUTHORS
|
||||
include Gruntfile.js
|
||||
include INSTALL
|
||||
include LICENSE
|
||||
include LICENSE.python
|
||||
include MANIFEST.in
|
||||
include package.json
|
||||
include *.rst
|
||||
graft django
|
||||
prune django/contrib/admin/bin
|
||||
graft docs
|
||||
graft extras
|
||||
graft js_tests
|
||||
graft scripts
|
||||
graft tests
|
||||
global-exclude __pycache__
|
||||
global-exclude *.py[co]
|
||||
include django/contrib/gis/gdal/LICENSE
|
||||
include django/contrib/gis/geos/LICENSE
|
||||
include django/dispatch/license.txt
|
||||
recursive-include docs *
|
||||
recursive-include scripts *
|
||||
recursive-include extras *
|
||||
recursive-include tests *
|
||||
recursive-include django/conf/app_template *
|
||||
recursive-include django/conf/locale *
|
||||
recursive-include django/conf/project_template *
|
||||
recursive-include django/contrib/*/locale *
|
||||
recursive-include django/contrib/admin/templates *
|
||||
recursive-include django/contrib/admin/static *
|
||||
recursive-include django/contrib/admindocs/templates *
|
||||
recursive-include django/contrib/auth/fixtures *
|
||||
recursive-include django/contrib/auth/templates *
|
||||
recursive-include django/contrib/auth/tests/templates *
|
||||
recursive-include django/contrib/comments/templates *
|
||||
recursive-include django/contrib/formtools/templates *
|
||||
recursive-include django/contrib/formtools/tests/templates *
|
||||
recursive-include django/contrib/flatpages/fixtures *
|
||||
recursive-include django/contrib/flatpages/tests/templates *
|
||||
recursive-include django/contrib/gis/templates *
|
||||
recursive-include django/contrib/gis/tests/data *
|
||||
recursive-include django/contrib/gis/tests/distapp/fixtures *
|
||||
recursive-include django/contrib/gis/tests/geoapp/fixtures *
|
||||
recursive-include django/contrib/gis/tests/geogapp/fixtures *
|
||||
recursive-include django/contrib/gis/tests/relatedapp/fixtures *
|
||||
recursive-include django/contrib/sitemaps/templates *
|
||||
recursive-include django/contrib/sitemaps/tests/templates *
|
||||
recursive-exclude * __pycache__
|
||||
recursive-exclude * *.py[co]
|
||||
|
42
README.rst
42
README.rst
@ -1,43 +1,45 @@
|
||||
Django is a high-level Python Web framework that encourages rapid development
|
||||
and clean, pragmatic design. Thanks for checking it out.
|
||||
|
||||
All documentation is in the "``docs``" directory and online at
|
||||
https://docs.djangoproject.com/en/stable/. If you're just getting started,
|
||||
here's how we recommend you read the docs:
|
||||
All documentation is in the "docs" directory and online at
|
||||
http://docs.djangoproject.com/en/dev/. If you're just getting started, here's
|
||||
how we recommend you read the docs:
|
||||
|
||||
* First, read ``docs/intro/install.txt`` for instructions on installing Django.
|
||||
* First, read docs/intro/install.txt for instructions on installing Django.
|
||||
|
||||
* Next, work through the tutorials in order (``docs/intro/tutorial01.txt``,
|
||||
``docs/intro/tutorial02.txt``, etc.).
|
||||
* Next, work through the tutorials in order (docs/intro/tutorial01.txt,
|
||||
docs/intro/tutorial02.txt, etc.).
|
||||
|
||||
* If you want to set up an actual deployment server, read
|
||||
``docs/howto/deployment/index.txt`` for instructions.
|
||||
docs/howto/deployment/index.txt for instructions.
|
||||
|
||||
* You'll probably want to read through the topical guides (in ``docs/topics``)
|
||||
next; from there you can jump to the HOWTOs (in ``docs/howto``) for specific
|
||||
problems, and check out the reference (``docs/ref``) for gory details.
|
||||
* You'll probably want to read through the topical guides (in docs/topics)
|
||||
next; from there you can jump to the HOWTOs (in docs/howto) for specific
|
||||
problems, and check out the reference (docs/ref) for gory details.
|
||||
|
||||
* See ``docs/README`` for instructions on building an HTML version of the docs.
|
||||
* See docs/README for instructions on building an HTML version of the docs.
|
||||
|
||||
Docs are updated rigorously. If you find any problems in the docs, or think
|
||||
they should be clarified in any way, please take 30 seconds to fill out a
|
||||
ticket here: https://code.djangoproject.com/newticket
|
||||
Docs are updated rigorously. If you find any problems in the docs, or think they
|
||||
should be clarified in any way, please take 30 seconds to fill out a ticket
|
||||
here:
|
||||
|
||||
http://code.djangoproject.com/newticket
|
||||
|
||||
To get more help:
|
||||
|
||||
* Join the ``#django`` channel on irc.freenode.net. Lots of helpful people hang out
|
||||
there. Read the archives at https://botbot.me/freenode/django/.
|
||||
* Join the #django channel on irc.freenode.net. Lots of helpful people hang out
|
||||
there. Read the archives at http://django-irc-logs.com/.
|
||||
|
||||
* Join the django-users mailing list, or read the archives, at
|
||||
https://groups.google.com/group/django-users.
|
||||
http://groups.google.com/group/django-users.
|
||||
|
||||
To contribute to Django:
|
||||
|
||||
* Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for
|
||||
information about getting involved.
|
||||
* Check out http://www.djangoproject.com/community/ for information about
|
||||
getting involved.
|
||||
|
||||
To run Django's test suite:
|
||||
|
||||
* Follow the instructions in the "Unit tests" section of
|
||||
``docs/internals/contributing/writing-code/unit-tests.txt``, published online at
|
||||
docs/internals/contributing/writing-code/unit-tests.txt, published online at
|
||||
https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests
|
||||
|
@ -1,27 +1,7 @@
|
||||
from __future__ import unicode_literals
|
||||
VERSION = (1, 6, 12, 'alpha', 0)
|
||||
|
||||
from django.utils.version import get_version
|
||||
|
||||
VERSION = (1, 11, 30, 'alpha', 0)
|
||||
|
||||
__version__ = get_version(VERSION)
|
||||
|
||||
|
||||
def setup(set_prefix=True):
|
||||
"""
|
||||
Configure the settings (this happens as a side effect of accessing the
|
||||
first setting), configure logging and populate the app registry.
|
||||
Set the thread-local urlresolvers script prefix if `set_prefix` is True.
|
||||
"""
|
||||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
from django.urls import set_script_prefix
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.log import configure_logging
|
||||
|
||||
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
|
||||
if set_prefix:
|
||||
set_script_prefix(
|
||||
'/' if settings.FORCE_SCRIPT_NAME is None else force_text(settings.FORCE_SCRIPT_NAME)
|
||||
)
|
||||
apps.populate(settings.INSTALLED_APPS)
|
||||
def get_version(*args, **kwargs):
|
||||
# Don't litter django/__init__.py with all the get_version stuff.
|
||||
# Only import if it's actually called.
|
||||
from django.utils.version import get_version
|
||||
return get_version(*args, **kwargs)
|
||||
|
@ -1,9 +0,0 @@
|
||||
"""
|
||||
Invokes django-admin when the django module is run as a script.
|
||||
|
||||
Example: python -m django check
|
||||
"""
|
||||
from django.core import management
|
||||
|
||||
if __name__ == "__main__":
|
||||
management.execute_from_command_line()
|
@ -1,4 +0,0 @@
|
||||
from .config import AppConfig
|
||||
from .registry import apps
|
||||
|
||||
__all__ = ['AppConfig', 'apps']
|
@ -1,207 +0,0 @@
|
||||
import os
|
||||
from importlib import import_module
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.utils._os import upath
|
||||
from django.utils.module_loading import module_has_submodule
|
||||
|
||||
MODELS_MODULE_NAME = 'models'
|
||||
|
||||
|
||||
class AppConfig(object):
|
||||
"""
|
||||
Class representing a Django application and its configuration.
|
||||
"""
|
||||
|
||||
def __init__(self, app_name, app_module):
|
||||
# Full Python path to the application eg. 'django.contrib.admin'.
|
||||
self.name = app_name
|
||||
|
||||
# Root module for the application eg. <module 'django.contrib.admin'
|
||||
# from 'django/contrib/admin/__init__.pyc'>.
|
||||
self.module = app_module
|
||||
|
||||
# Reference to the Apps registry that holds this AppConfig. Set by the
|
||||
# registry when it registers the AppConfig instance.
|
||||
self.apps = None
|
||||
|
||||
# The following attributes could be defined at the class level in a
|
||||
# subclass, hence the test-and-set pattern.
|
||||
|
||||
# Last component of the Python path to the application eg. 'admin'.
|
||||
# This value must be unique across a Django project.
|
||||
if not hasattr(self, 'label'):
|
||||
self.label = app_name.rpartition(".")[2]
|
||||
|
||||
# Human-readable name for the application eg. "Admin".
|
||||
if not hasattr(self, 'verbose_name'):
|
||||
self.verbose_name = self.label.title()
|
||||
|
||||
# Filesystem path to the application directory eg.
|
||||
# u'/usr/lib/python2.7/dist-packages/django/contrib/admin'. Unicode on
|
||||
# Python 2 and a str on Python 3.
|
||||
if not hasattr(self, 'path'):
|
||||
self.path = self._path_from_module(app_module)
|
||||
|
||||
# Module containing models eg. <module 'django.contrib.admin.models'
|
||||
# from 'django/contrib/admin/models.pyc'>. Set by import_models().
|
||||
# None if the application doesn't have a models module.
|
||||
self.models_module = None
|
||||
|
||||
# Mapping of lower case model names to model classes. Initially set to
|
||||
# None to prevent accidental access before import_models() runs.
|
||||
self.models = None
|
||||
|
||||
def __repr__(self):
|
||||
return '<%s: %s>' % (self.__class__.__name__, self.label)
|
||||
|
||||
def _path_from_module(self, module):
|
||||
"""Attempt to determine app's filesystem path from its module."""
|
||||
# See #21874 for extended discussion of the behavior of this method in
|
||||
# various cases.
|
||||
# Convert paths to list because Python 3's _NamespacePath does not
|
||||
# support indexing.
|
||||
paths = list(getattr(module, '__path__', []))
|
||||
if len(paths) != 1:
|
||||
filename = getattr(module, '__file__', None)
|
||||
if filename is not None:
|
||||
paths = [os.path.dirname(filename)]
|
||||
else:
|
||||
# For unknown reasons, sometimes the list returned by __path__
|
||||
# contains duplicates that must be removed (#25246).
|
||||
paths = list(set(paths))
|
||||
if len(paths) > 1:
|
||||
raise ImproperlyConfigured(
|
||||
"The app module %r has multiple filesystem locations (%r); "
|
||||
"you must configure this app with an AppConfig subclass "
|
||||
"with a 'path' class attribute." % (module, paths))
|
||||
elif not paths:
|
||||
raise ImproperlyConfigured(
|
||||
"The app module %r has no filesystem location, "
|
||||
"you must configure this app with an AppConfig subclass "
|
||||
"with a 'path' class attribute." % (module,))
|
||||
return upath(paths[0])
|
||||
|
||||
@classmethod
|
||||
def create(cls, entry):
|
||||
"""
|
||||
Factory that creates an app config from an entry in INSTALLED_APPS.
|
||||
"""
|
||||
try:
|
||||
# If import_module succeeds, entry is a path to an app module,
|
||||
# which may specify an app config class with default_app_config.
|
||||
# Otherwise, entry is a path to an app config class or an error.
|
||||
module = import_module(entry)
|
||||
|
||||
except ImportError:
|
||||
# Track that importing as an app module failed. If importing as an
|
||||
# app config class fails too, we'll trigger the ImportError again.
|
||||
module = None
|
||||
|
||||
mod_path, _, cls_name = entry.rpartition('.')
|
||||
|
||||
# Raise the original exception when entry cannot be a path to an
|
||||
# app config class.
|
||||
if not mod_path:
|
||||
raise
|
||||
|
||||
else:
|
||||
try:
|
||||
# If this works, the app module specifies an app config class.
|
||||
entry = module.default_app_config
|
||||
except AttributeError:
|
||||
# Otherwise, it simply uses the default app config class.
|
||||
return cls(entry, module)
|
||||
else:
|
||||
mod_path, _, cls_name = entry.rpartition('.')
|
||||
|
||||
# If we're reaching this point, we must attempt to load the app config
|
||||
# class located at <mod_path>.<cls_name>
|
||||
mod = import_module(mod_path)
|
||||
try:
|
||||
cls = getattr(mod, cls_name)
|
||||
except AttributeError:
|
||||
if module is None:
|
||||
# If importing as an app module failed, that error probably
|
||||
# contains the most informative traceback. Trigger it again.
|
||||
import_module(entry)
|
||||
else:
|
||||
raise
|
||||
|
||||
# Check for obvious errors. (This check prevents duck typing, but
|
||||
# it could be removed if it became a problem in practice.)
|
||||
if not issubclass(cls, AppConfig):
|
||||
raise ImproperlyConfigured(
|
||||
"'%s' isn't a subclass of AppConfig." % entry)
|
||||
|
||||
# Obtain app name here rather than in AppClass.__init__ to keep
|
||||
# all error checking for entries in INSTALLED_APPS in one place.
|
||||
try:
|
||||
app_name = cls.name
|
||||
except AttributeError:
|
||||
raise ImproperlyConfigured(
|
||||
"'%s' must supply a name attribute." % entry)
|
||||
|
||||
# Ensure app_name points to a valid module.
|
||||
try:
|
||||
app_module = import_module(app_name)
|
||||
except ImportError:
|
||||
raise ImproperlyConfigured(
|
||||
"Cannot import '%s'. Check that '%s.%s.name' is correct." % (
|
||||
app_name, mod_path, cls_name,
|
||||
)
|
||||
)
|
||||
|
||||
# Entry is a path to an app config class.
|
||||
return cls(app_name, app_module)
|
||||
|
||||
def get_model(self, model_name, require_ready=True):
|
||||
"""
|
||||
Returns the model with the given case-insensitive model_name.
|
||||
|
||||
Raises LookupError if no model exists with this name.
|
||||
"""
|
||||
if require_ready:
|
||||
self.apps.check_models_ready()
|
||||
else:
|
||||
self.apps.check_apps_ready()
|
||||
try:
|
||||
return self.models[model_name.lower()]
|
||||
except KeyError:
|
||||
raise LookupError(
|
||||
"App '%s' doesn't have a '%s' model." % (self.label, model_name))
|
||||
|
||||
def get_models(self, include_auto_created=False, include_swapped=False):
|
||||
"""
|
||||
Returns an iterable of models.
|
||||
|
||||
By default, the following models aren't included:
|
||||
|
||||
- auto-created models for many-to-many relations without
|
||||
an explicit intermediate table,
|
||||
- models that have been swapped out.
|
||||
|
||||
Set the corresponding keyword argument to True to include such models.
|
||||
Keyword arguments aren't documented; they're a private API.
|
||||
"""
|
||||
self.apps.check_models_ready()
|
||||
for model in self.models.values():
|
||||
if model._meta.auto_created and not include_auto_created:
|
||||
continue
|
||||
if model._meta.swapped and not include_swapped:
|
||||
continue
|
||||
yield model
|
||||
|
||||
def import_models(self):
|
||||
# Dictionary of models for this app, primarily maintained in the
|
||||
# 'all_models' attribute of the Apps this AppConfig is attached to.
|
||||
self.models = self.apps.all_models[self.label]
|
||||
|
||||
if module_has_submodule(self.module, MODELS_MODULE_NAME):
|
||||
models_module_name = '%s.%s' % (self.name, MODELS_MODULE_NAME)
|
||||
self.models_module = import_module(models_module_name)
|
||||
|
||||
def ready(self):
|
||||
"""
|
||||
Override this method in subclasses to run code when Django starts.
|
||||
"""
|
@ -1,425 +0,0 @@
|
||||
import sys
|
||||
import threading
|
||||
import warnings
|
||||
from collections import Counter, OrderedDict, defaultdict
|
||||
from functools import partial
|
||||
|
||||
from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured
|
||||
from django.utils import lru_cache
|
||||
|
||||
from .config import AppConfig
|
||||
|
||||
|
||||
class Apps(object):
|
||||
"""
|
||||
A registry that stores the configuration of installed applications.
|
||||
|
||||
It also keeps track of models eg. to provide reverse-relations.
|
||||
"""
|
||||
|
||||
def __init__(self, installed_apps=()):
|
||||
# installed_apps is set to None when creating the master registry
|
||||
# because it cannot be populated at that point. Other registries must
|
||||
# provide a list of installed apps and are populated immediately.
|
||||
if installed_apps is None and hasattr(sys.modules[__name__], 'apps'):
|
||||
raise RuntimeError("You must supply an installed_apps argument.")
|
||||
|
||||
# Mapping of app labels => model names => model classes. Every time a
|
||||
# model is imported, ModelBase.__new__ calls apps.register_model which
|
||||
# creates an entry in all_models. All imported models are registered,
|
||||
# regardless of whether they're defined in an installed application
|
||||
# and whether the registry has been populated. Since it isn't possible
|
||||
# to reimport a module safely (it could reexecute initialization code)
|
||||
# all_models is never overridden or reset.
|
||||
self.all_models = defaultdict(OrderedDict)
|
||||
|
||||
# Mapping of labels to AppConfig instances for installed apps.
|
||||
self.app_configs = OrderedDict()
|
||||
|
||||
# Stack of app_configs. Used to store the current state in
|
||||
# set_available_apps and set_installed_apps.
|
||||
self.stored_app_configs = []
|
||||
|
||||
# Whether the registry is populated.
|
||||
self.apps_ready = self.models_ready = self.ready = False
|
||||
|
||||
# Lock for thread-safe population.
|
||||
self._lock = threading.Lock()
|
||||
|
||||
# Maps ("app_label", "modelname") tuples to lists of functions to be
|
||||
# called when the corresponding model is ready. Used by this class's
|
||||
# `lazy_model_operation()` and `do_pending_operations()` methods.
|
||||
self._pending_operations = defaultdict(list)
|
||||
|
||||
# Populate apps and models, unless it's the master registry.
|
||||
if installed_apps is not None:
|
||||
self.populate(installed_apps)
|
||||
|
||||
def populate(self, installed_apps=None):
|
||||
"""
|
||||
Loads application configurations and models.
|
||||
|
||||
This method imports each application module and then each model module.
|
||||
|
||||
It is thread safe and idempotent, but not reentrant.
|
||||
"""
|
||||
if self.ready:
|
||||
return
|
||||
|
||||
# populate() might be called by two threads in parallel on servers
|
||||
# that create threads before initializing the WSGI callable.
|
||||
with self._lock:
|
||||
if self.ready:
|
||||
return
|
||||
|
||||
# app_config should be pristine, otherwise the code below won't
|
||||
# guarantee that the order matches the order in INSTALLED_APPS.
|
||||
if self.app_configs:
|
||||
raise RuntimeError("populate() isn't reentrant")
|
||||
|
||||
# Phase 1: initialize app configs and import app modules.
|
||||
for entry in installed_apps:
|
||||
if isinstance(entry, AppConfig):
|
||||
app_config = entry
|
||||
else:
|
||||
app_config = AppConfig.create(entry)
|
||||
if app_config.label in self.app_configs:
|
||||
raise ImproperlyConfigured(
|
||||
"Application labels aren't unique, "
|
||||
"duplicates: %s" % app_config.label)
|
||||
|
||||
self.app_configs[app_config.label] = app_config
|
||||
app_config.apps = self
|
||||
|
||||
# Check for duplicate app names.
|
||||
counts = Counter(
|
||||
app_config.name for app_config in self.app_configs.values())
|
||||
duplicates = [
|
||||
name for name, count in counts.most_common() if count > 1]
|
||||
if duplicates:
|
||||
raise ImproperlyConfigured(
|
||||
"Application names aren't unique, "
|
||||
"duplicates: %s" % ", ".join(duplicates))
|
||||
|
||||
self.apps_ready = True
|
||||
|
||||
# Phase 2: import models modules.
|
||||
for app_config in self.app_configs.values():
|
||||
app_config.import_models()
|
||||
|
||||
self.clear_cache()
|
||||
|
||||
self.models_ready = True
|
||||
|
||||
# Phase 3: run ready() methods of app configs.
|
||||
for app_config in self.get_app_configs():
|
||||
app_config.ready()
|
||||
|
||||
self.ready = True
|
||||
|
||||
def check_apps_ready(self):
|
||||
"""
|
||||
Raises an exception if all apps haven't been imported yet.
|
||||
"""
|
||||
if not self.apps_ready:
|
||||
raise AppRegistryNotReady("Apps aren't loaded yet.")
|
||||
|
||||
def check_models_ready(self):
|
||||
"""
|
||||
Raises an exception if all models haven't been imported yet.
|
||||
"""
|
||||
if not self.models_ready:
|
||||
raise AppRegistryNotReady("Models aren't loaded yet.")
|
||||
|
||||
def get_app_configs(self):
|
||||
"""
|
||||
Imports applications and returns an iterable of app configs.
|
||||
"""
|
||||
self.check_apps_ready()
|
||||
return self.app_configs.values()
|
||||
|
||||
def get_app_config(self, app_label):
|
||||
"""
|
||||
Imports applications and returns an app config for the given label.
|
||||
|
||||
Raises LookupError if no application exists with this label.
|
||||
"""
|
||||
self.check_apps_ready()
|
||||
try:
|
||||
return self.app_configs[app_label]
|
||||
except KeyError:
|
||||
message = "No installed app with label '%s'." % app_label
|
||||
for app_config in self.get_app_configs():
|
||||
if app_config.name == app_label:
|
||||
message += " Did you mean '%s'?" % app_config.label
|
||||
break
|
||||
raise LookupError(message)
|
||||
|
||||
# This method is performance-critical at least for Django's test suite.
|
||||
@lru_cache.lru_cache(maxsize=None)
|
||||
def get_models(self, include_auto_created=False, include_swapped=False):
|
||||
"""
|
||||
Returns a list of all installed models.
|
||||
|
||||
By default, the following models aren't included:
|
||||
|
||||
- auto-created models for many-to-many relations without
|
||||
an explicit intermediate table,
|
||||
- models that have been swapped out.
|
||||
|
||||
Set the corresponding keyword argument to True to include such models.
|
||||
"""
|
||||
self.check_models_ready()
|
||||
|
||||
result = []
|
||||
for app_config in self.app_configs.values():
|
||||
result.extend(list(app_config.get_models(include_auto_created, include_swapped)))
|
||||
return result
|
||||
|
||||
def get_model(self, app_label, model_name=None, require_ready=True):
|
||||
"""
|
||||
Returns the model matching the given app_label and model_name.
|
||||
|
||||
As a shortcut, this function also accepts a single argument in the
|
||||
form <app_label>.<model_name>.
|
||||
|
||||
model_name is case-insensitive.
|
||||
|
||||
Raises LookupError if no application exists with this label, or no
|
||||
model exists with this name in the application. Raises ValueError if
|
||||
called with a single argument that doesn't contain exactly one dot.
|
||||
"""
|
||||
if require_ready:
|
||||
self.check_models_ready()
|
||||
else:
|
||||
self.check_apps_ready()
|
||||
|
||||
if model_name is None:
|
||||
app_label, model_name = app_label.split('.')
|
||||
|
||||
app_config = self.get_app_config(app_label)
|
||||
|
||||
if not require_ready and app_config.models is None:
|
||||
app_config.import_models()
|
||||
|
||||
return app_config.get_model(model_name, require_ready=require_ready)
|
||||
|
||||
def register_model(self, app_label, model):
|
||||
# Since this method is called when models are imported, it cannot
|
||||
# perform imports because of the risk of import loops. It mustn't
|
||||
# call get_app_config().
|
||||
model_name = model._meta.model_name
|
||||
app_models = self.all_models[app_label]
|
||||
if model_name in app_models:
|
||||
if (model.__name__ == app_models[model_name].__name__ and
|
||||
model.__module__ == app_models[model_name].__module__):
|
||||
warnings.warn(
|
||||
"Model '%s.%s' was already registered. "
|
||||
"Reloading models is not advised as it can lead to inconsistencies, "
|
||||
"most notably with related models." % (app_label, model_name),
|
||||
RuntimeWarning, stacklevel=2)
|
||||
else:
|
||||
raise RuntimeError(
|
||||
"Conflicting '%s' models in application '%s': %s and %s." %
|
||||
(model_name, app_label, app_models[model_name], model))
|
||||
app_models[model_name] = model
|
||||
self.do_pending_operations(model)
|
||||
self.clear_cache()
|
||||
|
||||
def is_installed(self, app_name):
|
||||
"""
|
||||
Checks whether an application with this name exists in the registry.
|
||||
|
||||
app_name is the full name of the app eg. 'django.contrib.admin'.
|
||||
"""
|
||||
self.check_apps_ready()
|
||||
return any(ac.name == app_name for ac in self.app_configs.values())
|
||||
|
||||
def get_containing_app_config(self, object_name):
|
||||
"""
|
||||
Look for an app config containing a given object.
|
||||
|
||||
object_name is the dotted Python path to the object.
|
||||
|
||||
Returns the app config for the inner application in case of nesting.
|
||||
Returns None if the object isn't in any registered app config.
|
||||
"""
|
||||
self.check_apps_ready()
|
||||
candidates = []
|
||||
for app_config in self.app_configs.values():
|
||||
if object_name.startswith(app_config.name):
|
||||
subpath = object_name[len(app_config.name):]
|
||||
if subpath == '' or subpath[0] == '.':
|
||||
candidates.append(app_config)
|
||||
if candidates:
|
||||
return sorted(candidates, key=lambda ac: -len(ac.name))[0]
|
||||
|
||||
def get_registered_model(self, app_label, model_name):
|
||||
"""
|
||||
Similar to get_model(), but doesn't require that an app exists with
|
||||
the given app_label.
|
||||
|
||||
It's safe to call this method at import time, even while the registry
|
||||
is being populated.
|
||||
"""
|
||||
model = self.all_models[app_label].get(model_name.lower())
|
||||
if model is None:
|
||||
raise LookupError(
|
||||
"Model '%s.%s' not registered." % (app_label, model_name))
|
||||
return model
|
||||
|
||||
@lru_cache.lru_cache(maxsize=None)
|
||||
def get_swappable_settings_name(self, to_string):
|
||||
"""
|
||||
For a given model string (e.g. "auth.User"), return the name of the
|
||||
corresponding settings name if it refers to a swappable model. If the
|
||||
referred model is not swappable, return None.
|
||||
|
||||
This method is decorated with lru_cache because it's performance
|
||||
critical when it comes to migrations. Since the swappable settings don't
|
||||
change after Django has loaded the settings, there is no reason to get
|
||||
the respective settings attribute over and over again.
|
||||
"""
|
||||
for model in self.get_models(include_swapped=True):
|
||||
swapped = model._meta.swapped
|
||||
# Is this model swapped out for the model given by to_string?
|
||||
if swapped and swapped == to_string:
|
||||
return model._meta.swappable
|
||||
# Is this model swappable and the one given by to_string?
|
||||
if model._meta.swappable and model._meta.label == to_string:
|
||||
return model._meta.swappable
|
||||
return None
|
||||
|
||||
def set_available_apps(self, available):
|
||||
"""
|
||||
Restricts the set of installed apps used by get_app_config[s].
|
||||
|
||||
available must be an iterable of application names.
|
||||
|
||||
set_available_apps() must be balanced with unset_available_apps().
|
||||
|
||||
Primarily used for performance optimization in TransactionTestCase.
|
||||
|
||||
This method is safe is the sense that it doesn't trigger any imports.
|
||||
"""
|
||||
available = set(available)
|
||||
installed = set(app_config.name for app_config in self.get_app_configs())
|
||||
if not available.issubset(installed):
|
||||
raise ValueError(
|
||||
"Available apps isn't a subset of installed apps, extra apps: %s"
|
||||
% ", ".join(available - installed)
|
||||
)
|
||||
|
||||
self.stored_app_configs.append(self.app_configs)
|
||||
self.app_configs = OrderedDict(
|
||||
(label, app_config)
|
||||
for label, app_config in self.app_configs.items()
|
||||
if app_config.name in available)
|
||||
self.clear_cache()
|
||||
|
||||
def unset_available_apps(self):
|
||||
"""
|
||||
Cancels a previous call to set_available_apps().
|
||||
"""
|
||||
self.app_configs = self.stored_app_configs.pop()
|
||||
self.clear_cache()
|
||||
|
||||
def set_installed_apps(self, installed):
|
||||
"""
|
||||
Enables a different set of installed apps for get_app_config[s].
|
||||
|
||||
installed must be an iterable in the same format as INSTALLED_APPS.
|
||||
|
||||
set_installed_apps() must be balanced with unset_installed_apps(),
|
||||
even if it exits with an exception.
|
||||
|
||||
Primarily used as a receiver of the setting_changed signal in tests.
|
||||
|
||||
This method may trigger new imports, which may add new models to the
|
||||
registry of all imported models. They will stay in the registry even
|
||||
after unset_installed_apps(). Since it isn't possible to replay
|
||||
imports safely (eg. that could lead to registering listeners twice),
|
||||
models are registered when they're imported and never removed.
|
||||
"""
|
||||
if not self.ready:
|
||||
raise AppRegistryNotReady("App registry isn't ready yet.")
|
||||
self.stored_app_configs.append(self.app_configs)
|
||||
self.app_configs = OrderedDict()
|
||||
self.apps_ready = self.models_ready = self.ready = False
|
||||
self.clear_cache()
|
||||
self.populate(installed)
|
||||
|
||||
def unset_installed_apps(self):
|
||||
"""
|
||||
Cancels a previous call to set_installed_apps().
|
||||
"""
|
||||
self.app_configs = self.stored_app_configs.pop()
|
||||
self.apps_ready = self.models_ready = self.ready = True
|
||||
self.clear_cache()
|
||||
|
||||
def clear_cache(self):
|
||||
"""
|
||||
Clears all internal caches, for methods that alter the app registry.
|
||||
|
||||
This is mostly used in tests.
|
||||
"""
|
||||
# Call expire cache on each model. This will purge
|
||||
# the relation tree and the fields cache.
|
||||
self.get_models.cache_clear()
|
||||
if self.ready:
|
||||
# Circumvent self.get_models() to prevent that the cache is refilled.
|
||||
# This particularly prevents that an empty value is cached while cloning.
|
||||
for app_config in self.app_configs.values():
|
||||
for model in app_config.get_models(include_auto_created=True):
|
||||
model._meta._expire_cache()
|
||||
|
||||
def lazy_model_operation(self, function, *model_keys):
|
||||
"""
|
||||
Take a function and a number of ("app_label", "modelname") tuples, and
|
||||
when all the corresponding models have been imported and registered,
|
||||
call the function with the model classes as its arguments.
|
||||
|
||||
The function passed to this method must accept exactly n models as
|
||||
arguments, where n=len(model_keys).
|
||||
"""
|
||||
# Base case: no arguments, just execute the function.
|
||||
if not model_keys:
|
||||
function()
|
||||
# Recursive case: take the head of model_keys, wait for the
|
||||
# corresponding model class to be imported and registered, then apply
|
||||
# that argument to the supplied function. Pass the resulting partial
|
||||
# to lazy_model_operation() along with the remaining model args and
|
||||
# repeat until all models are loaded and all arguments are applied.
|
||||
else:
|
||||
next_model, more_models = model_keys[0], model_keys[1:]
|
||||
|
||||
# This will be executed after the class corresponding to next_model
|
||||
# has been imported and registered. The `func` attribute provides
|
||||
# duck-type compatibility with partials.
|
||||
def apply_next_model(model):
|
||||
next_function = partial(apply_next_model.func, model)
|
||||
self.lazy_model_operation(next_function, *more_models)
|
||||
apply_next_model.func = function
|
||||
|
||||
# If the model has already been imported and registered, partially
|
||||
# apply it to the function now. If not, add it to the list of
|
||||
# pending operations for the model, where it will be executed with
|
||||
# the model class as its sole argument once the model is ready.
|
||||
try:
|
||||
model_class = self.get_registered_model(*next_model)
|
||||
except LookupError:
|
||||
self._pending_operations[next_model].append(apply_next_model)
|
||||
else:
|
||||
apply_next_model(model_class)
|
||||
|
||||
def do_pending_operations(self, model):
|
||||
"""
|
||||
Take a newly-prepared model and pass it to each function waiting for
|
||||
it. This is called at the very end of `Apps.register_model()`.
|
||||
"""
|
||||
key = model._meta.app_label, model._meta.model_name
|
||||
for function in self._pending_operations.pop(key, []):
|
||||
function(model)
|
||||
|
||||
|
||||
apps = Apps(installed_apps=None)
|
19
django/bin/daily_cleanup.py
Executable file
19
django/bin/daily_cleanup.py
Executable file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Daily cleanup job.
|
||||
|
||||
Can be run as a cronjob to clean out old data from the database (only expired
|
||||
sessions at the moment).
|
||||
"""
|
||||
|
||||
import warnings
|
||||
|
||||
from django.core import management
|
||||
|
||||
if __name__ == "__main__":
|
||||
warnings.warn(
|
||||
"The `daily_cleanup` script has been deprecated "
|
||||
"in favor of `django-admin.py clearsessions`.",
|
||||
DeprecationWarning)
|
||||
management.call_command('clearsessions')
|
10
django/bin/django-2to3.py
Executable file
10
django/bin/django-2to3.py
Executable file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# This works exactly like 2to3, except that it uses Django's fixers rather
|
||||
# than 2to3's built-in fixers.
|
||||
|
||||
import sys
|
||||
from lib2to3.main import main
|
||||
|
||||
sys.exit(main("django.utils.2to3_fixes"))
|
||||
|
37
django/bin/profiling/gather_profile_stats.py
Normal file
37
django/bin/profiling/gather_profile_stats.py
Normal file
@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
gather_profile_stats.py /path/to/dir/of/profiles
|
||||
|
||||
Note that the aggregated profiles must be read with pstats.Stats, not
|
||||
hotshot.stats (the formats are incompatible)
|
||||
"""
|
||||
|
||||
from hotshot import stats
|
||||
import os
|
||||
import pstats
|
||||
import sys
|
||||
|
||||
def gather_stats(p):
|
||||
profiles = {}
|
||||
for f in os.listdir(p):
|
||||
if f.endswith('.agg.prof'):
|
||||
path = f[:-9]
|
||||
prof = pstats.Stats(os.path.join(p, f))
|
||||
elif f.endswith('.prof'):
|
||||
bits = f.split('.')
|
||||
path = ".".join(bits[:-3])
|
||||
prof = stats.load(os.path.join(p, f))
|
||||
else:
|
||||
continue
|
||||
print("Processing %s" % f)
|
||||
if path in profiles:
|
||||
profiles[path].add(prof)
|
||||
else:
|
||||
profiles[path] = prof
|
||||
os.unlink(os.path.join(p, f))
|
||||
for (path, prof) in profiles.items():
|
||||
prof.dump_stats(os.path.join(p, "%s.agg.prof" % path))
|
||||
|
||||
if __name__ == '__main__':
|
||||
gather_stats(sys.argv[1])
|
29
django/bin/unique-messages.py
Executable file
29
django/bin/unique-messages.py
Executable file
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
def unique_messages():
|
||||
basedir = None
|
||||
|
||||
if os.path.isdir(os.path.join('conf', 'locale')):
|
||||
basedir = os.path.abspath(os.path.join('conf', 'locale'))
|
||||
elif os.path.isdir('locale'):
|
||||
basedir = os.path.abspath('locale')
|
||||
else:
|
||||
print("This script should be run from the Django Git tree or your project or app tree.")
|
||||
sys.exit(1)
|
||||
|
||||
for (dirpath, dirnames, filenames) in os.walk(basedir):
|
||||
for f in filenames:
|
||||
if f.endswith('.po'):
|
||||
sys.stderr.write('processing file %s in %s\n' % (f, dirpath))
|
||||
pf = os.path.splitext(os.path.join(dirpath, f))[0]
|
||||
cmd = 'msguniq "%s.po"' % pf
|
||||
stdout = os.popen(cmd)
|
||||
msg = stdout.read()
|
||||
with open('%s.po' % pf, 'w') as fp:
|
||||
fp.write(msg)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unique_messages()
|
@ -6,13 +6,18 @@ variable, and then from django.conf.global_settings; see the global settings fil
|
||||
a list of all possible variables.
|
||||
"""
|
||||
|
||||
import importlib
|
||||
import logging
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import time # Needed for Windows
|
||||
import warnings
|
||||
|
||||
from django.conf import global_settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.utils.functional import LazyObject, empty
|
||||
from django.utils import importlib
|
||||
from django.utils.module_loading import import_by_path
|
||||
from django.utils import six
|
||||
|
||||
ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
|
||||
|
||||
@ -29,8 +34,11 @@ class LazySettings(LazyObject):
|
||||
is used the first time we need any settings at all, if the user has not
|
||||
previously configured the settings manually.
|
||||
"""
|
||||
settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
|
||||
if not settings_module:
|
||||
try:
|
||||
settings_module = os.environ[ENVIRONMENT_VARIABLE]
|
||||
if not settings_module: # If it's set but is an empty string.
|
||||
raise KeyError
|
||||
except KeyError:
|
||||
desc = ("setting %s" % name) if name else "settings"
|
||||
raise ImproperlyConfigured(
|
||||
"Requested %s, but settings are not configured. "
|
||||
@ -39,42 +47,37 @@ class LazySettings(LazyObject):
|
||||
% (desc, ENVIRONMENT_VARIABLE))
|
||||
|
||||
self._wrapped = Settings(settings_module)
|
||||
|
||||
def __repr__(self):
|
||||
# Hardcode the class name as otherwise it yields 'Settings'.
|
||||
if self._wrapped is empty:
|
||||
return '<LazySettings [Unevaluated]>'
|
||||
return '<LazySettings "%(settings_module)s">' % {
|
||||
'settings_module': self._wrapped.SETTINGS_MODULE,
|
||||
}
|
||||
self._configure_logging()
|
||||
|
||||
def __getattr__(self, name):
|
||||
"""
|
||||
Return the value of a setting and cache it in self.__dict__.
|
||||
"""
|
||||
if self._wrapped is empty:
|
||||
self._setup(name)
|
||||
val = getattr(self._wrapped, name)
|
||||
self.__dict__[name] = val
|
||||
return val
|
||||
return getattr(self._wrapped, name)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
def _configure_logging(self):
|
||||
"""
|
||||
Set the value of setting. Clear all cached values if _wrapped changes
|
||||
(@override_settings does this) or clear single values when set.
|
||||
Setup logging from LOGGING_CONFIG and LOGGING settings.
|
||||
"""
|
||||
if name == '_wrapped':
|
||||
self.__dict__.clear()
|
||||
else:
|
||||
self.__dict__.pop(name, None)
|
||||
super(LazySettings, self).__setattr__(name, value)
|
||||
if not sys.warnoptions:
|
||||
try:
|
||||
# Route warnings through python logging
|
||||
logging.captureWarnings(True)
|
||||
# Allow DeprecationWarnings through the warnings filters
|
||||
warnings.simplefilter("default", DeprecationWarning)
|
||||
except AttributeError:
|
||||
# No captureWarnings on Python 2.6, DeprecationWarnings are on anyway
|
||||
pass
|
||||
|
||||
def __delattr__(self, name):
|
||||
"""
|
||||
Delete a setting and clear it from cache if needed.
|
||||
"""
|
||||
super(LazySettings, self).__delattr__(name)
|
||||
self.__dict__.pop(name, None)
|
||||
if self.LOGGING_CONFIG:
|
||||
from django.utils.log import DEFAULT_LOGGING
|
||||
# First find the logging configuration function ...
|
||||
logging_config_func = import_by_path(self.LOGGING_CONFIG)
|
||||
|
||||
logging_config_func(DEFAULT_LOGGING)
|
||||
|
||||
# ... then invoke it with the logging settings
|
||||
if self.LOGGING:
|
||||
logging_config_func(self.LOGGING)
|
||||
|
||||
def configure(self, default_settings=global_settings, **options):
|
||||
"""
|
||||
@ -88,6 +91,7 @@ class LazySettings(LazyObject):
|
||||
for name, value in options.items():
|
||||
setattr(holder, name, value)
|
||||
self._wrapped = holder
|
||||
self._configure_logging()
|
||||
|
||||
@property
|
||||
def configured(self):
|
||||
@ -97,33 +101,51 @@ class LazySettings(LazyObject):
|
||||
return self._wrapped is not empty
|
||||
|
||||
|
||||
class Settings(object):
|
||||
class BaseSettings(object):
|
||||
"""
|
||||
Common logic for settings whether set by a module or by the user.
|
||||
"""
|
||||
def __setattr__(self, name, value):
|
||||
if name in ("MEDIA_URL", "STATIC_URL") and value and not value.endswith('/'):
|
||||
raise ImproperlyConfigured("If set, %s must end with a slash" % name)
|
||||
elif name == "ALLOWED_INCLUDE_ROOTS" and isinstance(value, six.string_types):
|
||||
raise ValueError("The ALLOWED_INCLUDE_ROOTS setting must be set "
|
||||
"to a tuple, not a string.")
|
||||
object.__setattr__(self, name, value)
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
def __init__(self, settings_module):
|
||||
# update this dict from global settings (but only for ALL_CAPS settings)
|
||||
for setting in dir(global_settings):
|
||||
if setting.isupper():
|
||||
if setting == setting.upper():
|
||||
setattr(self, setting, getattr(global_settings, setting))
|
||||
|
||||
# store the settings module in case someone later cares
|
||||
self.SETTINGS_MODULE = settings_module
|
||||
|
||||
mod = importlib.import_module(self.SETTINGS_MODULE)
|
||||
try:
|
||||
mod = importlib.import_module(self.SETTINGS_MODULE)
|
||||
except ImportError as e:
|
||||
raise ImportError(
|
||||
"Could not import settings '%s' (Is it on sys.path? Is there an import error in the settings file?): %s"
|
||||
% (self.SETTINGS_MODULE, e)
|
||||
)
|
||||
|
||||
# Settings that should be converted into tuples if they're mistakenly entered
|
||||
# as strings.
|
||||
tuple_settings = ("INSTALLED_APPS", "TEMPLATE_DIRS")
|
||||
|
||||
tuple_settings = (
|
||||
"INSTALLED_APPS",
|
||||
"TEMPLATE_DIRS",
|
||||
"LOCALE_PATHS",
|
||||
)
|
||||
self._explicit_settings = set()
|
||||
for setting in dir(mod):
|
||||
if setting.isupper():
|
||||
if setting == setting.upper():
|
||||
setting_value = getattr(mod, setting)
|
||||
|
||||
if (setting in tuple_settings and
|
||||
not isinstance(setting_value, (list, tuple))):
|
||||
raise ImproperlyConfigured("The %s setting must be a list or a tuple. " % setting)
|
||||
if setting in tuple_settings and \
|
||||
isinstance(setting_value, six.string_types):
|
||||
warnings.warn("The %s setting must be a tuple. Please fix your "
|
||||
"settings, as auto-correction is now deprecated." % setting,
|
||||
DeprecationWarning, stacklevel=2)
|
||||
setting_value = (setting_value,) # In case the user forgot the comma.
|
||||
setattr(self, setting, setting_value)
|
||||
self._explicit_settings.add(setting)
|
||||
|
||||
if not self.SECRET_KEY:
|
||||
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
|
||||
@ -140,17 +162,8 @@ class Settings(object):
|
||||
os.environ['TZ'] = self.TIME_ZONE
|
||||
time.tzset()
|
||||
|
||||
def is_overridden(self, setting):
|
||||
return setting in self._explicit_settings
|
||||
|
||||
def __repr__(self):
|
||||
return '<%(cls)s "%(settings_module)s">' % {
|
||||
'cls': self.__class__.__name__,
|
||||
'settings_module': self.SETTINGS_MODULE,
|
||||
}
|
||||
|
||||
|
||||
class UserSettingsHolder(object):
|
||||
class UserSettingsHolder(BaseSettings):
|
||||
"""
|
||||
Holder for user configured settings.
|
||||
"""
|
||||
@ -173,29 +186,13 @@ class UserSettingsHolder(object):
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
self._deleted.discard(name)
|
||||
super(UserSettingsHolder, self).__setattr__(name, value)
|
||||
return super(UserSettingsHolder, self).__setattr__(name, value)
|
||||
|
||||
def __delattr__(self, name):
|
||||
self._deleted.add(name)
|
||||
if hasattr(self, name):
|
||||
super(UserSettingsHolder, self).__delattr__(name)
|
||||
return super(UserSettingsHolder, self).__delattr__(name)
|
||||
|
||||
def __dir__(self):
|
||||
return sorted(
|
||||
s for s in list(self.__dict__) + dir(self.default_settings)
|
||||
if s not in self._deleted
|
||||
)
|
||||
|
||||
def is_overridden(self, setting):
|
||||
deleted = (setting in self._deleted)
|
||||
set_locally = (setting in self.__dict__)
|
||||
set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting)
|
||||
return (deleted or set_locally or set_on_default)
|
||||
|
||||
def __repr__(self):
|
||||
return '<%(cls)s>' % {
|
||||
'cls': self.__class__.__name__,
|
||||
}
|
||||
|
||||
return list(self.__dict__) + dir(self.default_settings)
|
||||
|
||||
settings = LazySettings()
|
||||
|
3
django/conf/app_template/admin.py
Normal file
3
django/conf/app_template/admin.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
@ -1,3 +0,0 @@
|
||||
{{ unicode_literals }}from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
@ -1,5 +0,0 @@
|
||||
{{ unicode_literals }}from django.apps import AppConfig
|
||||
|
||||
|
||||
class {{ camel_case_app_name }}Config(AppConfig):
|
||||
name = '{{ app_name }}'
|
3
django/conf/app_template/models.py
Normal file
3
django/conf/app_template/models.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
@ -1,3 +0,0 @@
|
||||
{{ unicode_literals }}from django.db import models
|
||||
|
||||
# Create your models here.
|
3
django/conf/app_template/tests.py
Normal file
3
django/conf/app_template/tests.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
@ -1,3 +0,0 @@
|
||||
{{ unicode_literals }}from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
3
django/conf/app_template/views.py
Normal file
3
django/conf/app_template/views.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
@ -1,3 +0,0 @@
|
||||
{{ unicode_literals }}from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
@ -1,48 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Default Django settings. Override these with settings in the module pointed to
|
||||
by the DJANGO_SETTINGS_MODULE environment variable.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# Default Django settings. Override these with settings in the module
|
||||
# pointed-to by the DJANGO_SETTINGS_MODULE environment variable.
|
||||
|
||||
# This is defined here as a do-nothing function because we can't import
|
||||
# django.utils.translation -- that module depends on the settings.
|
||||
def gettext_noop(s):
|
||||
return s
|
||||
|
||||
gettext_noop = lambda s: s
|
||||
|
||||
####################
|
||||
# CORE #
|
||||
####################
|
||||
|
||||
DEBUG = False
|
||||
TEMPLATE_DEBUG = False
|
||||
|
||||
# Whether the framework should propagate raw exceptions rather than catching
|
||||
# them. This is useful under some testing situations and should never be used
|
||||
# on a live site.
|
||||
DEBUG_PROPAGATE_EXCEPTIONS = False
|
||||
|
||||
# Whether to use the "ETag" header. This saves bandwidth but slows down performance.
|
||||
# Deprecated (RemovedInDjango21Warning) in favor of ConditionalGetMiddleware
|
||||
# which sets the ETag regardless of this setting.
|
||||
# Whether to use the "Etag" header. This saves bandwidth but slows down performance.
|
||||
USE_ETAGS = False
|
||||
|
||||
# People who get code error notifications.
|
||||
# In the format [('Full Name', 'email@example.com'), ('Full Name', 'anotheremail@example.com')]
|
||||
ADMINS = []
|
||||
# In the format (('Full Name', 'email@example.com'), ('Full Name', 'anotheremail@example.com'))
|
||||
ADMINS = ()
|
||||
|
||||
# List of IP addresses, as strings, that:
|
||||
# Tuple of IP addresses, as strings, that:
|
||||
# * See debug comments, when DEBUG is true
|
||||
# * Receive x-headers
|
||||
INTERNAL_IPS = []
|
||||
INTERNAL_IPS = ()
|
||||
|
||||
# Hosts/domain names that are valid for this site.
|
||||
# "*" matches anything, ".example.com" matches example.com and all subdomains
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
# Local time zone for this installation. All choices can be found here:
|
||||
# https://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all
|
||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all
|
||||
# systems may support all possibilities). When USE_TZ is True, this is
|
||||
# interpreted as the default user time zone.
|
||||
TIME_ZONE = 'America/Chicago'
|
||||
@ -55,10 +47,9 @@ USE_TZ = False
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
# Languages we provide translations for, out of the box.
|
||||
LANGUAGES = [
|
||||
LANGUAGES = (
|
||||
('af', gettext_noop('Afrikaans')),
|
||||
('ar', gettext_noop('Arabic')),
|
||||
('ast', gettext_noop('Asturian')),
|
||||
('az', gettext_noop('Azerbaijani')),
|
||||
('bg', gettext_noop('Bulgarian')),
|
||||
('be', gettext_noop('Belarusian')),
|
||||
@ -70,15 +61,12 @@ LANGUAGES = [
|
||||
('cy', gettext_noop('Welsh')),
|
||||
('da', gettext_noop('Danish')),
|
||||
('de', gettext_noop('German')),
|
||||
('dsb', gettext_noop('Lower Sorbian')),
|
||||
('el', gettext_noop('Greek')),
|
||||
('en', gettext_noop('English')),
|
||||
('en-au', gettext_noop('Australian English')),
|
||||
('en-gb', gettext_noop('British English')),
|
||||
('eo', gettext_noop('Esperanto')),
|
||||
('es', gettext_noop('Spanish')),
|
||||
('es-ar', gettext_noop('Argentinian Spanish')),
|
||||
('es-co', gettext_noop('Colombian Spanish')),
|
||||
('es-mx', gettext_noop('Mexican Spanish')),
|
||||
('es-ni', gettext_noop('Nicaraguan Spanish')),
|
||||
('es-ve', gettext_noop('Venezuelan Spanish')),
|
||||
@ -87,18 +75,15 @@ LANGUAGES = [
|
||||
('fa', gettext_noop('Persian')),
|
||||
('fi', gettext_noop('Finnish')),
|
||||
('fr', gettext_noop('French')),
|
||||
('fy', gettext_noop('Frisian')),
|
||||
('fy-nl', gettext_noop('Frisian')),
|
||||
('ga', gettext_noop('Irish')),
|
||||
('gd', gettext_noop('Scottish Gaelic')),
|
||||
('gl', gettext_noop('Galician')),
|
||||
('he', gettext_noop('Hebrew')),
|
||||
('hi', gettext_noop('Hindi')),
|
||||
('hr', gettext_noop('Croatian')),
|
||||
('hsb', gettext_noop('Upper Sorbian')),
|
||||
('hu', gettext_noop('Hungarian')),
|
||||
('ia', gettext_noop('Interlingua')),
|
||||
('id', gettext_noop('Indonesian')),
|
||||
('io', gettext_noop('Ido')),
|
||||
('is', gettext_noop('Icelandic')),
|
||||
('it', gettext_noop('Italian')),
|
||||
('ja', gettext_noop('Japanese')),
|
||||
@ -113,9 +98,8 @@ LANGUAGES = [
|
||||
('mk', gettext_noop('Macedonian')),
|
||||
('ml', gettext_noop('Malayalam')),
|
||||
('mn', gettext_noop('Mongolian')),
|
||||
('mr', gettext_noop('Marathi')),
|
||||
('my', gettext_noop('Burmese')),
|
||||
('nb', gettext_noop('Norwegian Bokmål')),
|
||||
('nb', gettext_noop('Norwegian Bokmal')),
|
||||
('ne', gettext_noop('Nepali')),
|
||||
('nl', gettext_noop('Dutch')),
|
||||
('nn', gettext_noop('Norwegian Nynorsk')),
|
||||
@ -142,24 +126,18 @@ LANGUAGES = [
|
||||
('uk', gettext_noop('Ukrainian')),
|
||||
('ur', gettext_noop('Urdu')),
|
||||
('vi', gettext_noop('Vietnamese')),
|
||||
('zh-hans', gettext_noop('Simplified Chinese')),
|
||||
('zh-hant', gettext_noop('Traditional Chinese')),
|
||||
]
|
||||
('zh-cn', gettext_noop('Simplified Chinese')),
|
||||
('zh-tw', gettext_noop('Traditional Chinese')),
|
||||
)
|
||||
|
||||
# Languages using BiDi (right-to-left) layout
|
||||
LANGUAGES_BIDI = ["he", "ar", "fa", "ur"]
|
||||
LANGUAGES_BIDI = ("he", "ar", "fa", "ur")
|
||||
|
||||
# If you set this to False, Django will make some optimizations so as not
|
||||
# to load the internationalization machinery.
|
||||
USE_I18N = True
|
||||
LOCALE_PATHS = []
|
||||
|
||||
# Settings for language cookie
|
||||
LOCALE_PATHS = ()
|
||||
LANGUAGE_COOKIE_NAME = 'django_language'
|
||||
LANGUAGE_COOKIE_AGE = None
|
||||
LANGUAGE_COOKIE_DOMAIN = None
|
||||
LANGUAGE_COOKIE_PATH = '/'
|
||||
|
||||
|
||||
# If you set this to True, Django will format dates, numbers and calendars
|
||||
# according to user current locale.
|
||||
@ -181,6 +159,9 @@ FILE_CHARSET = 'utf-8'
|
||||
# Email address that error messages come from.
|
||||
SERVER_EMAIL = 'root@localhost'
|
||||
|
||||
# Whether to send broken-link emails. Deprecated, must be removed in 1.8.
|
||||
SEND_BROKEN_LINK_EMAILS = False
|
||||
|
||||
# Database connection info. If left empty, will default to the dummy backend.
|
||||
DATABASES = {}
|
||||
|
||||
@ -199,25 +180,42 @@ EMAIL_HOST = 'localhost'
|
||||
# Port for sending email.
|
||||
EMAIL_PORT = 25
|
||||
|
||||
# Whether to send SMTP 'Date' header in the local time zone or in UTC.
|
||||
EMAIL_USE_LOCALTIME = False
|
||||
|
||||
# Optional SMTP authentication information for EMAIL_HOST.
|
||||
EMAIL_HOST_USER = ''
|
||||
EMAIL_HOST_PASSWORD = ''
|
||||
EMAIL_USE_TLS = False
|
||||
EMAIL_USE_SSL = False
|
||||
EMAIL_SSL_CERTFILE = None
|
||||
EMAIL_SSL_KEYFILE = None
|
||||
EMAIL_TIMEOUT = None
|
||||
|
||||
# List of strings representing installed apps.
|
||||
INSTALLED_APPS = []
|
||||
INSTALLED_APPS = ()
|
||||
|
||||
TEMPLATES = []
|
||||
# List of locations of the template source files, in search order.
|
||||
TEMPLATE_DIRS = ()
|
||||
|
||||
# Default form rendering class.
|
||||
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
|
||||
# List of callables that know how to import templates from various sources.
|
||||
# See the comments in django/core/template/loader.py for interface
|
||||
# documentation.
|
||||
TEMPLATE_LOADERS = (
|
||||
'django.template.loaders.filesystem.Loader',
|
||||
'django.template.loaders.app_directories.Loader',
|
||||
# 'django.template.loaders.eggs.Loader',
|
||||
)
|
||||
|
||||
# List of processors used by RequestContext to populate the context.
|
||||
# Each one should be a callable that takes the request object as its
|
||||
# only parameter and returns a dictionary to add to the context.
|
||||
TEMPLATE_CONTEXT_PROCESSORS = (
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.core.context_processors.debug',
|
||||
'django.core.context_processors.i18n',
|
||||
'django.core.context_processors.media',
|
||||
'django.core.context_processors.static',
|
||||
'django.core.context_processors.tz',
|
||||
# 'django.core.context_processors.request',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
)
|
||||
|
||||
# Output to use in template system for invalid (e.g. misspelled) variables.
|
||||
TEMPLATE_STRING_IF_INVALID = ''
|
||||
|
||||
# Default email address to use for various automated correspondence from
|
||||
# the site managers.
|
||||
@ -240,27 +238,36 @@ FORCE_SCRIPT_NAME = None
|
||||
# that are not allowed to visit any page, systemwide. Use this for bad
|
||||
# robots/crawlers. Here are a few examples:
|
||||
# import re
|
||||
# DISALLOWED_USER_AGENTS = [
|
||||
# DISALLOWED_USER_AGENTS = (
|
||||
# re.compile(r'^NaverBot.*'),
|
||||
# re.compile(r'^EmailSiphon.*'),
|
||||
# re.compile(r'^SiteSucker.*'),
|
||||
# re.compile(r'^sohu-search'),
|
||||
# ]
|
||||
DISALLOWED_USER_AGENTS = []
|
||||
# re.compile(r'^sohu-search')
|
||||
# )
|
||||
DISALLOWED_USER_AGENTS = ()
|
||||
|
||||
ABSOLUTE_URL_OVERRIDES = {}
|
||||
|
||||
# Tuple of strings representing allowed prefixes for the {% ssi %} tag.
|
||||
# Example: ('/home/html', '/var/www')
|
||||
ALLOWED_INCLUDE_ROOTS = ()
|
||||
|
||||
# If this is a admin settings module, this should be a list of
|
||||
# settings modules (in the format 'foo.bar.baz') for which this admin
|
||||
# is an admin.
|
||||
ADMIN_FOR = ()
|
||||
|
||||
# List of compiled regular expression objects representing URLs that need not
|
||||
# be reported by BrokenLinkEmailsMiddleware. Here are a few examples:
|
||||
# import re
|
||||
# IGNORABLE_404_URLS = [
|
||||
# IGNORABLE_404_URLS = (
|
||||
# re.compile(r'^/apple-touch-icon.*\.png$'),
|
||||
# re.compile(r'^/favicon.ico$'),
|
||||
# re.compile(r'^/robots.txt$'),
|
||||
# re.compile(r'^/phpmyadmin/'),
|
||||
# re.compile(r'^/favicon.ico$),
|
||||
# re.compile(r'^/robots.txt$),
|
||||
# re.compile(r'^/phpmyadmin/),
|
||||
# re.compile(r'\.(cgi|php|pl)$'),
|
||||
# ]
|
||||
IGNORABLE_404_URLS = []
|
||||
# )
|
||||
IGNORABLE_404_URLS = ()
|
||||
|
||||
# A secret key for this particular Django installation. Used in secret-key
|
||||
# hashing algorithms. Set this in your settings, or Django will complain
|
||||
@ -287,26 +294,14 @@ STATIC_ROOT = None
|
||||
STATIC_URL = None
|
||||
|
||||
# List of upload handler classes to be applied in order.
|
||||
FILE_UPLOAD_HANDLERS = [
|
||||
FILE_UPLOAD_HANDLERS = (
|
||||
'django.core.files.uploadhandler.MemoryFileUploadHandler',
|
||||
'django.core.files.uploadhandler.TemporaryFileUploadHandler',
|
||||
]
|
||||
)
|
||||
|
||||
# Maximum size, in bytes, of a request before it will be streamed to the
|
||||
# file system instead of into memory.
|
||||
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB
|
||||
|
||||
# Maximum size in bytes of request data (excluding file uploads) that will be
|
||||
# read before a SuspiciousOperation (RequestDataTooBig) is raised.
|
||||
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB
|
||||
|
||||
# Maximum number of GET/POST parameters that will be read before a
|
||||
# SuspiciousOperation (TooManyFieldsSent) is raised.
|
||||
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
|
||||
|
||||
# Maximum number of files encoded in a multipart upload that will be read
|
||||
# before a SuspiciousOperation (TooManyFilesSent) is raised.
|
||||
DATA_UPLOAD_MAX_NUMBER_FILES = 100
|
||||
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB
|
||||
|
||||
# Directory in which upload streamed files will be temporarily saved. A value of
|
||||
# `None` will make Django use the operating system's default temporary directory
|
||||
@ -314,14 +309,9 @@ DATA_UPLOAD_MAX_NUMBER_FILES = 100
|
||||
FILE_UPLOAD_TEMP_DIR = None
|
||||
|
||||
# The numeric mode to set newly-uploaded files to. The value should be a mode
|
||||
# you'd pass directly to os.chmod; see https://docs.python.org/3/library/os.html#files-and-directories.
|
||||
# you'd pass directly to os.chmod; see http://docs.python.org/lib/os-file-dir.html.
|
||||
FILE_UPLOAD_PERMISSIONS = None
|
||||
|
||||
# The numeric mode to assign to newly-created directories, when uploading files.
|
||||
# The value should be a mode as you'd pass to os.chmod;
|
||||
# see https://docs.python.org/3/library/os.html#files-and-directories.
|
||||
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
|
||||
|
||||
# Python module path where user will place custom format definition.
|
||||
# The directory where this setting is pointing should contain subdirectories
|
||||
# named as the locales, containing a formats.py file
|
||||
@ -363,30 +353,30 @@ SHORT_DATETIME_FORMAT = 'm/d/Y P'
|
||||
# See all available format string here:
|
||||
# http://docs.python.org/library/datetime.html#strftime-behavior
|
||||
# * Note that these format strings are different from the ones to display dates
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
|
||||
'%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
|
||||
'%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
|
||||
'%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
|
||||
'%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
|
||||
]
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
|
||||
'%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
|
||||
'%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
|
||||
'%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
|
||||
'%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
|
||||
)
|
||||
|
||||
# Default formats to be used when parsing times from input boxes, in order
|
||||
# See all available format string here:
|
||||
# http://docs.python.org/library/datetime.html#strftime-behavior
|
||||
# * Note that these format strings are different from the ones to display dates
|
||||
TIME_INPUT_FORMATS = [
|
||||
TIME_INPUT_FORMATS = (
|
||||
'%H:%M:%S', # '14:30:59'
|
||||
'%H:%M:%S.%f', # '14:30:59.000200'
|
||||
'%H:%M', # '14:30'
|
||||
]
|
||||
)
|
||||
|
||||
# Default formats to be used when parsing dates and times from input boxes,
|
||||
# in order
|
||||
# See all available format string here:
|
||||
# http://docs.python.org/library/datetime.html#strftime-behavior
|
||||
# * Note that these format strings are different from the ones to display dates
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||
@ -399,7 +389,7 @@ DATETIME_INPUT_FORMATS = [
|
||||
'%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
|
||||
'%m/%d/%y %H:%M', # '10/25/06 14:30'
|
||||
'%m/%d/%y', # '10/25/06'
|
||||
]
|
||||
)
|
||||
|
||||
# First day of week, to be used on calendars
|
||||
# 0 means Sunday, 1 means Monday...
|
||||
@ -418,6 +408,10 @@ NUMBER_GROUPING = 0
|
||||
# Thousand separator symbol
|
||||
THOUSAND_SEPARATOR = ','
|
||||
|
||||
# Do you want to manage transactions manually?
|
||||
# Hint: you really don't!
|
||||
TRANSACTIONS_MANAGED = False
|
||||
|
||||
# The tablespaces to use for each model when not specified otherwise.
|
||||
DEFAULT_TABLESPACE = ''
|
||||
DEFAULT_INDEX_TABLESPACE = ''
|
||||
@ -426,10 +420,9 @@ DEFAULT_INDEX_TABLESPACE = ''
|
||||
X_FRAME_OPTIONS = 'SAMEORIGIN'
|
||||
|
||||
USE_X_FORWARDED_HOST = False
|
||||
USE_X_FORWARDED_PORT = False
|
||||
|
||||
# The Python dotted path to the WSGI application that Django's internal server
|
||||
# (runserver) will use. If `None`, the return value of
|
||||
# The Python dotted path to the WSGI application that Django's internal servers
|
||||
# (runserver, runfcgi) will use. If `None`, the return value of
|
||||
# 'django.core.wsgi.get_wsgi_application' is used, thus preserving the same
|
||||
# behavior as previous versions of Django. Otherwise this should point to an
|
||||
# actual WSGI application object.
|
||||
@ -448,45 +441,35 @@ SECURE_PROXY_SSL_HEADER = None
|
||||
# MIDDLEWARE #
|
||||
##############
|
||||
|
||||
# List of middleware to use. Order is important; in the request phase, these
|
||||
# middleware will be applied in the order given, and in the response
|
||||
# phase the middleware will be applied in reverse order.
|
||||
MIDDLEWARE_CLASSES = [
|
||||
# List of middleware classes to use. Order is important; in the request phase,
|
||||
# this middleware classes will be applied in the order given, and in the
|
||||
# response phase the middleware will be applied in reverse order.
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
]
|
||||
|
||||
MIDDLEWARE = None
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
# 'django.middleware.http.ConditionalGetMiddleware',
|
||||
# 'django.middleware.gzip.GZipMiddleware',
|
||||
)
|
||||
|
||||
############
|
||||
# SESSIONS #
|
||||
############
|
||||
|
||||
# Cache to store session data if using the cache session backend.
|
||||
SESSION_CACHE_ALIAS = 'default'
|
||||
# Cookie name. This can be whatever you want.
|
||||
SESSION_COOKIE_NAME = 'sessionid'
|
||||
# Age of cookie, in seconds (default: 2 weeks).
|
||||
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
|
||||
# A string like ".example.com", or None for standard domain cookie.
|
||||
SESSION_COOKIE_DOMAIN = None
|
||||
# Whether the session cookie should be secure (https:// only).
|
||||
SESSION_COOKIE_SECURE = False
|
||||
# The path of the session cookie.
|
||||
SESSION_COOKIE_PATH = '/'
|
||||
# Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
|
||||
SESSION_COOKIE_HTTPONLY = True
|
||||
# Whether to save the session data on every request.
|
||||
SESSION_SAVE_EVERY_REQUEST = False
|
||||
# Whether a user's session cookie expires when the Web browser is closed.
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
|
||||
# The module to store session data
|
||||
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
|
||||
# Directory to store session files if using the file session module. If None,
|
||||
# the backend will use a sensible default.
|
||||
SESSION_FILE_PATH = None
|
||||
# class to serialize session data
|
||||
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
|
||||
SESSION_CACHE_ALIAS = 'default' # Cache to store session data if using the cache session backend.
|
||||
SESSION_COOKIE_NAME = 'sessionid' # Cookie name. This can be whatever you want.
|
||||
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # Age of cookie, in seconds (default: 2 weeks).
|
||||
SESSION_COOKIE_DOMAIN = None # A string like ".example.com", or None for standard domain cookie.
|
||||
SESSION_COOKIE_SECURE = False # Whether the session cookie should be secure (https:// only).
|
||||
SESSION_COOKIE_PATH = '/' # The path of the session cookie.
|
||||
SESSION_COOKIE_HTTPONLY = True # Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
|
||||
SESSION_SAVE_EVERY_REQUEST = False # Whether to save the session data on every request.
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Whether a user's session cookie expires when the Web browser is closed.
|
||||
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # The module to store session data
|
||||
SESSION_FILE_PATH = None # Directory to store session files if using the file session module. If None, the backend will use a sensible default.
|
||||
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' # class to serialize session data
|
||||
|
||||
#########
|
||||
# CACHE #
|
||||
@ -502,19 +485,29 @@ CACHE_MIDDLEWARE_KEY_PREFIX = ''
|
||||
CACHE_MIDDLEWARE_SECONDS = 600
|
||||
CACHE_MIDDLEWARE_ALIAS = 'default'
|
||||
|
||||
####################
|
||||
# COMMENTS #
|
||||
####################
|
||||
|
||||
COMMENTS_ALLOW_PROFANITIES = False
|
||||
|
||||
# The profanities that will trigger a validation error in
|
||||
# CommentDetailsForm.clean_comment. All of these should be in lowercase.
|
||||
PROFANITIES_LIST = ()
|
||||
|
||||
##################
|
||||
# AUTHENTICATION #
|
||||
##################
|
||||
|
||||
AUTH_USER_MODEL = 'auth.User'
|
||||
|
||||
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
|
||||
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
|
||||
|
||||
LOGIN_URL = '/accounts/login/'
|
||||
|
||||
LOGIN_REDIRECT_URL = '/accounts/profile/'
|
||||
LOGOUT_URL = '/accounts/logout/'
|
||||
|
||||
LOGOUT_REDIRECT_URL = None
|
||||
LOGIN_REDIRECT_URL = '/accounts/profile/'
|
||||
|
||||
# The number of days a password reset link is valid for
|
||||
PASSWORD_RESET_TIMEOUT_DAYS = 3
|
||||
@ -522,15 +515,17 @@ PASSWORD_RESET_TIMEOUT_DAYS = 3
|
||||
# the first hasher in this list is the preferred algorithm. any
|
||||
# password using different algorithms will be converted automatically
|
||||
# upon login
|
||||
PASSWORD_HASHERS = [
|
||||
PASSWORD_HASHERS = (
|
||||
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
|
||||
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
|
||||
'django.contrib.auth.hashers.Argon2PasswordHasher',
|
||||
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
|
||||
'django.contrib.auth.hashers.BCryptPasswordHasher',
|
||||
]
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = []
|
||||
'django.contrib.auth.hashers.SHA1PasswordHasher',
|
||||
'django.contrib.auth.hashers.MD5PasswordHasher',
|
||||
'django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher',
|
||||
'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher',
|
||||
'django.contrib.auth.hashers.CryptPasswordHasher',
|
||||
)
|
||||
|
||||
###########
|
||||
# SIGNING #
|
||||
@ -548,14 +543,10 @@ CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
|
||||
|
||||
# Settings for CSRF cookie.
|
||||
CSRF_COOKIE_NAME = 'csrftoken'
|
||||
CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52
|
||||
CSRF_COOKIE_DOMAIN = None
|
||||
CSRF_COOKIE_PATH = '/'
|
||||
CSRF_COOKIE_SECURE = False
|
||||
CSRF_COOKIE_HTTPONLY = False
|
||||
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
|
||||
CSRF_TRUSTED_ORIGINS = []
|
||||
CSRF_USE_SESSIONS = False
|
||||
|
||||
############
|
||||
# MESSAGES #
|
||||
@ -572,7 +563,7 @@ MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
|
||||
###########
|
||||
|
||||
# The callable to use to configure logging
|
||||
LOGGING_CONFIG = 'logging.config.dictConfig'
|
||||
LOGGING_CONFIG = 'django.utils.log.dictConfig'
|
||||
|
||||
# Custom logging configuration.
|
||||
LOGGING = {}
|
||||
@ -588,60 +579,27 @@ DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFil
|
||||
# The name of the class to use to run the test suite
|
||||
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
||||
|
||||
# Apps that don't need to be serialized at test database creation time
|
||||
# (only apps with migrations are to start with)
|
||||
TEST_NON_SERIALIZED_APPS = []
|
||||
|
||||
############
|
||||
# FIXTURES #
|
||||
############
|
||||
|
||||
# The list of directories to search for fixtures
|
||||
FIXTURE_DIRS = []
|
||||
FIXTURE_DIRS = ()
|
||||
|
||||
###############
|
||||
# STATICFILES #
|
||||
###############
|
||||
|
||||
# A list of locations of additional static files
|
||||
STATICFILES_DIRS = []
|
||||
STATICFILES_DIRS = ()
|
||||
|
||||
# The default file storage backend used during the build process
|
||||
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
|
||||
|
||||
# List of finder classes that know how to find static files in
|
||||
# various locations.
|
||||
STATICFILES_FINDERS = [
|
||||
STATICFILES_FINDERS = (
|
||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
||||
]
|
||||
|
||||
##############
|
||||
# MIGRATIONS #
|
||||
##############
|
||||
|
||||
# Migration module overrides for apps, by app label.
|
||||
MIGRATION_MODULES = {}
|
||||
|
||||
#################
|
||||
# SYSTEM CHECKS #
|
||||
#################
|
||||
|
||||
# List of all issues generated by system checks that should be silenced. Light
|
||||
# issues like warnings, infos or debugs will not generate a message. Silencing
|
||||
# serious issues like errors and criticals does not result in hiding the
|
||||
# message, but Django will not stop you from e.g. running server.
|
||||
SILENCED_SYSTEM_CHECKS = []
|
||||
|
||||
#######################
|
||||
# SECURITY MIDDLEWARE #
|
||||
#######################
|
||||
SECURE_BROWSER_XSS_FILTER = False
|
||||
SECURE_CONTENT_TYPE_NOSNIFF = False
|
||||
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
|
||||
SECURE_HSTS_PRELOAD = False
|
||||
SECURE_HSTS_SECONDS = 0
|
||||
SECURE_REDIRECT_EXEMPT = []
|
||||
SECURE_SSL_HOST = None
|
||||
SECURE_SSL_REDIRECT = False
|
||||
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
||||
)
|
||||
|
@ -1,14 +1,8 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
"""
|
||||
LANG_INFO is a dictionary structure to provide meta information about languages.
|
||||
|
||||
About name_local: capitalize it as if your language name was appearing
|
||||
inside a sentence in your language.
|
||||
The 'fallback' key can be used to specify a special fallback logic which doesn't
|
||||
follow the traditional 'fr-ca' -> 'fr' fallback logic.
|
||||
"""
|
||||
# About name_local: capitalize it as if your language name was appearing
|
||||
# inside a sentence in your language.
|
||||
|
||||
LANG_INFO = {
|
||||
'af': {
|
||||
@ -23,17 +17,11 @@ LANG_INFO = {
|
||||
'name': 'Arabic',
|
||||
'name_local': 'العربيّة',
|
||||
},
|
||||
'ast': {
|
||||
'bidi': False,
|
||||
'code': 'ast',
|
||||
'name': 'Asturian',
|
||||
'name_local': 'asturianu',
|
||||
},
|
||||
'az': {
|
||||
'bidi': True,
|
||||
'code': 'az',
|
||||
'name': 'Azerbaijani',
|
||||
'name_local': 'Azərbaycanca',
|
||||
'name_local': 'azərbaycan dili',
|
||||
},
|
||||
'be': {
|
||||
'bidi': False,
|
||||
@ -95,12 +83,6 @@ LANG_INFO = {
|
||||
'name': 'German',
|
||||
'name_local': 'Deutsch',
|
||||
},
|
||||
'dsb': {
|
||||
'bidi': False,
|
||||
'code': 'dsb',
|
||||
'name': 'Lower Sorbian',
|
||||
'name_local': 'dolnoserbski',
|
||||
},
|
||||
'el': {
|
||||
'bidi': False,
|
||||
'code': 'el',
|
||||
@ -113,12 +95,6 @@ LANG_INFO = {
|
||||
'name': 'English',
|
||||
'name_local': 'English',
|
||||
},
|
||||
'en-au': {
|
||||
'bidi': False,
|
||||
'code': 'en-au',
|
||||
'name': 'Australian English',
|
||||
'name_local': 'Australian English',
|
||||
},
|
||||
'en-gb': {
|
||||
'bidi': False,
|
||||
'code': 'en-gb',
|
||||
@ -143,12 +119,6 @@ LANG_INFO = {
|
||||
'name': 'Argentinian Spanish',
|
||||
'name_local': 'español de Argentina',
|
||||
},
|
||||
'es-co': {
|
||||
'bidi': False,
|
||||
'code': 'es-co',
|
||||
'name': 'Colombian Spanish',
|
||||
'name_local': 'español de Colombia',
|
||||
},
|
||||
'es-mx': {
|
||||
'bidi': False,
|
||||
'code': 'es-mx',
|
||||
@ -197,11 +167,11 @@ LANG_INFO = {
|
||||
'name': 'French',
|
||||
'name_local': 'français',
|
||||
},
|
||||
'fy': {
|
||||
'fy-nl': {
|
||||
'bidi': False,
|
||||
'code': 'fy',
|
||||
'code': 'fy-nl',
|
||||
'name': 'Frisian',
|
||||
'name_local': 'frysk',
|
||||
'name_local': 'Frisian',
|
||||
},
|
||||
'ga': {
|
||||
'bidi': False,
|
||||
@ -209,12 +179,6 @@ LANG_INFO = {
|
||||
'name': 'Irish',
|
||||
'name_local': 'Gaeilge',
|
||||
},
|
||||
'gd': {
|
||||
'bidi': False,
|
||||
'code': 'gd',
|
||||
'name': 'Scottish Gaelic',
|
||||
'name_local': 'Gàidhlig',
|
||||
},
|
||||
'gl': {
|
||||
'bidi': False,
|
||||
'code': 'gl',
|
||||
@ -239,12 +203,6 @@ LANG_INFO = {
|
||||
'name': 'Croatian',
|
||||
'name_local': 'Hrvatski',
|
||||
},
|
||||
'hsb': {
|
||||
'bidi': False,
|
||||
'code': 'hsb',
|
||||
'name': 'Upper Sorbian',
|
||||
'name_local': 'hornjoserbsce',
|
||||
},
|
||||
'hu': {
|
||||
'bidi': False,
|
||||
'code': 'hu',
|
||||
@ -257,12 +215,6 @@ LANG_INFO = {
|
||||
'name': 'Interlingua',
|
||||
'name_local': 'Interlingua',
|
||||
},
|
||||
'io': {
|
||||
'bidi': False,
|
||||
'code': 'io',
|
||||
'name': 'Ido',
|
||||
'name_local': 'ido',
|
||||
},
|
||||
'id': {
|
||||
'bidi': False,
|
||||
'code': 'id',
|
||||
@ -353,12 +305,6 @@ LANG_INFO = {
|
||||
'name': 'Mongolian',
|
||||
'name_local': 'Mongolian',
|
||||
},
|
||||
'mr': {
|
||||
'bidi': False,
|
||||
'code': 'mr',
|
||||
'name': 'Marathi',
|
||||
'name_local': 'मराठी',
|
||||
},
|
||||
'my': {
|
||||
'bidi': False,
|
||||
'code': 'my',
|
||||
@ -441,7 +387,7 @@ LANG_INFO = {
|
||||
'bidi': False,
|
||||
'code': 'sk',
|
||||
'name': 'Slovak',
|
||||
'name_local': 'Slovensky',
|
||||
'name_local': 'slovenský',
|
||||
},
|
||||
'sl': {
|
||||
'bidi': False,
|
||||
@ -534,33 +480,15 @@ LANG_INFO = {
|
||||
'name_local': 'Tiếng Việt',
|
||||
},
|
||||
'zh-cn': {
|
||||
'fallback': ['zh-hans'],
|
||||
},
|
||||
'zh-hans': {
|
||||
'bidi': False,
|
||||
'code': 'zh-hans',
|
||||
'code': 'zh-cn',
|
||||
'name': 'Simplified Chinese',
|
||||
'name_local': '简体中文',
|
||||
},
|
||||
'zh-hant': {
|
||||
'zh-tw': {
|
||||
'bidi': False,
|
||||
'code': 'zh-hant',
|
||||
'code': 'zh-tw',
|
||||
'name': 'Traditional Chinese',
|
||||
'name_local': '繁體中文',
|
||||
},
|
||||
'zh-hk': {
|
||||
'fallback': ['zh-hant'],
|
||||
},
|
||||
'zh-mo': {
|
||||
'fallback': ['zh-hant'],
|
||||
},
|
||||
'zh-my': {
|
||||
'fallback': ['zh-hans'],
|
||||
},
|
||||
'zh-sg': {
|
||||
'fallback': ['zh-hans'],
|
||||
},
|
||||
'zh-tw': {
|
||||
'fallback': ['zh-hant'],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,19 +6,19 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j F، Y'
|
||||
TIME_FORMAT = 'g:i A'
|
||||
# DATETIME_FORMAT =
|
||||
TIME_FORMAT = 'g:i:s A'
|
||||
# DATETIME_FORMAT =
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j F'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y'
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
# NUMBER_GROUPING =
|
||||
# NUMBER_GROUPING =
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,35 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# This file is distributed under the same license as the Django package.
|
||||
#
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j E Y'
|
||||
TIME_FORMAT = 'G:i'
|
||||
DATETIME_FORMAT = 'j E Y, G:i'
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j F'
|
||||
SHORT_DATE_FORMAT = 'd.m.Y'
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%d.%m.%Y', # '25.10.2006'
|
||||
'%d.%m.%y', # '25.10.06'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200'
|
||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30'
|
||||
'%d.%m.%Y', # '25.10.2006'
|
||||
'%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
|
||||
'%d.%m.%y %H:%M:%S.%f', # '25.10.06 14:30:59.000200'
|
||||
'%d.%m.%y %H:%M', # '25.10.06 14:30'
|
||||
'%d.%m.%y', # '25.10.06'
|
||||
]
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space
|
||||
NUMBER_GROUPING = 3
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,19 +6,19 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'd F Y'
|
||||
TIME_FORMAT = 'H:i'
|
||||
# DATETIME_FORMAT =
|
||||
# YEAR_MONTH_FORMAT =
|
||||
TIME_FORMAT = 'H:i:s'
|
||||
# DATETIME_FORMAT =
|
||||
# YEAR_MONTH_FORMAT =
|
||||
MONTH_DAY_FORMAT = 'j F'
|
||||
SHORT_DATE_FORMAT = 'd.m.Y'
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = ' ' # Non-breaking space
|
||||
# NUMBER_GROUPING =
|
||||
THOUSAND_SEPARATOR = ' ' # Non-breaking space
|
||||
# NUMBER_GROUPING =
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,30 +6,19 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j F, Y'
|
||||
TIME_FORMAT = 'g:i A'
|
||||
# DATETIME_FORMAT =
|
||||
TIME_FORMAT = 'g:i:s A'
|
||||
# DATETIME_FORMAT =
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j F'
|
||||
SHORT_DATE_FORMAT = 'j M, Y'
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
FIRST_DAY_OF_WEEK = 6 # Saturday
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%d/%m/%Y', # 25/10/2016
|
||||
'%d/%m/%y', # 25/10/16
|
||||
'%d-%m-%Y', # 25-10-2016
|
||||
'%d-%m-%y', # 25-10-16
|
||||
]
|
||||
TIME_INPUT_FORMATS = [
|
||||
'%H:%M:%S', # 14:30:59
|
||||
'%H:%M', # 14:30
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
'%d/%m/%Y %H:%M:%S', # 25/10/2006 14:30:59
|
||||
'%d/%m/%Y %H:%M', # 25/10/2006 14:30
|
||||
]
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
DECIMAL_SEPARATOR = '.'
|
||||
THOUSAND_SEPARATOR = ','
|
||||
# NUMBER_GROUPING =
|
||||
# NUMBER_GROUPING =
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -11,14 +11,14 @@ DATETIME_FORMAT = 'j. N. Y. G:i T'
|
||||
YEAR_MONTH_FORMAT = 'F Y.'
|
||||
MONTH_DAY_FORMAT = 'j. F'
|
||||
SHORT_DATE_FORMAT = 'Y M j'
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
# NUMBER_GROUPING =
|
||||
# NUMBER_GROUPING =
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,28 +6,29 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = r'j \d\e F \d\e Y'
|
||||
TIME_FORMAT = 'G:i'
|
||||
TIME_FORMAT = 'G:i:s'
|
||||
DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\e\s G:i'
|
||||
YEAR_MONTH_FORMAT = r'F \d\e\l Y'
|
||||
MONTH_DAY_FORMAT = r'j \d\e F'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y'
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y G:i'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
# '31/12/2009', '31/12/09'
|
||||
'%d/%m/%Y', '%d/%m/%y'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d/%m/%Y %H:%M:%S',
|
||||
'%d/%m/%Y %H:%M:%S.%f',
|
||||
'%d/%m/%Y %H:%M',
|
||||
'%d/%m/%y %H:%M:%S',
|
||||
'%d/%m/%y %H:%M:%S.%f',
|
||||
'%d/%m/%y %H:%M',
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
NUMBER_GROUPING = 3
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,40 +6,40 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j. E Y'
|
||||
TIME_FORMAT = 'G:i'
|
||||
DATETIME_FORMAT = 'j. E Y G:i'
|
||||
TIME_FORMAT = 'G:i:s'
|
||||
DATETIME_FORMAT = 'j. E Y G:i:s'
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j. F'
|
||||
SHORT_DATE_FORMAT = 'd.m.Y'
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y G:i'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y G:i:s'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%d.%m.%Y', '%d.%m.%y', # '05.01.2006', '05.01.06'
|
||||
'%d. %m. %Y', '%d. %m. %y', # '5. 1. 2006', '5. 1. 06'
|
||||
'%d. %m. %Y', '%d. %m. %y', # '5. 1. 2006', '5. 1. 06'
|
||||
# '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
|
||||
]
|
||||
)
|
||||
# Kept ISO formats as one is in first position
|
||||
TIME_INPUT_FORMATS = [
|
||||
'%H:%M:%S', # '04:30:59'
|
||||
TIME_INPUT_FORMATS = (
|
||||
'%H:%M:%S', # '04:30:59'
|
||||
'%H.%M', # '04.30'
|
||||
'%H:%M', # '04:30'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d.%m.%Y %H:%M:%S', # '05.01.2006 04:30:59'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '05.01.2006 04:30:59.000200'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '05.01.2006 04:30:59.000200'
|
||||
'%d.%m.%Y %H.%M', # '05.01.2006 04.30'
|
||||
'%d.%m.%Y %H:%M', # '05.01.2006 04:30'
|
||||
'%d.%m.%Y', # '05.01.2006'
|
||||
'%d. %m. %Y %H:%M:%S', # '05. 01. 2006 04:30:59'
|
||||
'%d. %m. %Y %H:%M:%S.%f', # '05. 01. 2006 04:30:59.000200'
|
||||
'%d. %m. %Y %H:%M:%S.%f', # '05. 01. 2006 04:30:59.000200'
|
||||
'%d. %m. %Y %H.%M', # '05. 01. 2006 04.30'
|
||||
'%d. %m. %Y %H:%M', # '05. 01. 2006 04:30'
|
||||
'%d. %m. %Y', # '05. 01. 2006'
|
||||
'%Y-%m-%d %H.%M', # '2006-01-05 04.30'
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space
|
||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space
|
||||
NUMBER_GROUPING = 3
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -5,34 +5,20 @@ from __future__ import unicode_literals
|
||||
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j F Y' # '25 Hydref 2006'
|
||||
TIME_FORMAT = 'P' # '2:30 y.b.'
|
||||
DATETIME_FORMAT = 'j F Y, P' # '25 Hydref 2006, 2:30 y.b.'
|
||||
YEAR_MONTH_FORMAT = 'F Y' # 'Hydref 2006'
|
||||
MONTH_DAY_FORMAT = 'j F' # '25 Hydref'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006'
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 y.b.'
|
||||
FIRST_DAY_OF_WEEK = 1 # 'Dydd Llun'
|
||||
DATE_FORMAT = 'd F Y'
|
||||
TIME_FORMAT = 'g:i:s A'
|
||||
# DATETIME_FORMAT =
|
||||
# YEAR_MONTH_FORMAT =
|
||||
# MONTH_DAY_FORMAT =
|
||||
SHORT_DATE_FORMAT = 'j M Y'
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||
'%Y-%m-%d', # '2006-10-25'
|
||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
|
||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200'
|
||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30'
|
||||
'%d/%m/%Y', # '25/10/2006'
|
||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
|
||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200'
|
||||
'%d/%m/%y %H:%M', # '25/10/06 14:30'
|
||||
'%d/%m/%y', # '25/10/06'
|
||||
]
|
||||
DECIMAL_SEPARATOR = '.'
|
||||
THOUSAND_SEPARATOR = ','
|
||||
NUMBER_GROUPING = 3
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
# DECIMAL_SEPARATOR =
|
||||
# THOUSAND_SEPARATOR =
|
||||
# NUMBER_GROUPING =
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -16,14 +16,14 @@ FIRST_DAY_OF_WEEK = 1
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%d.%m.%Y', # '25.10.2006'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200'
|
||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30'
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
NUMBER_GROUPING = 3
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,26 +6,26 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j. F Y'
|
||||
TIME_FORMAT = 'H:i'
|
||||
DATETIME_FORMAT = 'j. F Y H:i'
|
||||
TIME_FORMAT = 'H:i:s'
|
||||
DATETIME_FORMAT = 'j. F Y H:i:s'
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j. F'
|
||||
SHORT_DATE_FORMAT = 'd.m.Y'
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i:s'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
|
||||
# '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200'
|
||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30'
|
||||
'%d.%m.%Y', # '25.10.2006'
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
NUMBER_GROUPING = 3
|
||||
|
@ -7,26 +7,26 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
DATE_FORMAT = 'j. F Y'
|
||||
TIME_FORMAT = 'H:i'
|
||||
DATETIME_FORMAT = 'j. F Y H:i'
|
||||
TIME_FORMAT = 'H:i:s'
|
||||
DATETIME_FORMAT = 'j. F Y H:i:s'
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j. F'
|
||||
SHORT_DATE_FORMAT = 'd.m.Y'
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i:s'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
|
||||
# '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200'
|
||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200'
|
||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30'
|
||||
'%d.%m.%Y', # '25.10.2006'
|
||||
]
|
||||
)
|
||||
|
||||
# these are the separators for non-monetary numbers. For monetary numbers,
|
||||
# the DECIMAL_SEPARATOR is a . (decimal point) and the THOUSAND_SEPARATOR is a
|
||||
@ -34,5 +34,5 @@ DATETIME_INPUT_FORMATS = [
|
||||
# For details, please refer to http://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de
|
||||
# (in German) and the documentation
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space
|
||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space
|
||||
NUMBER_GROUPING = 3
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -5,34 +5,20 @@ from __future__ import unicode_literals
|
||||
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'd/m/Y'
|
||||
TIME_FORMAT = 'P'
|
||||
DATETIME_FORMAT = 'd/m/Y P'
|
||||
DATE_FORMAT = 'd E Y'
|
||||
TIME_FORMAT = 'g:i:s A'
|
||||
# DATETIME_FORMAT =
|
||||
YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'j F'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y'
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y P'
|
||||
FIRST_DAY_OF_WEEK = 0 # Sunday
|
||||
SHORT_DATE_FORMAT = 'd M Y'
|
||||
# SHORT_DATETIME_FORMAT =
|
||||
# FIRST_DAY_OF_WEEK =
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%d/%m/%Y', '%d/%m/%y', '%Y-%m-%d', # '25/10/2006', '25/10/06', '2006-10-25',
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
|
||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200'
|
||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30'
|
||||
'%d/%m/%Y', # '25/10/2006'
|
||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
|
||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200'
|
||||
'%d/%m/%y %H:%M', # '25/10/06 14:30'
|
||||
'%d/%m/%y', # '25/10/06'
|
||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||
'%Y-%m-%d', # '2006-10-25'
|
||||
]
|
||||
# DATE_INPUT_FORMATS =
|
||||
# TIME_INPUT_FORMATS =
|
||||
# DATETIME_INPUT_FORMATS =
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
NUMBER_GROUPING = 3
|
||||
# NUMBER_GROUPING =
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -12,19 +12,19 @@ YEAR_MONTH_FORMAT = 'F Y'
|
||||
MONTH_DAY_FORMAT = 'F j'
|
||||
SHORT_DATE_FORMAT = 'm/d/Y'
|
||||
SHORT_DATETIME_FORMAT = 'm/d/Y P'
|
||||
FIRST_DAY_OF_WEEK = 0 # Sunday
|
||||
FIRST_DAY_OF_WEEK = 0 # Sunday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
# Kept ISO formats as they are in first position
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
|
||||
# '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
|
||||
# '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
|
||||
# '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
|
||||
# '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||
@ -37,7 +37,8 @@ DATETIME_INPUT_FORMATS = [
|
||||
'%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
|
||||
'%m/%d/%y %H:%M', # '10/25/06 14:30'
|
||||
'%m/%d/%y', # '10/25/06'
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = '.'
|
||||
THOUSAND_SEPARATOR = ','
|
||||
NUMBER_GROUPING = 3
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,42 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# This file is distributed under the same license as the Django package.
|
||||
#
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j M Y' # '25 Oct 2006'
|
||||
TIME_FORMAT = 'P' # '2:30 p.m.'
|
||||
DATETIME_FORMAT = 'j M Y, P' # '25 Oct 2006, 2:30 p.m.'
|
||||
YEAR_MONTH_FORMAT = 'F Y' # 'October 2006'
|
||||
MONTH_DAY_FORMAT = 'j F' # '25 October'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006'
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 p.m.'
|
||||
FIRST_DAY_OF_WEEK = 0 # Sunday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
|
||||
# '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
|
||||
# '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
|
||||
# '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
|
||||
# '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||
'%Y-%m-%d', # '2006-10-25'
|
||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
|
||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200'
|
||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30'
|
||||
'%d/%m/%Y', # '25/10/2006'
|
||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
|
||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200'
|
||||
'%d/%m/%y %H:%M', # '25/10/06 14:30'
|
||||
'%d/%m/%y', # '25/10/06'
|
||||
]
|
||||
DECIMAL_SEPARATOR = '.'
|
||||
THOUSAND_SEPARATOR = ','
|
||||
NUMBER_GROUPING = 3
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,24 +6,24 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = 'j M Y' # '25 Oct 2006'
|
||||
TIME_FORMAT = 'P' # '2:30 p.m.'
|
||||
DATETIME_FORMAT = 'j M Y, P' # '25 Oct 2006, 2:30 p.m.'
|
||||
TIME_FORMAT = 'P' # '2:30 pm'
|
||||
DATETIME_FORMAT = 'j M Y, P' # '25 Oct 2006, 2:30 pm'
|
||||
YEAR_MONTH_FORMAT = 'F Y' # 'October 2006'
|
||||
MONTH_DAY_FORMAT = 'j F' # '25 October'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006'
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 p.m.'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 pm'
|
||||
FIRST_DAY_OF_WEEK = 0 # Sunday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
|
||||
# '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
|
||||
# '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
|
||||
# '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
|
||||
# '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||
@ -36,7 +36,8 @@ DATETIME_INPUT_FORMATS = [
|
||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200'
|
||||
'%d/%m/%y %H:%M', # '25/10/06 14:30'
|
||||
'%d/%m/%y', # '25/10/06'
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = '.'
|
||||
THOUSAND_SEPARATOR = ','
|
||||
NUMBER_GROUPING = 3
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,52 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# This file is distributed under the same license as the Django package.
|
||||
#
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = r'j\-\a \d\e F Y' # '26-a de julio 1887'
|
||||
TIME_FORMAT = 'H:i' # '18:59'
|
||||
DATETIME_FORMAT = r'j\-\a \d\e F Y\, \j\e H:i' # '26-a de julio 1887, je 18:59'
|
||||
YEAR_MONTH_FORMAT = r'F \d\e Y' # 'julio de 1887'
|
||||
MONTH_DAY_FORMAT = r'j\-\a \d\e F' # '26-a de julio'
|
||||
SHORT_DATE_FORMAT = 'Y-m-d' # '1887-07-26'
|
||||
SHORT_DATETIME_FORMAT = 'Y-m-d H:i' # '1887-07-26 18:59'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday (lundo)
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%Y-%m-%d', # '1887-07-26'
|
||||
'%y-%m-%d', # '87-07-26'
|
||||
'%Y %m %d', # '1887 07 26'
|
||||
'%d-a de %b %Y', # '26-a de jul 1887'
|
||||
'%d %b %Y', # '26 jul 1887'
|
||||
'%d-a de %B %Y', # '26-a de julio 1887'
|
||||
'%d %B %Y', # '26 julio 1887'
|
||||
'%d %m %Y', # '26 07 1887'
|
||||
]
|
||||
TIME_INPUT_FORMATS = [
|
||||
'%H:%M:%S', # '18:59:00'
|
||||
'%H:%M', # '18:59'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
'%Y-%m-%d %H:%M:%S', # '1887-07-26 18:59:00'
|
||||
'%Y-%m-%d %H:%M', # '1887-07-26 18:59'
|
||||
'%Y-%m-%d', # '1887-07-26'
|
||||
|
||||
'%Y.%m.%d %H:%M:%S', # '1887.07.26 18:59:00'
|
||||
'%Y.%m.%d %H:%M', # '1887.07.26 18:59'
|
||||
'%Y.%m.%d', # '1887.07.26'
|
||||
|
||||
'%d/%m/%Y %H:%M:%S', # '26/07/1887 18:59:00'
|
||||
'%d/%m/%Y %H:%M', # '26/07/1887 18:59'
|
||||
'%d/%m/%Y', # '26/07/1887'
|
||||
|
||||
'%y-%m-%d %H:%M:%S', # '87-07-26 18:59:00'
|
||||
'%y-%m-%d %H:%M', # '87-07-26 18:59'
|
||||
'%y-%m-%d', # '87-07-26'
|
||||
]
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space
|
||||
NUMBER_GROUPING = 3
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,28 +6,29 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = r'j \d\e F \d\e Y'
|
||||
TIME_FORMAT = 'H:i'
|
||||
TIME_FORMAT = 'H:i:s'
|
||||
DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i'
|
||||
YEAR_MONTH_FORMAT = r'F \d\e Y'
|
||||
MONTH_DAY_FORMAT = r'j \d\e F'
|
||||
SHORT_DATE_FORMAT = 'd/m/Y'
|
||||
SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
FIRST_DAY_OF_WEEK = 1 # Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
# '31/12/2009', '31/12/09'
|
||||
'%d/%m/%Y', '%d/%m/%y'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d/%m/%Y %H:%M:%S',
|
||||
'%d/%m/%Y %H:%M:%S.%f',
|
||||
'%d/%m/%Y %H:%M',
|
||||
'%d/%m/%y %H:%M:%S',
|
||||
'%d/%m/%y %H:%M:%S.%f',
|
||||
'%d/%m/%y %H:%M',
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
NUMBER_GROUPING = 3
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -6,28 +6,28 @@ from __future__ import unicode_literals
|
||||
# The *_FORMAT strings use the Django date format syntax,
|
||||
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||
DATE_FORMAT = r'j N Y'
|
||||
TIME_FORMAT = r'H:i'
|
||||
DATETIME_FORMAT = r'j N Y H:i'
|
||||
TIME_FORMAT = r'H:i:s'
|
||||
DATETIME_FORMAT = r'j N Y H:i:s'
|
||||
YEAR_MONTH_FORMAT = r'F Y'
|
||||
MONTH_DAY_FORMAT = r'j \d\e F'
|
||||
SHORT_DATE_FORMAT = r'd/m/Y'
|
||||
SHORT_DATETIME_FORMAT = r'd/m/Y H:i'
|
||||
FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday
|
||||
FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday
|
||||
|
||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax,
|
||||
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
DATE_INPUT_FORMATS = [
|
||||
'%d/%m/%Y', # '31/12/2009'
|
||||
'%d/%m/%y', # '31/12/09'
|
||||
]
|
||||
DATETIME_INPUT_FORMATS = [
|
||||
DATE_INPUT_FORMATS = (
|
||||
'%d/%m/%Y', # '31/12/2009'
|
||||
'%d/%m/%y', # '31/12/09'
|
||||
)
|
||||
DATETIME_INPUT_FORMATS = (
|
||||
'%d/%m/%Y %H:%M:%S',
|
||||
'%d/%m/%Y %H:%M:%S.%f',
|
||||
'%d/%m/%Y %H:%M',
|
||||
'%d/%m/%y %H:%M:%S',
|
||||
'%d/%m/%y %H:%M:%S.%f',
|
||||
'%d/%m/%y %H:%M',
|
||||
]
|
||||
)
|
||||
DECIMAL_SEPARATOR = ','
|
||||
THOUSAND_SEPARATOR = '.'
|
||||
NUMBER_GROUPING = 3
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user