Full metal cleanup

This commit is contained in:
Martin Mahner 2018-03-12 11:59:38 +01:00
parent 8582114b90
commit 2a1841ac56
27 changed files with 295 additions and 552 deletions

View file

@ -10,7 +10,8 @@ env:
- DJANGO: django>=1.8,<1.9 - DJANGO: django>=1.8,<1.9
- DJANGO: django>=1.9,<1.10 - DJANGO: django>=1.9,<1.10
- DJANGO: django>=1.10,<1.11 - DJANGO: django>=1.10,<1.11
- DJANGO: django>=1.11,<1.12 - DJANGO: django>=1.11,<2.0
- DJANGO: django>=2.0
before_install: before_install:
- pip install codecov - pip install codecov

View file

@ -4,6 +4,8 @@ Changelog
3.0 (master) 3.0 (master)
------------- -------------
* Dropped support for Django 1.8 to 1.10 due to it's general end of support.
The project will likely work well but it's no longer specifically tested.
* General code cleanup * General code cleanup
* Removed jQuery, all Javascript is native. * Removed jQuery, all Javascript is native.
* Removed Bootstrap for theming. * Removed Bootstrap for theming.

14
Pipfile
View file

@ -7,21 +7,11 @@ name = "pypi"
[dev-packages] [dev-packages]
docutils = "*"
sphinx-rtd-theme = "*" sphinx-rtd-theme = "*"
sphinx = "*" sphinx = "*"
"psycopg2" = "*" "e1839a8" = {path = ".", extras = ["standalone"], editable = true}
[packages] [packages]
django = ">=1.8,<2.0" pylint = "*"
pygments = ">=1.6"
django-markup = ">=1.0"
django-sslserver = "*"
django-csp = "==3.3"
[requires]
python_version = "3.6"

322
Pipfile.lock generated
View file

@ -1,25 +1,10 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "0549fbbea19d5c6906d2c16e5fa3561f428a7a4a4db5d841b41e9fb7cd0dba44" "sha256": "bc3ecc152b070bbc2053c9b147a2b1c66c062997c87b8b7086d0de37efd9407d"
},
"host-environment-markers": {
"implementation_name": "cpython",
"implementation_version": "3.6.2",
"os_name": "posix",
"platform_machine": "x86_64",
"platform_python_implementation": "CPython",
"platform_release": "17.3.0",
"platform_system": "Darwin",
"platform_version": "Darwin Kernel Version 17.3.0: Thu Nov 9 18:09:22 PST 2017; root:xnu-4570.31.3~1/RELEASE_X86_64",
"python_full_version": "3.6.2",
"python_version": "3.6",
"sys_platform": "darwin"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {},
"python_version": "3.6"
},
"sources": [ "sources": [
{ {
"name": "pypi", "name": "pypi",
@ -29,59 +14,81 @@
] ]
}, },
"default": { "default": {
"django": { "astroid": {
"hashes": [ "hashes": [
"sha256:90952c46d2b7b042db00e98b05f5dd97a5775822948d46fd82ff074d8ac75853", "sha256:db5cfc9af6e0b60cd07c19478fb54021fc20d2d189882fbcbc94fc69a8aecc58",
"sha256:353d129f22e1d24980d6061666f435781141c2dfd852f14ffc8a670175821034" "sha256:f0a0e386dbca9f93ea9f3ea6f32b37a24720502b7baa9cb17c3976a680d43a06"
], ],
"version": "==1.11.9" "version": "==1.6.1"
}, },
"django-csp": { "isort": {
"hashes": [ "hashes": [
"sha256:a95eeeb04df155b6270612238700f16abd2b0cc3d32dbcfca8c7fd06d26dacba", "sha256:1153601da39a25b14ddc54955dbbacbb6b2d19135386699e2ad58517953b34af",
"sha256:db082b75075672fb9cf4a622c75c94ee624cb566ffe9d2a645687e58598b6d39" "sha256:b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8",
"sha256:ec9ef8f4a9bc6f71eec99e1806bfa2de401650d996c59330782b89a5555c1497"
], ],
"version": "==3.3" "version": "==4.3.4"
}, },
"django-markup": { "lazy-object-proxy": {
"hashes": [ "hashes": [
"sha256:4ef5d268d9376253513f3a7897ac15da48795412b34c8c9c4b9ef0a472ff21b7" "sha256:0ce34342b419bd8f018e6666bfef729aec3edf62345a53b537a4dcc115746a33",
"sha256:1b668120716eb7ee21d8a38815e5eb3bb8211117d9a90b0f8e21722c0758cc39",
"sha256:209615b0fe4624d79e50220ce3310ca1a9445fd8e6d3572a896e7f9146bbf019",
"sha256:27bf62cb2b1a2068d443ff7097ee33393f8483b570b475db8ebf7e1cba64f088",
"sha256:27ea6fd1c02dcc78172a82fc37fcc0992a94e4cecf53cb6d73f11749825bd98b",
"sha256:2c1b21b44ac9beb0fc848d3993924147ba45c4ebc24be19825e57aabbe74a99e",
"sha256:2df72ab12046a3496a92476020a1a0abf78b2a7db9ff4dc2036b8dd980203ae6",
"sha256:320ffd3de9699d3892048baee45ebfbbf9388a7d65d832d7e580243ade426d2b",
"sha256:50e3b9a464d5d08cc5227413db0d1c4707b6172e4d4d915c1c70e4de0bbff1f5",
"sha256:5276db7ff62bb7b52f77f1f51ed58850e315154249aceb42e7f4c611f0f847ff",
"sha256:61a6cf00dcb1a7f0c773ed4acc509cb636af2d6337a08f362413c76b2b47a8dd",
"sha256:6ae6c4cb59f199d8827c5a07546b2ab7e85d262acaccaacd49b62f53f7c456f7",
"sha256:7661d401d60d8bf15bb5da39e4dd72f5d764c5aff5a86ef52a042506e3e970ff",
"sha256:7bd527f36a605c914efca5d3d014170b2cb184723e423d26b1fb2fd9108e264d",
"sha256:7cb54db3535c8686ea12e9535eb087d32421184eacc6939ef15ef50f83a5e7e2",
"sha256:7f3a2d740291f7f2c111d86a1c4851b70fb000a6c8883a59660d95ad57b9df35",
"sha256:81304b7d8e9c824d058087dcb89144842c8e0dea6d281c031f59f0acf66963d4",
"sha256:933947e8b4fbe617a51528b09851685138b49d511af0b6c0da2539115d6d4514",
"sha256:94223d7f060301b3a8c09c9b3bc3294b56b2188e7d8179c762a1cda72c979252",
"sha256:ab3ca49afcb47058393b0122428358d2fbe0408cf99f1b58b295cfeb4ed39109",
"sha256:bd6292f565ca46dee4e737ebcc20742e3b5be2b01556dafe169f6c65d088875f",
"sha256:cb924aa3e4a3fb644d0c463cad5bc2572649a6a3f68a7f8e4fbe44aaa6d77e4c",
"sha256:d0fc7a286feac9077ec52a927fc9fe8fe2fabab95426722be4c953c9a8bede92",
"sha256:ddc34786490a6e4ec0a855d401034cbd1242ef186c20d79d2166d6a4bd449577",
"sha256:e34b155e36fa9da7e1b7c738ed7767fc9491a62ec6af70fe9da4a057759edc2d",
"sha256:e5b9e8f6bda48460b7b143c3821b21b452cb3a835e6bbd5dd33aa0c8d3f5137d",
"sha256:e81ebf6c5ee9684be8f2c87563880f93eedd56dd2b6146d8a725b50b7e5adb0f",
"sha256:eb91be369f945f10d3a49f5f9be8b3d0b93a4c2be8f8a5b83b0571b8123e0a7a",
"sha256:f460d1ceb0e4a5dcb2a652db0904224f367c9b3c1470d5a7683c0480e582468b"
], ],
"version": "==1.2" "version": "==1.3.1"
}, },
"django-sslserver": { "mccabe": {
"hashes": [ "hashes": [
"sha256:6b2514427b4eed0713e478ae6dfdda622070a98f657d61a4502bf42b6311c66e" "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
"sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
], ],
"version": "==0.20" "version": "==0.6.1"
}, },
"pygments": { "pylint": {
"hashes": [ "hashes": [
"sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", "sha256:156839bedaa798febee72893beef00c650c2e7abafb5586fc7a6a56be7f80412",
"sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" "sha256:4fe3b99da7e789545327b75548cee6b511e4faa98afe268130fea1af4b5ec022"
], ],
"version": "==2.2.0" "version": "==1.8.2"
},
"pytz": {
"hashes": [
"sha256:80af0f3008046b9975242012a985f04c5df1f01eed4ec1633d56cc47a75a6a48",
"sha256:feb2365914948b8620347784b6b6da356f31c9d03560259070b2f30cff3d469d",
"sha256:59707844a9825589878236ff2f4e0dc9958511b7ffaae94dc615da07d4a68d33",
"sha256:d0ef5ef55ed3d37854320d4926b04a4cb42a2e88f71da9ddfdacfde8e364f027",
"sha256:c41c62827ce9cafacd6f2f7018e4f83a6f1986e87bfd000b8cfbd4ab5da95f1a",
"sha256:8cc90340159b5d7ced6f2ba77694d946fc975b09f1a51d93f3ce3bb399396f94",
"sha256:dd2e4ca6ce3785c8dd342d1853dd9052b19290d5bf66060846e5dc6b8d6667f7",
"sha256:699d18a2a56f19ee5698ab1123bbcc1d269d061996aeb1eda6d89248d3542b82",
"sha256:fae4cffc040921b8a2d60c6cf0b5d662c1190fe54d718271db4eb17d44a185b7"
],
"version": "==2017.3"
}, },
"six": { "six": {
"hashes": [ "hashes": [
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb", "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9" "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
], ],
"version": "==1.11.0" "version": "==1.11.0"
},
"wrapt": {
"hashes": [
"sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6"
],
"version": "==1.10.11"
} }
}, },
"develop": { "develop": {
@ -94,46 +101,108 @@
}, },
"babel": { "babel": {
"hashes": [ "hashes": [
"sha256:f20b2acd44f587988ff185d8949c3e208b4b3d5d20fcab7d91fe481ffa435528", "sha256:8ce4cb6fdd4393edd323227cba3a077bceb2a6ce5201c902c65e730046f41f14",
"sha256:6007daf714d0cd5524bbe436e2d42b3c20e68da66289559341e48d2cd6d25811" "sha256:ad209a68d7162c4cff4b29cdebe3dec4cef75492df501b0049a9433c96ce6f80"
], ],
"version": "==2.5.1" "version": "==2.5.3"
}, },
"certifi": { "certifi": {
"hashes": [ "hashes": [
"sha256:244be0d93b71e93fc0a0a479862051414d0e00e16435707e5bf5000f92e04694", "sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296",
"sha256:5ec74291ca1136b40f0379e1128ff80e866597e4e2c1e755739a913bbc3613c0" "sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d"
], ],
"version": "==2017.11.5" "version": "==2018.1.18"
}, },
"chardet": { "chardet": {
"hashes": [ "hashes": [
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691", "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae" "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
], ],
"version": "==3.0.4" "version": "==3.0.4"
}, },
"coverage": {
"hashes": [
"sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba",
"sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed",
"sha256:104ab3934abaf5be871a583541e8829d6c19ce7bde2923b2751e0d3ca44db60a",
"sha256:15b111b6a0f46ee1a485414a52a7ad1d703bdf984e9ed3c288a4414d3871dcbd",
"sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640",
"sha256:1c383d2ef13ade2acc636556fd544dba6e14fa30755f26812f54300e401f98f2",
"sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162",
"sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508",
"sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249",
"sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694",
"sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a",
"sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287",
"sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1",
"sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000",
"sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1",
"sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e",
"sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5",
"sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062",
"sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba",
"sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc",
"sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc",
"sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99",
"sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653",
"sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c",
"sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558",
"sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f",
"sha256:9e112fcbe0148a6fa4f0a02e8d58e94470fc6cb82a5481618fea901699bf34c4",
"sha256:ac4fef68da01116a5c117eba4dd46f2e06847a497de5ed1d64bb99a5fda1ef91",
"sha256:b8815995e050764c8610dbc82641807d196927c3dbed207f0a079833ffcf588d",
"sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9",
"sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd",
"sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d",
"sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6",
"sha256:e4d96c07229f58cb686120f168276e434660e4358cc9cf3b0464210b04913e77",
"sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80",
"sha256:f8a923a85cb099422ad5a2e345fe877bbc89a8a8b23235824a93488150e45f6e"
],
"version": "==4.5.1"
},
"django": {
"hashes": [
"sha256:3d9916515599f757043c690ae2b5ea28666afa09779636351da505396cbb2f19",
"sha256:769f212ffd5762f72c764fa648fca3b7f7dd4ec27407198b68e7c4abf4609fd0"
],
"version": "==2.0.3"
},
"django-csp": {
"hashes": [
"sha256:a95eeeb04df155b6270612238700f16abd2b0cc3d32dbcfca8c7fd06d26dacba",
"sha256:db082b75075672fb9cf4a622c75c94ee624cb566ffe9d2a645687e58598b6d39"
],
"version": "==3.3"
},
"docutils": { "docutils": {
"hashes": [ "hashes": [
"sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6",
"sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6",
"sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274" "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274",
"sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6"
], ],
"version": "==0.14" "version": "==0.14"
}, },
"e1839a8": {
"editable": true,
"extras": [
"standalone"
],
"path": "."
},
"idna": { "idna": {
"hashes": [ "hashes": [
"sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4", "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f",
"sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f" "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4"
], ],
"version": "==2.6" "version": "==2.6"
}, },
"imagesize": { "imagesize": {
"hashes": [ "hashes": [
"sha256:6ebdc9e0ad188f9d1b2cdd9bc59cbe42bf931875e829e7a595e6b3abdc05cdfb", "sha256:3620cc0cadba3f7475f9940d22431fc4d407269f1be59ec9b8edcca26440cf18",
"sha256:0ab2c62b87987e3252f89d30b7cedbec12a01af9274af9ffa48108f2c13c6062" "sha256:5b326e4678b6925158ccc66a9fa3122b6106d7c876ee32d7de6ce59385b96315"
], ],
"version": "==0.7.1" "version": "==1.0.0"
}, },
"jinja2": { "jinja2": {
"hashes": [ "hashes": [
@ -148,41 +217,25 @@
], ],
"version": "==1.0" "version": "==1.0"
}, },
"psycopg2": { "packaging": {
"hashes": [ "hashes": [
"sha256:594aa9a095de16614f703d759e10c018bdffeafce2921b8e80a0e8a0ebbc12e5", "sha256:e9215d2d2535d3ae866c3d6efc77d5b24a0192cce0ff20e42896cc0664f889c0",
"sha256:1cf5d84290c771eeecb734abe2c6c3120e9837eb12f99474141a862b9061ac51", "sha256:f019b770dd64e585a99714f1fd5e01c7a8f11b45635aa953fd41c689a657375b"
"sha256:0344b181e1aea37a58c218ccb0f0f771295de9aa25a625ed076e6996c6530f9e",
"sha256:25250867a4cd1510fb755ef9cb38da3065def999d8e92c44e49a39b9b76bc893",
"sha256:317612d5d0ca4a9f7e42afb2add69b10be360784d21ce4ecfbca19f1f5eadf43",
"sha256:9d6266348b15b4a48623bf4d3e50445d8e581da413644f365805b321703d0fac",
"sha256:ddca39cc55877653b5fcf59976d073e3d58c7c406ef54ae8e61ddf8782867182",
"sha256:988d2ec7560d42ef0ac34b3b97aad14c4f068792f00e1524fa1d3749fe4e4b64",
"sha256:7a9c6c62e6e05df5406e9b5235c31c376a22620ef26715a663cee57083b3c2ea",
"sha256:7a75565181e75ba0b9fb174b58172bf6ea9b4331631cfe7bafff03f3641f5d73",
"sha256:94e4128ba1ea56f02522fffac65520091a9de3f5c00da31539e085e13db4771b",
"sha256:92179bd68c2efe72924a99b6745a9172471931fc296f9bfdf9645b75eebd6344",
"sha256:b9358e203168fef7bfe9f430afaed3a2a624717a1d19c7afa7dfcbd76e3cd95c",
"sha256:009e0bc09a57dbef4b601cb8b46a2abad51f5274c8be4bba276ff2884cd4cc53",
"sha256:d3ac07240e2304181ffdb13c099840b5eb555efc7be9344503c0c03aa681de79",
"sha256:40fa5630cd7d237cd93c4d4b64b9e5ed9273d1cfce55241c7f9066f5db70629d",
"sha256:6c2f1a76a9ebd9ecf7825b9e20860139ca502c2bf1beabf6accf6c9e66a7e0c3",
"sha256:37f54452c7787dbdc0a634ca9773362b91709917f0b365ed14b831f03cbd34ba",
"sha256:8f5942a4daf1ffac42109dc4a72f786af4baa4fa702ede1d7c57b4b696c2e7d6",
"sha256:bf708455cd1e9fa96c05126e89a0c59b200d086c7df7bbafc7d9be769e4149a3",
"sha256:82c40ea3ac1555e0462803380609fbe8b26f52620f3d4f8eb480cfd8ceed8a14",
"sha256:207ba4f9125a0a4200691e82d5eee7ea1485708eabe99a07fc7f08696fae62f4",
"sha256:0cd4c848f0e9d805d531e44973c8f48962e20eb7fc0edac3db4f9dbf9ed5ab82",
"sha256:57baf63aeb2965ca4b52613ce78e968b6d2bde700c97f6a7e8c6c236b51ab83e",
"sha256:2954557393cfc9a5c11a5199c7a78cd9c0c793a047552d27b1636da50d013916",
"sha256:7c31dade89634807196a6b20ced831fbd5bec8a21c4e458ea950c9102c3aa96f",
"sha256:1286dd16d0e46d59fa54582725986704a7a3f3d9aca6c5902a7eceb10c60cb7e",
"sha256:697ff63bc5451e0b0db48ad205151123d25683b3754198be7ab5fcb44334e519",
"sha256:fc993c9331d91766d54757bbc70231e29d5ceb2d1ac08b1570feaa0c38ab9582",
"sha256:9d64fed2681552ed642e9c0cc831a9e95ab91de72b47d0cb68b5bf506ba88647",
"sha256:5c3213be557d0468f9df8fe2487eaf2990d9799202c5ff5cb8d394d09fad9b2a"
], ],
"version": "==2.7.3.2" "version": "==17.1"
},
"pluggy": {
"hashes": [
"sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff"
],
"version": "==0.6.0"
},
"py": {
"hashes": [
"sha256:8cca5c229d225f8c1e3085be4fcf306090b00850fefad892f9d96c7b6e2f310f",
"sha256:ca18943e28235417756316bfada6cd96b23ce60dd532642690dcfdaba988a76d"
],
"version": "==1.5.2"
}, },
"pygments": { "pygments": {
"hashes": [ "hashes": [
@ -191,19 +244,31 @@
], ],
"version": "==2.2.0" "version": "==2.2.0"
}, },
"pyparsing": {
"hashes": [
"sha256:0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04",
"sha256:281683241b25fe9b80ec9d66017485f6deff1af5cde372469134b56ca8447a07",
"sha256:8f1e18d3fd36c6795bb7e02a39fd05c611ffc2596c1e0d995d34d67630426c18",
"sha256:9e8143a3e15c13713506886badd96ca4b579a87fbdf49e550dbfc057d6cb218e",
"sha256:b8b3117ed9bdf45e14dcc89345ce638ec7e0e29b2b579fa1ecf32ce45ebac8a5",
"sha256:e4d45427c6e20a59bf4f88c639dcc03ce30d193112047f94012102f235853a58",
"sha256:fee43f17a9c4087e7ed1605bd6df994c6173c1e977d7ade7b651292fab2bd010"
],
"version": "==2.2.0"
},
"pytz": { "pytz": {
"hashes": [ "hashes": [
"sha256:80af0f3008046b9975242012a985f04c5df1f01eed4ec1633d56cc47a75a6a48", "sha256:07edfc3d4d2705a20a6e99d97f0c4b61c800b8232dc1c04d87e8554f130148dd",
"sha256:feb2365914948b8620347784b6b6da356f31c9d03560259070b2f30cff3d469d", "sha256:3a47ff71597f821cd84a162e71593004286e5be07a340fd462f0d33a760782b5",
"sha256:59707844a9825589878236ff2f4e0dc9958511b7ffaae94dc615da07d4a68d33", "sha256:410bcd1d6409026fbaa65d9ed33bf6dd8b1e94a499e32168acfc7b332e4095c0",
"sha256:d0ef5ef55ed3d37854320d4926b04a4cb42a2e88f71da9ddfdacfde8e364f027", "sha256:5bd55c744e6feaa4d599a6cbd8228b4f8f9ba96de2c38d56f08e534b3c9edf0d",
"sha256:c41c62827ce9cafacd6f2f7018e4f83a6f1986e87bfd000b8cfbd4ab5da95f1a", "sha256:61242a9abc626379574a166dc0e96a66cd7c3b27fc10868003fa210be4bff1c9",
"sha256:8cc90340159b5d7ced6f2ba77694d946fc975b09f1a51d93f3ce3bb399396f94", "sha256:887ab5e5b32e4d0c86efddd3d055c1f363cbaa583beb8da5e22d2fa2f64d51ef",
"sha256:dd2e4ca6ce3785c8dd342d1853dd9052b19290d5bf66060846e5dc6b8d6667f7", "sha256:ba18e6a243b3625513d85239b3e49055a2f0318466e0b8a92b8fb8ca7ccdf55f",
"sha256:699d18a2a56f19ee5698ab1123bbcc1d269d061996aeb1eda6d89248d3542b82", "sha256:ed6509d9af298b7995d69a440e2822288f2eca1681b8cce37673dbb10091e5fe",
"sha256:fae4cffc040921b8a2d60c6cf0b5d662c1190fe54d718271db4eb17d44a185b7" "sha256:f93ddcdd6342f94cea379c73cddb5724e0d6d0a1c91c9bdef364dc0368ba4fda"
], ],
"version": "==2017.3" "version": "==2018.3"
}, },
"requests": { "requests": {
"hashes": [ "hashes": [
@ -214,47 +279,45 @@
}, },
"six": { "six": {
"hashes": [ "hashes": [
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb", "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9" "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
], ],
"version": "==1.11.0" "version": "==1.11.0"
}, },
"snowballstemmer": { "snowballstemmer": {
"hashes": [ "hashes": [
"sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89", "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128",
"sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128" "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89"
], ],
"version": "==1.2.1" "version": "==1.2.1"
}, },
"sphinx": { "sphinx": {
"hashes": [ "hashes": [
"sha256:fdf77f4f30d84a314c797d67fe7d1b46665e6c48a25699d7bf0610e05a2221d4", "sha256:41ae26acc6130ccf6ed47e5cca73742b80d55a134f0ab897c479bba8d3640b8e",
"sha256:c6de5dbdbb7a0d7d2757f4389cc00e8f6eb3c49e1772378967a12cfcf2cfe098" "sha256:da987de5fcca21a4acc7f67a86a363039e67ac3e8827161e61b91deb131c0ee8"
], ],
"version": "==1.6.5" "version": "==1.7.1"
}, },
"sphinx-rtd-theme": { "sphinx-rtd-theme": {
"hashes": [ "hashes": [
"sha256:62ee4752716e698bad7de8a18906f42d33664128eea06c46b718fc7fbd1a9f5c", "sha256:2df74b8ff6fae6965c527e97cca6c6c944886aae474b490e17f92adfbe843417",
"sha256:2df74b8ff6fae6965c527e97cca6c6c944886aae474b490e17f92adfbe843417" "sha256:62ee4752716e698bad7de8a18906f42d33664128eea06c46b718fc7fbd1a9f5c"
], ],
"version": "==0.2.4" "version": "==0.2.4"
}, },
"sphinxcontrib-websupport": { "sphinxcontrib-websupport": {
"hashes": [ "hashes": [
"sha256:f4932e95869599b89bf4f80fc3989132d83c9faa5bf633e7b5e0c25dffb75da2", "sha256:7a85961326aa3a400cd4ad3c816d70ed6f7c740acd7ce5d78cd0a67825072eb9",
"sha256:7a85961326aa3a400cd4ad3c816d70ed6f7c740acd7ce5d78cd0a67825072eb9" "sha256:f4932e95869599b89bf4f80fc3989132d83c9faa5bf633e7b5e0c25dffb75da2"
], ],
"version": "==1.0.1" "version": "==1.0.1"
}, },
"typing": { "tox": {
"hashes": [ "hashes": [
"sha256:349b1f9c109c84b53ac79ac1d822eaa68fc91d63b321bd9392df15098f746f53", "sha256:752f5ec561c6c08c5ecb167d3b20f4f4ffc158c0ab78855701a75f5cef05f4b8",
"sha256:63a8255fe7c6269916baa440eb9b6a67139b0b97a01af632e7bd2842e1e02f15", "sha256:8af30fd835a11f3ff8e95176ccba5a4e60779df4d96a9dfefa1a1704af263225"
"sha256:d514bd84b284dd3e844f0305ac07511f097e325171f6cc4a20878d11ad771849"
], ],
"markers": "python_version < '3.5'", "version": "==2.9.1"
"version": "==3.6.2"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
@ -262,6 +325,13 @@
"sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
], ],
"version": "==1.22" "version": "==1.22"
},
"virtualenv": {
"hashes": [
"sha256:02f8102c2436bb03b3ee6dede1919d1dac8a427541652e5ec95171ec8adbc93a",
"sha256:39d88b533b422825d644087a21e78c45cf5af0ef7a99a1fc9fbb7b481e5c85b0"
],
"version": "==15.1.0"
} }
} }
} }

View file

@ -11,7 +11,7 @@
# #
# All configuration values have a default; values that are commented out # All configuration values have a default; values that are commented out
# serve to show the default. # serve to show the default.
#import sys import sys
import os import os
# If extensions (or modules to document with autodoc) are in another directory, # If extensions (or modules to document with autodoc) are in another directory,
@ -95,11 +95,14 @@ pygments_style = 'sphinx'
# -- Options for HTML output ---------------------------------------------- # -- Options for HTML output ----------------------------------------------
if os.environ.get('READTHEDOCS', None) == 'True': try:
import sphinx_rtd_theme import sphinx_rtd_theme
html_theme = "sphinx_rtd_theme" html_theme = "sphinx_rtd_theme"
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
except ImportError:
sys.stderr.write('Sphinx "rtd" theme is not installed.'
'Fallback to regular theme.')
# The theme to use for HTML and HTML Help pages. See the documentation for # The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes. # a list of builtin themes.
# html_theme = 'default' # html_theme = 'default'

View file

@ -2,28 +2,25 @@
Installation for local development Installation for local development
================================== ==================================
Ready to contribute? Here's how to set up `dpaste` for local development. Local development is done with `pipenv`_ to maintain packages.
1. Fork the `dpaste` repo on GitHub. Installation::
2. Clone your fork locally::
$ git clone https://github.com/<your_username>/dpaste.git
3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper
installed, this is how you set up your fork for local development::
$ cd dpaste/ $ cd dpaste/
$ pipenv install --three --dev $ pipenv install --three --dev
4. Copy the settings file and edit it, to meet your needs:: Copy the settings file and edit it, to meet your needs::
$ cp dpaste/settings/local.py.example dpaste/settings/local.py $ cp dpaste/settings/local.py.example dpaste/settings/local.py
$ nano dpaste/settings/local.py $ nano dpaste/settings/local.py
5. Initialze the database by running the command:: Run the testsuite::
$ pipenv run ./runtests.py
To run the project on your local machine::
$ pipenv run ./manage.py migrate $ pipenv run ./manage.py migrate
6. Start up the webserver::
$ pipenv run ./manage.py runserver $ pipenv run ./manage.py runserver
.. _pipenv: https://docs.pipenv.org/

View file

@ -2,7 +2,7 @@
Integrate dpaste into an existing project Integrate dpaste into an existing project
========================================= =========================================
Dpaste needs at least Django 1.4+ and is tested on Python 2.7 as well as Dpaste needs at least Django 1.11+ and is tested on Python 2.7 as well as
Python 3.3. Python 3.3.
Install the latest dpaste release in your environment. This will install all Install the latest dpaste release in your environment. This will install all
@ -10,13 +10,13 @@ necessary dependencies of dpaste as well::
pip install dpaste pip install dpaste
Add ``dpaste`` to your ``INSTALLED_APPS``:: Add ``dpaste.apps.dpasteAppConfig`` to your ``INSTALLED_APPS``::
INSTALLED_APPS = ( INSTALLED_APPS = (
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
# ... # ...
'dpaste', 'dpaste.apps.dpasteAppConfig',
) )
Add ``dpaste`` — and if you want — the ``dpaste_api`` to your urlpatterns:: Add ``dpaste`` — and if you want — the ``dpaste_api`` to your urlpatterns::

View file

@ -0,0 +1 @@
default_app_config = 'dpaste.apps.dpasteAppConfig'

8
dpaste/apps.py Normal file
View file

@ -0,0 +1,8 @@
from __future__ import unicode_literals
from django.apps import AppConfig
class dpasteAppConfig(AppConfig):
name = 'dpaste'
verbose_name = 'dpaste'

View file

@ -25,7 +25,7 @@ class Migration(migrations.Migration):
('rght', models.PositiveIntegerField(editable=False, db_index=True)), ('rght', models.PositiveIntegerField(editable=False, db_index=True)),
('tree_id', models.PositiveIntegerField(editable=False, db_index=True)), ('tree_id', models.PositiveIntegerField(editable=False, db_index=True)),
('level', models.PositiveIntegerField(editable=False, db_index=True)), ('level', models.PositiveIntegerField(editable=False, db_index=True)),
('parent', models.ForeignKey(related_name='children', blank=True, to='dpaste.Snippet', null=True)), ('parent', models.ForeignKey(related_name='children', blank=True, to='dpaste.Snippet', null=True, on_delete=models.CASCADE)),
], ],
options={ options={
'ordering': ('-published',), 'ordering': ('-published',),

View file

@ -3,7 +3,7 @@ from __future__ import unicode_literals
from random import SystemRandom from random import SystemRandom
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.urls import reverse
from django.db import models from django.db import models
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -53,7 +53,8 @@ class Snippet(models.Model):
choices=EXPIRE_CHOICES, default=EXPIRE_CHOICES[0][0]) choices=EXPIRE_CHOICES, default=EXPIRE_CHOICES[0][0])
expires = models.DateTimeField(_(u'Expires'), blank=True, null=True) expires = models.DateTimeField(_(u'Expires'), blank=True, null=True)
view_count = models.PositiveIntegerField(_('View count'), default=0) view_count = models.PositiveIntegerField(_('View count'), default=0)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children') parent = models.ForeignKey('self', null=True, blank=True,
related_name='children', on_delete=models.CASCADE)
class Meta: class Meta:
ordering = ('-published',) ordering = ('-published',)

View file

@ -40,15 +40,7 @@ SITE_ID = 1
# Make this unique, and don't share it with anybody. # Make this unique, and don't share it with anybody.
SECRET_KEY = '' SECRET_KEY = ''
ALLOWED_HOSTS = ( ALLOWED_HOSTS = ['*']
'dpaste.de',
'www.dpaste.de',
'dpaste.org',
'www.dpaste.org',
'127.0.0.1',
)
SECRET_KEY = 'CHANGE_ME'
#============================================================================== #==============================================================================
# I18N # I18N
@ -88,7 +80,7 @@ LOGIN_REDIRECT_URL = '/'
# Templates # Templates
#============================================================================== #==============================================================================
MIDDLEWARE_CLASSES = [ MIDDLEWARE = [
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
@ -116,7 +108,7 @@ TEMPLATES = [
INSTALLED_APPS = ( INSTALLED_APPS = (
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sessions', 'django.contrib.sessions',
'dpaste', 'dpaste.apps.dpasteAppConfig',
) )
DATABASES = { DATABASES = {

5
dpaste/settings/tests.py Normal file
View file

@ -0,0 +1,5 @@
"""
Settings for the test suite
"""
from .base import *

View file

@ -1,70 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Snippet'
db.create_table('dpaste_snippet', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('secret_id', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=120, blank=True)),
('author', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
('content', self.gf('django.db.models.fields.TextField')()),
('content_highlighted', self.gf('django.db.models.fields.TextField')(blank=True)),
('lexer', self.gf('django.db.models.fields.CharField')(default='python', max_length=30)),
('published', self.gf('django.db.models.fields.DateTimeField')(blank=True)),
('expires', self.gf('django.db.models.fields.DateTimeField')(blank=True)),
('parent', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='children', null=True, to=orm['dpaste.Snippet'])),
('lft', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)),
('rght', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)),
('tree_id', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)),
('level', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)),
))
db.send_create_signal('dpaste', ['Snippet'])
# Adding model 'Spamword'
db.create_table('dpaste_spamword', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('word', self.gf('django.db.models.fields.CharField')(max_length=100)),
))
db.send_create_signal('dpaste', ['Spamword'])
def backwards(self, orm):
# Deleting model 'Snippet'
db.delete_table('dpaste_snippet')
# Deleting model 'Spamword'
db.delete_table('dpaste_spamword')
models = {
'dpaste.snippet': {
'Meta': {'ordering': "('-published',)", 'object_name': 'Snippet'},
'author': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'content': ('django.db.models.fields.TextField', [], {}),
'content_highlighted': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lexer': ('django.db.models.fields.CharField', [], {'default': "'python'", 'max_length': '30'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['dpaste.Snippet']"}),
'published': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'secret_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'dpaste.spamword': {
'Meta': {'object_name': 'Spamword'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'word': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['dpaste']

View file

@ -1,57 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting model 'Spamword'
db.delete_table('dpaste_spamword')
# Deleting field 'Snippet.author'
db.delete_column('dpaste_snippet', 'author')
# Deleting field 'Snippet.title'
db.delete_column('dpaste_snippet', 'title')
def backwards(self, orm):
# Adding model 'Spamword'
db.create_table('dpaste_spamword', (
('word', self.gf('django.db.models.fields.CharField')(max_length=100)),
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal('dpaste', ['Spamword'])
# Adding field 'Snippet.author'
db.add_column('dpaste_snippet', 'author',
self.gf('django.db.models.fields.CharField')(default='', max_length=30, blank=True),
keep_default=False)
# Adding field 'Snippet.title'
db.add_column('dpaste_snippet', 'title',
self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
keep_default=False)
models = {
'dpaste.snippet': {
'Meta': {'ordering': "('-published',)", 'object_name': 'Snippet'},
'content': ('django.db.models.fields.TextField', [], {}),
'content_highlighted': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lexer': ('django.db.models.fields.CharField', [], {'default': "'python'", 'max_length': '30'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['dpaste.Snippet']"}),
'published': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'secret_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
}
}
complete_apps = ['dpaste']

View file

@ -1,40 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'Snippet.content_highlighted'
db.delete_column(u'dpaste_snippet', 'content_highlighted')
def backwards(self, orm):
# Adding field 'Snippet.content_highlighted'
db.add_column(u'dpaste_snippet', 'content_highlighted',
self.gf('django.db.models.fields.TextField')(default='', blank=True),
keep_default=False)
models = {
u'dpaste.snippet': {
'Meta': {'ordering': "('-published',)", 'object_name': 'Snippet'},
'content': ('django.db.models.fields.TextField', [], {}),
'expires': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lexer': ('django.db.models.fields.CharField', [], {'default': "'Python'", 'max_length': '30'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': u"orm['dpaste.Snippet']"}),
'published': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'secret_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
}
}
complete_apps = ['dpaste']

View file

@ -1,50 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'Snippet.expires'
db.alter_column('dpaste_snippet', 'expires', self.gf('django.db.models.fields.DateTimeField')(null=True))
# Changing field 'Snippet.secret_id'
db.alter_column('dpaste_snippet', 'secret_id', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
# Changing field 'Snippet.published'
db.alter_column('dpaste_snippet', 'published', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True))
def backwards(self, orm):
# Changing field 'Snippet.expires'
db.alter_column('dpaste_snippet', 'expires', self.gf('django.db.models.fields.DateTimeField')(default=None))
# Changing field 'Snippet.secret_id'
db.alter_column('dpaste_snippet', 'secret_id', self.gf('django.db.models.fields.CharField')(default='', max_length=255))
# Changing field 'Snippet.published'
db.alter_column('dpaste_snippet', 'published', self.gf('django.db.models.fields.DateTimeField')())
models = {
u'dpaste.snippet': {
'Meta': {'ordering': "('-published',)", 'object_name': 'Snippet'},
'content': ('django.db.models.fields.TextField', [], {}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lexer': ('django.db.models.fields.CharField', [], {'default': "'python'", 'max_length': '30'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': u"orm['dpaste.Snippet']"}),
'published': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'secret_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
}
}
complete_apps = ['dpaste']

View file

@ -1,50 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Snippet.expire_type'
db.add_column('dpaste_snippet', 'expire_type',
self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=1),
keep_default=False)
# Adding field 'Snippet.view_count'
db.add_column('dpaste_snippet', 'view_count',
self.gf('django.db.models.fields.PositiveIntegerField')(default=0),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Snippet.expire_type'
db.delete_column('dpaste_snippet', 'expire_type')
# Deleting field 'Snippet.view_count'
db.delete_column('dpaste_snippet', 'view_count')
models = {
u'dpaste.snippet': {
'Meta': {'ordering': "('-published',)", 'object_name': 'Snippet'},
'content': ('django.db.models.fields.TextField', [], {}),
'expire_type': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lexer': ('django.db.models.fields.CharField', [], {'default': "'python'", 'max_length': '30'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': u"orm['dpaste.Snippet']"}),
'published': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'secret_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
}
}
complete_apps = ['dpaste']

View file

@ -1,40 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding unique constraint on 'Snippet', fields ['secret_id']
db.create_unique('dpaste_snippet', ['secret_id'])
def backwards(self, orm):
# Removing unique constraint on 'Snippet', fields ['secret_id']
db.delete_unique('dpaste_snippet', ['secret_id'])
models = {
u'dpaste.snippet': {
'Meta': {'ordering': "('-published',)", 'object_name': 'Snippet'},
'content': ('django.db.models.fields.TextField', [], {}),
'expire_type': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lexer': ('django.db.models.fields.CharField', [], {'default': "'python'", 'max_length': '30'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': u"orm['dpaste.Snippet']"}),
'published': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'secret_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
}
}
complete_apps = ['dpaste']

View file

@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from django.core.urlresolvers import reverse from django.urls import reverse
from django.test import TestCase from django.test import TestCase
from django.test.client import Client from django.test.client import Client

View file

@ -0,0 +1,14 @@
# -*- encoding: utf-8 -*-
from __future__ import unicode_literals
from dpaste import highlight
from django.test import TestCase
class HighlightAPITestCase(TestCase):
def test_simple_highlight(self):
input = 'int_value = 1'
expected = 'int_value = 1'
value = highlight.pygmentize(input, lexer_name='python')
self.assertEqual(input, expected)

View file

@ -4,7 +4,7 @@ from __future__ import unicode_literals
from datetime import timedelta from datetime import timedelta
from django.core import management from django.core import management
from django.core.urlresolvers import reverse from django.urls import reverse
from django.test import TestCase from django.test import TestCase
from django.test.client import Client from django.test.client import Client
from django.test.utils import override_settings from django.test.utils import override_settings

View file

@ -6,7 +6,7 @@ import json
from django.conf import settings from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.urls import reverse
from django.db.models import Count from django.db.models import Count
from django.http import (Http404, HttpResponse, HttpResponseBadRequest, from django.http import (Http404, HttpResponse, HttpResponseBadRequest,
HttpResponseRedirect) HttpResponseRedirect)

View file

@ -3,68 +3,18 @@ from __future__ import unicode_literals
import sys import sys
from django import setup
from django.conf import settings from django.conf import settings
from django.test.runner import DiscoverRunner as TestRunner
from dpaste.settings import tests as test_settings
SETTINGS = {
'DATABASES': {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'dev.db',
},
# 'default': {
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME': 'dpaste',
# 'USER': 'root',
# 'PASSWORD': '',
# }
},
'TEMPLATES': [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.i18n',
],
},
},
],
'INSTALLED_APPS': [
'django.contrib.sessions',
'django.contrib.staticfiles',
'dpaste',
],
'MIDDLEWARE_CLASSES': (
'django.contrib.sessions.middleware.SessionMiddleware',
),
'STATIC_ROOT': '/tmp/dpaste_test_static/',
'STATIC_URL': '/static/',
'ROOT_URLCONF': 'dpaste.urls',
'LANGUAGE_CODE': 'en',
'LANGUAGES': (('en', 'English'),),
}
def runtests(*test_args): def runtests(*test_args):
# Setup settings # Setup settings
if not settings.configured: if not settings.configured:
settings.configure(**SETTINGS) settings.configure(**test_settings.__dict__)
setup()
# New Django 1.7 app registry setup
try:
from django import setup
setup()
except ImportError:
pass
# New Django 1.8 test runner
try:
from django.test.runner import DiscoverRunner as TestRunner
except ImportError:
from django.test.simple import DjangoTestSuiteRunner as TestRunner
test_runner = TestRunner(verbosity=1) test_runner = TestRunner(verbosity=1)
failures = test_runner.run_tests(['dpaste']) failures = test_runner.run_tests(['dpaste'])
if failures: if failures:

View file

@ -24,7 +24,7 @@ long_description = u'\n\n'.join((
setup( setup(
name='dpaste', name='dpaste',
version='3.0a', version='3.0a0',
description='dpaste is a Django based pastebin. It\'s intended to run ' description='dpaste is a Django based pastebin. It\'s intended to run '
'separately but its also possible to be installed into an ' 'separately but its also possible to be installed into an '
'existing Django project like a regular app.', 'existing Django project like a regular app.',
@ -49,15 +49,18 @@ setup(
}, },
include_package_data=True, include_package_data=True,
install_requires=[ install_requires=[
'django>=1.8,<2.0', 'django>=1.11',
'pygments>=1.6', 'pygments>=1.6',
'django-markup>=1.0', 'tox',
'django-csp>=3.3',
],
tests_require=[
'tox>=1.6.1',
'coverage', 'coverage',
], ],
extras_require={
# Packages required for a standalone setup
# (not integrated into an existing setup and settings)
'standalone': {
'django-csp>=3.3',
}
},
cmdclass={ cmdclass={
'test': Tox 'test': Tox
}, },

27
tox.ini
View file

@ -2,21 +2,34 @@
toxworkdir=/tmp/tox/dpaste toxworkdir=/tmp/tox/dpaste
skip_missing_interpreters=True skip_missing_interpreters=True
envlist= envlist=
py{27,34,35,36}-django-{18,19,110,111} coverage_setup
py{27,34,35,36}-django-{111}
py{34,35,36}-django-{20} py{34,35,36}-django-{20}
coverage_report
[testenv] [testenv]
install_command = install_command=
pip install {opts} {packages} pip install {opts} {packages}
extras=
standalone
tests
commands= commands=
python runtests.py coverage run --append runtests.py
deps= deps=
# Django versions # Django versions
django-18: django>=1.8,<1.9
django-19: django>=1.9,<1.10
django-110: django>=1.10,<1.11
django-111: django>=1.11,<1.12 django-111: django>=1.11,<1.12
django-20: django==2.0a1 django-20: django==2.0
[testenv:coverage_setup]
basepython=python3.6
commands=
coverage erase
[testenv:coverage_report]
basepython=python3.6
commands=
coverage report
coverage html