From 0dcc71d838b485e416972a055b91f5e4911d5f40 Mon Sep 17 00:00:00 2001 From: Federico Capoano Date: Wed, 28 Jun 2017 19:37:45 +0200 Subject: [PATCH] [openwisp-utils] Moved shared logic to openwisp-utils --- django_netjsonconfig/admin_theme/__init__.py | 0 django_netjsonconfig/admin_theme/admin.py | 13 -- .../admin_theme/static/admin/css/openwisp.css | 102 ------------- .../static/ui/openwisp/images/favicon.png | Bin 44140 -> 0 bytes .../ui/openwisp/images/openwisp-logo.svg | 139 ------------------ .../templates/admin/base_site.html | 15 -- .../admin_theme/templates/base.html | 2 - django_netjsonconfig/base/admin.py | 16 +- django_netjsonconfig/base/base.py | 8 +- requirements.txt | 1 + tests/settings.py | 1 - tests/urls.py | 5 +- 12 files changed, 8 insertions(+), 294 deletions(-) delete mode 100644 django_netjsonconfig/admin_theme/__init__.py delete mode 100644 django_netjsonconfig/admin_theme/admin.py delete mode 100644 django_netjsonconfig/admin_theme/static/admin/css/openwisp.css delete mode 100644 django_netjsonconfig/admin_theme/static/ui/openwisp/images/favicon.png delete mode 100644 django_netjsonconfig/admin_theme/static/ui/openwisp/images/openwisp-logo.svg delete mode 100644 django_netjsonconfig/admin_theme/templates/admin/base_site.html delete mode 100644 django_netjsonconfig/admin_theme/templates/base.html diff --git a/django_netjsonconfig/admin_theme/__init__.py b/django_netjsonconfig/admin_theme/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/django_netjsonconfig/admin_theme/admin.py b/django_netjsonconfig/admin_theme/admin.py deleted file mode 100644 index 875f8a2..0000000 --- a/django_netjsonconfig/admin_theme/admin.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.contrib import admin -from django.utils.translation import ugettext_lazy - - -def openwisp_admin(site_url=None): - # - admin.site.site_title = ugettext_lazy('OpenWISP2 Admin') - # link to frontend - admin.site.site_url = site_url - # h1 text - admin.site.site_header = ugettext_lazy('OpenWISP') - # text at the top of the admin index page - admin.site.index_title = ugettext_lazy('Network administration') diff --git a/django_netjsonconfig/admin_theme/static/admin/css/openwisp.css b/django_netjsonconfig/admin_theme/static/admin/css/openwisp.css deleted file mode 100644 index 1d12c4b..0000000 --- a/django_netjsonconfig/admin_theme/static/admin/css/openwisp.css +++ /dev/null @@ -1,102 +0,0 @@ -#header{ - background-color: #464646; - color: #fff; - height: auto -} - -#user-tools{ margin-top: 12px } - -#site-name a{ - display: block; - width: 150px; - height: 70px; - background: url(../../../static/ui/openwisp/images/openwisp-logo.svg) no-repeat scroll 0 50% / 100%; - text-indent: -2000px; - overflow: hidden; -} - -.login #branding{ - float: none; - padding: 8px 0 -} -.login #site-name a{ margin: 0 auto } - -.button.default, -input[type=submit].default, -.submit-row input.default, -.object-tools a:focus, -.object-tools a:hover{ - background-color: #333; -} - -.button.default:active, input[type=submit].default:active, -.button.default:focus, input[type=submit].default:focus, -.button.default:hover, input[type=submit].default:hover{ - background-color: #000; -} - -#branding h1, #branding h1 a:link, #branding h1 a:visited { - color: #fff; -} - -div.breadcrumbs, -.module h2, .module caption, .inline-group h2, -#container .selector-chosen h2{ - background-color: #df5d43; - color: #fff; -} - -div.breadcrumbs{ - color: #ffcbc0 -} - -div.breadcrumbs a:focus, div.breadcrumbs a:hover{ - color: #ffe8e3 -} - -.button, input[type=submit], input[type=button], .submit-row input, a.button{ - background-color: #666; -} - -.button:active, input[type=submit]:active, input[type=button]:active, -.button:focus, input[type=submit]:focus, input[type=button]:focus, -.button:hover, input[type=submit]:hover, input[type=button]:hover { - background-color: #444; -} - -#user-tools a:focus, #user-tools a:hover{ - border-bottom-color: #ffcbc0; - color: #ffcbc0; -} - -#container .object-tools a{ - padding: 5px 15px; -} - -#container .object-tools a.addlink{ padding-right: 28px } - -table thead th.sorted .sortoptions a.sortremove:focus:after, -table thead th.sorted .sortoptions a.sortremove:hover:after, -a:link, a:visited { - color: #777; -} - -a:focus, a:hover { - color: #000; -} - -#changelist-filter li.selected a{ - color: #df5d43 !important -} - -#netjsonconfig-hint, #netjsonconfig-hint a, -#container .field-backend a{ color: #df5d43 } - -/* temporary frontend fix */ -a.button.secondaryAction{ - background: transparent; - border: 0 none; - padding: 0; - margin: 15px 0; - display: block; -} diff --git a/django_netjsonconfig/admin_theme/static/ui/openwisp/images/favicon.png b/django_netjsonconfig/admin_theme/static/ui/openwisp/images/favicon.png deleted file mode 100644 index 2f1b50f50fbdc62345663bbcddcba3906859513c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44140 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 BGvojO diff --git a/django_netjsonconfig/admin_theme/static/ui/openwisp/images/openwisp-logo.svg b/django_netjsonconfig/admin_theme/static/ui/openwisp/images/openwisp-logo.svg deleted file mode 100644 index f038e33..0000000 --- a/django_netjsonconfig/admin_theme/static/ui/openwisp/images/openwisp-logo.svg +++ /dev/null @@ -1,139 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - version="1.1" - width="1377.5" - height="744.09998" - id="svg2" - xml:space="preserve"><metadata - id="metadata8"><rdf:RDF><cc:Work - rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs - id="defs6"><linearGradient - id="linearGradient3133"><stop - id="stop3135" - style="stop-color:#ffffff;stop-opacity:1" - offset="0" /><stop - id="stop3137" - style="stop-color:#ffffff;stop-opacity:0" - offset="1" /></linearGradient><clipPath - id="clipPath20"><path - d="M 9169.55,5390.38 C 8629.64,5620.56 7567.6,3852.27 7070.11,2319.85 c 0,0 -157.36,397.54 -172.33,863.1 -8.76,270.49 64.66,188.1 94.66,170.06 l 10.8,80.58 -142.3,20.28 0,0.08 -147.19,17.16 -10.45,-80.7 c 33.74,9.95 125.67,70.85 48.15,-188.51 -133.41,-446.21 -387.1,-790.54 -387.1,-790.54 -89.64,1608.59 -664.72,3589.05 -1245.63,3504.08 -207.06,-30.28 -953.38,-460.39 -550.91,-1291.39 -0.15,-0.09 -0.35,-0.44 -0.42,-0.7 5.64,-11.81 12.22,-23.82 18.47,-35.76 4.41,-8.4 8.28,-16.45 12.82,-24.86 14.68,-27.22 30.75,-54.59 48,-82.56 5.04,-8.14 10.53,-16.6 16.09,-24.75 13.93,-22.23 29.2,-44.65 45.01,-67.32 6.12,-8.47 11.95,-17.27 18.26,-25.93 21.32,-29.43 43.99,-59.31 68.1,-89.37 4.75,-6.01 10.04,-12.02 15,-18.05 20.98,-25.4 43.04,-51.26 66.19,-77.46 8.01,-8.93 16.03,-18.01 24.3,-27.07 29.01,-31.69 59,-63.97 91.39,-96.37 30.34,-30.51 57.56,-59.22 86.37,-88.9 -0.49,0.58 -0.9,1.06 -1.38,1.64 -857.23,1010.69 -320.97,1499.92 -145.08,1608.81 494.37,305.49 1376.78,-2548.93 1370.95,-3374.75 192.41,217.5 367.55,474.1 500.88,823.21 39.72,-371.64 143.36,-664.37 273.8,-923.86 205.42,799.73 1787.56,3335 2187.57,2913.7 142.31,-150.09 534.94,-759.03 -548.95,-1516.77 33.38,20.13 67.27,40.29 102.17,60.72 39.58,23.32 76.57,46.58 112.85,70 10.38,6.76 20.42,13.33 30.6,19.99 29.07,19.49 56.96,38.73 83.58,57.98 6.31,4.58 12.91,9.03 19.07,13.67 31.22,23 60.68,46.04 88.87,68.99 8.36,6.79 16.01,13.71 24.31,20.35 21.05,17.96 41.47,35.85 60.82,53.57 7.19,6.69 14.79,13.38 21.64,19.93 23.86,22.59 46.46,45.01 67.63,67.62 6.45,6.96 12.23,13.77 18.74,20.88 8.95,9.76 18.52,19.86 27.07,29.87 -0.11,0.17 -0.31,0.58 -0.31,0.86 601.57,700.59 -10.33,1306.91 -202.67,1389.02 z" - id="path22" /></clipPath><radialGradient - cx="0" - cy="0" - r="1" - fx="0" - fy="0" - id="radialGradient24" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(29.6215,339.49,339.49,-29.6215,685.579,327.614)" - spreadMethod="pad"><stop - id="stop26" - style="stop-color:#ffffff;stop-opacity:1" - offset="0" /><stop - id="stop28" - style="stop-color:#1e1a1b;stop-opacity:1" - offset="1" /></radialGradient><clipPath - id="clipPath36"><path - d="M 9264.13,5013.7 C 8864.12,5435 7281.98,2899.73 7076.56,2100 c 7.19,-14.23 14.41,-28.77 21.72,-42.95 19.01,-34.55 49.69,-90.16 89.12,-161.16 C 7459.24,1405.24 8143.76,180.539 8248.59,94.0586 8341.98,17.0625 7918.51,634.57 7997.46,900.551 c 150.86,-190.969 271.01,-334.469 309.91,-360 5.03,-3.18 8.77,-4.871 10.91,-5.219 28.74,-3.902 -181.51,243.379 -262.71,448.731 38.23,26.487 94.16,39.387 173.33,33.257 216.43,-16.89 60.49,47.12 -154.12,205.3 36.74,24.58 95.92,35.84 184.79,27.77 453.63,-41.13 -737.51,241.5 -687.5,854.52 34.16,361.84 325.3,821.31 1140.54,1390.19 0.81,0.64 1.69,1.22 2.57,1.83 1083.89,757.74 691.26,1366.68 548.95,1516.77 z m -4333.2,561.7 c -175.89,-108.89 -712.15,-598.12 145.08,-1608.81 0.48,-0.58 0.89,-1.06 1.38,-1.64 641.87,-756.99 805.77,-1275.09 746.48,-1633.51 -108.35,-605.35 -1332.37,-574.93 -883.22,-650.77 87.71,-14.78 142.29,-40.8 171.35,-73.87 -247.6,-98.08 -414.95,-120.41 -201.22,-159.31 78.2,-14.2 128.77,-41.01 158.92,-76.46 -130.96,-177.58 -397.36,-363.2 -368.57,-366.64 2.1,-0.38 6.05,0.3 11.68,2.22 44.27,14.8 197.14,122.81 391.71,268.97 8.36,-277.381 -558.78,-766.33 -448.8,-715.678 123.75,56.95 1101.98,1070.048 1489,1473.578 54.03,56.44 96.68,101.04 123.7,129.33 11.25,12.36 22.34,25.19 33.46,37.84 5.83,825.82 -876.58,3680.24 -1370.95,3374.75 z" - id="path38" /></clipPath><radialGradient - cx="0" - cy="0" - r="1" - fx="0" - fy="0" - id="radialGradient40" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(259.498,0,0,-259.498,702.739,284.282)" - spreadMethod="pad"><stop - id="stop42" - style="stop-color:#fde3c3;stop-opacity:1" - offset="0" /><stop - id="stop44" - style="stop-color:#f7921a;stop-opacity:1" - offset="1" /></radialGradient><clipPath - id="clipPath52"><path - d="m 9168.6,4288.21 c -13.3,7.21 -27.81,11.88 -43.72,14.05 -430.07,56.53 -1789.26,-1741.53 -2017.92,-2132.37 -11.27,-23.43 -24.36,-54.51 -30.4,-69.89 42.91,-57.96 567.75,-752.17 920.5,-1198.891 10.31,34.77 28.86,62.981 58.37,83.231 -40.11,101.56 -48.52,192.94 19.23,238.44 -236.59,174.47 -544.27,463.57 -502.59,885.66 0.62,7.35 1.49,14.93 2.51,22.53 45.63,357.58 342.3,808.84 1138.03,1364.13 2.78,1.73 5.16,3.45 7.74,5.23 309.39,217.06 500.33,424.76 611.07,613.12 -45.42,85.99 -112.64,147.05 -162.82,174.76 z m -4284.71,563.82 c -15.89,1.99 -31.16,1.12 -45.76,-2.33 -55.66,-14.03 -136.45,-55.83 -202.17,-127.52 58.85,-210.26 190.44,-459.96 434.21,-748.67 1.98,-2.41 3.89,-4.64 5.84,-6.92 627.56,-739.83 799.26,-1251.77 752.06,-1609.13 -1.07,-7.61 -2.3,-15.21 -3.31,-22.68 -67.68,-418.52 -439.32,-619.55 -712.49,-728.18 53.97,-60.96 22.46,-147.17 -42.23,-235.16 23.21,-27.14 33.95,-59.27 35.17,-95.33 455.25,341.9 1140.58,879.32 1196.67,924.54 -1.84,16.42 -6.58,49.53 -11.41,75.06 -121.4,436.26 -976.25,2521.15 -1406.58,2576.32 z" - id="path54" /></clipPath><radialGradient - cx="0" - cy="0" - r="1" - fx="0" - fy="0" - id="radialGradient56" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(316.669,-49.216,-14.4726,-93.1204,680.989,292.924)" - spreadMethod="pad"><stop - id="stop58" - style="stop-color:#f9b2b4;stop-opacity:1" - offset="0" /><stop - id="stop60" - style="stop-color:#c4161d;stop-opacity:1" - offset="1" /></radialGradient><linearGradient - x1="2337.2021" - y1="1799.646" - x2="2290.4583" - y2="5340.5073" - id="linearGradient3139" - xlink:href="#linearGradient3133" - gradientUnits="userSpaceOnUse" /></defs><g - transform="matrix(1.25,0,0,-1.25,0,744.1)" - id="g10"><g - transform="scale(0.1,0.1)" - id="g12"><g - id="g16" - style="fill:url(#linearGradient3139);fill-opacity:1"><g - clip-path="url(#clipPath20)" - id="g18" - style="fill:url(#linearGradient3139);fill-opacity:1"><path - d="M 9169.55,5390.38 C 8629.64,5620.56 7567.6,3852.27 7070.11,2319.85 c 0,0 -157.36,397.54 -172.33,863.1 -8.76,270.49 64.66,188.1 94.66,170.06 l 10.8,80.58 -142.3,20.28 0,0.08 -147.19,17.16 -10.45,-80.7 c 33.74,9.95 125.67,70.85 48.15,-188.51 -133.41,-446.21 -387.1,-790.54 -387.1,-790.54 -89.64,1608.59 -664.72,3589.05 -1245.63,3504.08 -207.06,-30.28 -953.38,-460.39 -550.91,-1291.39 -0.15,-0.09 -0.35,-0.44 -0.42,-0.7 5.64,-11.81 12.22,-23.82 18.47,-35.76 4.41,-8.4 8.28,-16.45 12.82,-24.86 14.68,-27.22 30.75,-54.59 48,-82.56 5.04,-8.14 10.53,-16.6 16.09,-24.75 13.93,-22.23 29.2,-44.65 45.01,-67.32 6.12,-8.47 11.95,-17.27 18.26,-25.93 21.32,-29.43 43.99,-59.31 68.1,-89.37 4.75,-6.01 10.04,-12.02 15,-18.05 20.98,-25.4 43.04,-51.26 66.19,-77.46 8.01,-8.93 16.03,-18.01 24.3,-27.07 29.01,-31.69 59,-63.97 91.39,-96.37 30.34,-30.51 57.56,-59.22 86.37,-88.9 -0.49,0.58 -0.9,1.06 -1.38,1.64 -857.23,1010.69 -320.97,1499.92 -145.08,1608.81 494.37,305.49 1376.78,-2548.93 1370.95,-3374.75 192.41,217.5 367.55,474.1 500.88,823.21 39.72,-371.64 143.36,-664.37 273.8,-923.86 205.42,799.73 1787.56,3335 2187.57,2913.7 142.31,-150.09 534.94,-759.03 -548.95,-1516.77 33.38,20.13 67.27,40.29 102.17,60.72 39.58,23.32 76.57,46.58 112.85,70 10.38,6.76 20.42,13.33 30.6,19.99 29.07,19.49 56.96,38.73 83.58,57.98 6.31,4.58 12.91,9.03 19.07,13.67 31.22,23 60.68,46.04 88.87,68.99 8.36,6.79 16.01,13.71 24.31,20.35 21.05,17.96 41.47,35.85 60.82,53.57 7.19,6.69 14.79,13.38 21.64,19.93 23.86,22.59 46.46,45.01 67.63,67.62 6.45,6.96 12.23,13.77 18.74,20.88 8.95,9.76 18.52,19.86 27.07,29.87 -0.11,0.17 -0.31,0.58 -0.31,0.86 601.57,700.59 -10.33,1306.91 -202.67,1389.02" - id="path30" - style="fill:url(#linearGradient3139);fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g><g - id="g3130"><g - id="g32"><g - clip-path="url(#clipPath36)" - id="g34"><path - d="M 9264.13,5013.7 C 8864.12,5435 7281.98,2899.73 7076.56,2100 c 7.19,-14.23 14.41,-28.77 21.72,-42.95 19.01,-34.55 49.69,-90.16 89.12,-161.16 C 7459.24,1405.24 8143.76,180.539 8248.59,94.0586 8341.98,17.0625 7918.51,634.57 7997.46,900.551 c 150.86,-190.969 271.01,-334.469 309.91,-360 5.03,-3.18 8.77,-4.871 10.91,-5.219 28.74,-3.902 -181.51,243.379 -262.71,448.731 38.23,26.487 94.16,39.387 173.33,33.257 216.43,-16.89 60.49,47.12 -154.12,205.3 36.74,24.58 95.92,35.84 184.79,27.77 453.63,-41.13 -737.51,241.5 -687.5,854.52 34.16,361.84 325.3,821.31 1140.54,1390.19 0.81,0.64 1.69,1.22 2.57,1.83 1083.89,757.74 691.26,1366.68 548.95,1516.77 z m -4333.2,561.7 c -175.89,-108.89 -712.15,-598.12 145.08,-1608.81 0.48,-0.58 0.89,-1.06 1.38,-1.64 641.87,-756.99 805.77,-1275.09 746.48,-1633.51 -108.35,-605.35 -1332.37,-574.93 -883.22,-650.77 87.71,-14.78 142.29,-40.8 171.35,-73.87 -247.6,-98.08 -414.95,-120.41 -201.22,-159.31 78.2,-14.2 128.77,-41.01 158.92,-76.46 -130.96,-177.58 -397.36,-363.2 -368.57,-366.64 2.1,-0.38 6.05,0.3 11.68,2.22 44.27,14.8 197.14,122.81 391.71,268.97 8.36,-277.381 -558.78,-766.33 -448.8,-715.678 123.75,56.95 1101.98,1070.048 1489,1473.578 54.03,56.44 96.68,101.04 123.7,129.33 11.25,12.36 22.34,25.19 33.46,37.84 5.83,825.82 -876.58,3680.24 -1370.95,3374.75" - id="path46" - style="fill:url(#radialGradient40);fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g><g - id="g48"><g - clip-path="url(#clipPath52)" - id="g50"><path - d="m 9168.6,4288.21 c -13.3,7.21 -27.81,11.88 -43.72,14.05 -430.07,56.53 -1789.26,-1741.53 -2017.92,-2132.37 -11.27,-23.43 -24.36,-54.51 -30.4,-69.89 42.91,-57.96 567.75,-752.17 920.5,-1198.891 10.31,34.77 28.86,62.981 58.37,83.231 -40.11,101.56 -48.52,192.94 19.23,238.44 -236.59,174.47 -544.27,463.57 -502.59,885.66 0.62,7.35 1.49,14.93 2.51,22.53 45.63,357.58 342.3,808.84 1138.03,1364.13 2.78,1.73 5.16,3.45 7.74,5.23 309.39,217.06 500.33,424.76 611.07,613.12 -45.42,85.99 -112.64,147.05 -162.82,174.76 z m -4284.71,563.82 c -15.89,1.99 -31.16,1.12 -45.76,-2.33 -55.66,-14.03 -136.45,-55.83 -202.17,-127.52 58.85,-210.26 190.44,-459.96 434.21,-748.67 1.98,-2.41 3.89,-4.64 5.84,-6.92 627.56,-739.83 799.26,-1251.77 752.06,-1609.13 -1.07,-7.61 -2.3,-15.21 -3.31,-22.68 -67.68,-418.52 -439.32,-619.55 -712.49,-728.18 53.97,-60.96 22.46,-147.17 -42.23,-235.16 23.21,-27.14 33.95,-59.27 35.17,-95.33 455.25,341.9 1140.58,879.32 1196.67,924.54 -1.84,16.42 -6.58,49.53 -11.41,75.06 -121.4,436.26 -976.25,2521.15 -1406.58,2576.32" - id="path62" - style="fill:url(#radialGradient56);fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></g><path - d="m 5673.29,4313.59 c -31.63,2.42 -58.64,-6.65 -81.45,-27.97 -23.18,-20.87 -35.86,-46.8 -38.15,-76.59 -2.4,-31.4 6.03,-58.4 25.66,-81.3 19.33,-23.06 44.67,-35.5 76.34,-38.18 29.76,-2.25 55.62,6.2 76.88,25.94 21.43,19.74 32.92,45.37 35.36,76.72 2.31,29.72 -4.97,57.16 -22.93,81.22 -17.73,24.61 -41.9,37.68 -71.71,40.16" - id="path64" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 576.746,3089.54 c 1.512,-64.26 11.621,-136.47 30.094,-216.65 18.394,-80.33 48.465,-157.73 90.223,-232.35 41.675,-74.67 97.074,-140.5 166.191,-197.4 68.973,-57.04 154.846,-93.56 257.576,-109.59 96.32,-14.38 182.07,-12.87 257.56,4.83 75.43,17.57 141.29,46.5 197.35,86.71 56.29,40.03 103.54,87.82 142.17,143.24 38.42,55.39 70.13,113.51 95.04,174.46 24.85,60.97 42.97,122 54.11,183.03 11.26,61.01 17.65,116.35 19.27,166.09 1.56,123.59 -14.05,232.31 -46.9,326.19 -32.93,93.94 -77.87,173.33 -134.83,238.36 -56.96,65 -123.62,115.59 -199.81,151.71 -76.23,36.04 -157.69,58.13 -244.45,66.19 -89.76,0 -176.51,-16.51 -259.87,-49.36 -83.458,-32.91 -156.974,-82.28 -220.236,-148.05 -63.492,-65.82 -114.058,-147.7 -151.734,-245.6 -37.687,-97.86 -55.066,-211.81 -51.754,-341.81 z m -175.824,4.79 c 0,134.78 19.281,257.18 57.848,367.13 38.503,109.96 92.199,204.21 161.293,282.89 68.906,78.66 150.855,140.38 245.574,185.37 94.558,44.93 197.343,69.79 308.073,74.61 125.26,9.64 241.55,-4.82 349.14,-43.3 107.55,-38.54 201.02,-97.5 280.45,-176.96 79.5,-79.43 141.62,-177.35 186.64,-293.73 44.86,-116.37 67.33,-247.58 67.33,-393.6 0,-134.84 -20.03,-257.21 -60.14,-367.12 -40.19,-109.97 -95.51,-204.33 -166.12,-282.89 -70.6,-78.67 -154.11,-140.04 -250.44,-184.18 -96.27,-44.19 -200.62,-66.93 -312.9,-68.58 -122.01,-8 -235.58,7.61 -340.74,46.87 -105.078,39.35 -196.532,98.77 -274.325,178.27 -77.937,79.42 -139.242,176.09 -184.191,290.01 -45.012,113.91 -67.492,242.33 -67.492,385.21" - id="path66" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 2813.15,3320.63 c -65.79,0 -121.6,-16.09 -167.28,-48.14 -45.68,-32.13 -82.69,-73.05 -110.72,-122.81 -28.12,-49.74 -48.14,-104.71 -60.22,-164.9 -12.02,-60.15 -17.99,-117.61 -17.99,-172.14 0,-54.57 5.57,-111.52 16.76,-170.94 11.27,-59.4 30.97,-113.98 58.94,-163.69 28.16,-49.75 65.11,-90.69 110.85,-122.72 45.69,-32.17 102.25,-48.18 169.66,-48.18 70.68,0 128.85,15.18 174.55,45.72 45.75,30.5 82.29,70.22 109.63,119.23 27.23,48.87 46.03,103.46 56.55,163.69 10.32,60.14 15.56,119.12 15.56,176.89 0,57.79 -5.24,116.77 -15.56,176.97 -10.52,60.2 -29.32,114.75 -56.55,163.7 -27.34,48.96 -63.88,89.06 -109.63,120.36 -45.7,31.31 -103.87,46.96 -174.55,46.96 z M 2127,1719.65 c 24.1,3.28 51.38,7.66 81.88,13.24 30.48,5.7 54.64,21.31 72.3,47 l 0,1533.55 c -17.66,25.59 -41.01,41.23 -69.93,46.9 -28.86,5.63 -55.33,10.03 -79.43,13.25 l 0,65 325.12,0 0,-214.26 4.81,0 c 40.13,77.04 90.98,133.65 152.83,169.75 61.71,36.05 136.05,54.18 222.67,54.18 81.88,0 154.43,-16.49 217.85,-49.39 63.41,-32.9 116.42,-77.84 158.94,-134.82 42.48,-56.96 74.67,-124.37 96.34,-202.21 21.57,-77.86 32.45,-160.87 32.45,-249.2 0,-91.43 -9.65,-175.76 -28.87,-252.74 -19.28,-77.06 -49.36,-143.66 -90.28,-199.85 -40.94,-56.21 -93.55,-100.36 -157.78,-132.4 -64.16,-32.03 -140.4,-48.2 -228.65,-48.2 -59.34,0 -111.13,9.64 -155.27,28.93 -44.12,19.27 -81.79,41.67 -113.09,67.4 -31.29,25.68 -55.87,51.81 -73.47,78.28 -17.64,26.47 -28.91,46.85 -33.67,61.38 l -4.81,0 0,-751.14 -329.94,0 0,55.35" - id="path68" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 3985.67,3337.47 c -54.6,0 -103.55,-12.44 -146.86,-37.29 -43.31,-24.89 -79.9,-56.98 -109.57,-96.32 -29.66,-39.34 -52.55,-83.45 -68.57,-132.37 -16.09,-49 -24.17,-97.54 -24.17,-145.67 l 652.54,0 c 0,51.32 -5.68,101.91 -16.9,151.67 -11.2,49.71 -28.92,93.88 -52.95,132.38 -24.1,38.56 -55.4,69.37 -93.89,92.73 -38.54,23.22 -85.05,34.87 -139.63,34.87 z m 329.85,-1088.16 c -27.35,-9.64 -62.66,-22.88 -105.91,-39.71 -43.43,-16.85 -100.4,-25.28 -171.01,-25.28 -89.89,0 -171.34,12.85 -244.32,38.53 -73.05,25.66 -134.83,65.38 -185.41,119.12 -50.57,53.77 -89.41,121.94 -116.7,204.61 -27.37,82.68 -40.13,181.01 -38.64,294.94 1.65,91.5 16.51,174.95 44.62,250.39 28.1,75.41 65.84,140.85 113.17,196.25 47.25,55.35 103.52,98.21 168.56,128.76 64.91,30.46 135.16,45.77 210.66,45.77 83.37,0 155.59,-15.64 216.64,-46.96 60.95,-31.27 110.78,-75.84 149.21,-133.63 38.57,-57.77 66.6,-127.2 84.26,-208.21 17.64,-81.11 25.71,-172.16 24.1,-273.25 l -830.64,0 c -4.79,-101.16 7.69,-188.61 37.41,-262.47 29.69,-73.8 74.21,-131.15 133.62,-172.1 59.26,-40.93 131.98,-65.43 217.84,-73.47 85.83,-8.06 183.39,2.39 292.54,31.32 l 0,-74.61" - id="path70" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 5601.06,2328.83 c 17.57,-25.82 41.67,-41.43 72.23,-47.01 30.43,-5.63 57.72,-10.05 81.82,-13.25 l 0,-60.19 -329.81,0 0,739.1 c 0,115.55 -22.07,207.02 -66.25,274.44 -44.14,67.42 -117.59,101.08 -220.24,101.08 -68.97,0 -126.48,-14.79 -172.09,-44.5 -45.76,-29.7 -82.77,-67 -110.81,-111.94 -28.03,-44.96 -47.78,-95.07 -58.98,-150.51 -11.29,-55.38 -16.86,-107.88 -16.86,-157.63 l 0,-647.6 -173.3,0 0,1097.76 c -17.73,25.66 -41.76,41.31 -72.31,46.97 -30.47,5.6 -57.76,9.99 -81.8,13.24 l 0,69.8 325.05,0 0,-226.28 c 11.2,27.29 27.71,54.96 49.28,83.02 21.74,28.09 48.96,53.81 81.81,77.05 32.93,23.26 72.3,42.13 118.06,56.56 45.75,14.47 99.05,21.69 160.08,21.69 150.85,0 257.57,-34.52 320.18,-103.53 62.58,-69.04 93.94,-170.94 93.94,-305.74 l 0,-712.53" - id="path72" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 8309.74,3438.59 0,-1230.21 -175.75,0 0,1105.06 c -17.64,25.59 -41.67,41.23 -72.22,46.9 -30.51,5.63 -57.72,10.03 -81.83,13.25 l 0,65 329.8,0" - id="path74" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 9195.63,2523.79 c -22.48,-77.06 -60.55,-139.31 -114.34,-186.57 -53.81,-47.38 -115.13,-81.54 -184.18,-102.37 -68.97,-20.84 -140.45,-28.51 -214.25,-22.88 -73.8,5.64 -141.21,22.07 -202.18,49.36 l 0,77.05 c 36.86,-19.21 85.48,-31.69 145.62,-37.28 60.16,-5.7 119.14,-1.22 176.99,13.18 57.74,14.55 107.48,40.2 149.24,77.13 41.67,36.85 62.52,88.19 62.52,153.97 0,48.19 -14.39,87.51 -43.31,117.98 -28.81,30.55 -65.31,56.63 -109.51,78.28 -44.13,21.67 -91.86,42.17 -143.26,61.37 -51.38,19.27 -99.11,42.15 -143.24,68.64 -44.11,26.47 -80.63,58.14 -109.5,95.11 -28.85,36.9 -43.37,85 -43.37,144.44 0,59.33 10.44,111.53 31.37,156.43 20.82,44.95 49.28,81.89 85.39,110.8 36.11,28.91 78.29,50.51 126.4,64.98 48.14,14.41 99.48,21.69 154.07,21.69 73.76,0 132.44,-4.04 175.8,-12.06 43.24,-8.07 79.44,-17.69 108.29,-28.87 l -2.38,-72.2 c -62.67,25.62 -124.04,40.06 -184.17,43.29 -60.23,3.16 -113.99,-5.22 -161.3,-25.29 -47.38,-20.08 -85.48,-51.74 -114.33,-95.08 -28.98,-43.31 -43.37,-97.92 -43.37,-163.69 0,-36.94 15.73,-67.47 46.96,-91.49 31.3,-24.09 70.21,-46.16 116.71,-66.22 46.55,-20.1 96.32,-40.57 149.35,-61.34 52.89,-20.91 101.42,-46.99 145.64,-78.33 44.11,-31.23 79.75,-69.81 107.11,-115.47 27.23,-45.85 37.68,-103.98 31.23,-174.56" - id="path76" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 10305.5,3563.77 c 0,40.08 -7.2,79.43 -21.6,117.95 -14.4,38.56 -35.8,72.61 -63.8,102.35 -28.1,29.66 -63,53.32 -104.8,71 -41.7,17.67 -89,26.52 -142.01,26.52 l -380.3,0 0,-674.09 351.45,0 c 51.32,0 99.06,9.18 143.16,27.68 44.2,18.45 82.2,43.7 114.4,75.81 32.1,32.07 57.4,69.86 75.8,113.18 18.5,43.33 27.7,89.85 27.7,139.6 z m -712.51,-529.6 0,-828.18 -175.78,0 0,1689.98 c -19.28,22.48 -43.44,36.53 -72.23,42.17 -28.91,5.6 -54.63,10.02 -77.05,13.2 l 0,65.04 741.47,0 c 73.8,0 139.6,-12.42 197.4,-37.33 57.9,-24.89 106.8,-58.18 146.9,-99.87 40.2,-41.79 70.6,-90.7 91.4,-146.87 21,-56.19 31.4,-116.41 31.4,-180.61 0,-60.96 -10.4,-120.77 -31.4,-179.32 -20.8,-58.61 -49.7,-111.94 -86.6,-160.07 -36.9,-48.16 -81.8,-88.28 -134.8,-120.4 -53,-32.11 -111.6,-51.36 -175.6,-57.74 l -455.11,0" - id="path78" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path - d="m 8241.12,3976.16 c -31.65,2.42 -58.72,-6.75 -81.68,-28.03 -23.08,-20.82 -35.63,-46.81 -38,-76.59 -2.47,-31.36 5.96,-58.4 25.52,-81.33 19.36,-23.02 44.88,-35.59 76.43,-38.15 29.74,-2.21 55.6,6.17 76.8,25.94 21.43,19.75 33.14,45.35 35.49,76.7 2.39,29.66 -4.96,57.16 -22.96,81.22 -17.85,24.66 -41.94,37.74 -71.6,40.24" - id="path80" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></svg> \ No newline at end of file diff --git a/django_netjsonconfig/admin_theme/templates/admin/base_site.html b/django_netjsonconfig/admin_theme/templates/admin/base_site.html deleted file mode 100644 index e95ec4d..0000000 --- a/django_netjsonconfig/admin_theme/templates/admin/base_site.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "admin/base.html" %} -{% load static %} - -{% block title %}{{ title }} | {{ site_title }}{% endblock %} - -{% block extrastyle %} -<link rel="stylesheet" type="text/css" href="{% static "admin/css/openwisp.css" %}" /> -<link rel="icon" type="image/x-icon" href="{% static "ui/openwisp/images/favicon.png" %}" /> -{% endblock %} - -{% block branding %} -<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header }}</a></h1> -{% endblock %} - -{% block nav-global %}{% endblock %} diff --git a/django_netjsonconfig/admin_theme/templates/base.html b/django_netjsonconfig/admin_theme/templates/base.html deleted file mode 100644 index 7e2012d..0000000 --- a/django_netjsonconfig/admin_theme/templates/base.html +++ /dev/null @@ -1,2 +0,0 @@ -{% extends 'admin/base_site.html' %} -{% block title %}OpenWISP2{% endblock %} diff --git a/django_netjsonconfig/base/admin.py b/django_netjsonconfig/base/admin.py index 4f362b4..1711d03 100644 --- a/django_netjsonconfig/base/admin.py +++ b/django_netjsonconfig/base/admin.py @@ -12,6 +12,8 @@ from django.urls import reverse from django.utils.translation import ugettext_lazy as _ +from openwisp_utils.admin import TimeReadonlyAdminMixin + from .. import settings as app_settings from ..utils import send_file from ..widgets import JsonSchemaWidget @@ -25,17 +27,7 @@ from django.contrib.admin import ModelAdmin -class TimeReadonlyMixin(object): - """ - mixin that automatically flags - `created` and `modified` as readonly - """ - def __init__(self, *args, **kwargs): - self.readonly_fields += ('created', 'modified',) - super(TimeReadonlyMixin, self).__init__(*args, **kwargs) - - -class BaseAdmin(TimeReadonlyMixin, ModelAdmin): +class BaseAdmin(TimeReadonlyAdminMixin, ModelAdmin): pass @@ -231,7 +223,7 @@ def clean_templates(self): return templates -class AbstractConfigInline(TimeReadonlyMixin, admin.StackedInline): +class AbstractConfigInline(TimeReadonlyAdminMixin, admin.StackedInline): verbose_name_plural = _('Device configuration details') readonly_fields = ['status', 'last_ip'] fields = ['backend', diff --git a/django_netjsonconfig/base/base.py b/django_netjsonconfig/base/base.py index 1e0eb9b..d79feab 100644 --- a/django_netjsonconfig/base/base.py +++ b/django_netjsonconfig/base/base.py @@ -1,7 +1,6 @@ import collections import hashlib import json -import uuid from copy import deepcopy from django.core.exceptions import ValidationError @@ -11,22 +10,19 @@ from django.utils.module_loading import import_string from django.utils.translation import ugettext_lazy as _ from jsonfield import JSONField -from model_utils.fields import AutoCreatedField, AutoLastModifiedField from netjsonconfig.exceptions import ValidationError as SchemaError +from openwisp_utils.base import TimeStampedEditableModel from .. import settings as app_settings @python_2_unicode_compatible -class BaseModel(models.Model): +class BaseModel(TimeStampedEditableModel): """ Shared logic """ - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=64, unique=True, db_index=True) - created = AutoCreatedField(_('created'), editable=True) - modified = AutoLastModifiedField(_('modified'), editable=True) class Meta: abstract = True diff --git a/requirements.txt b/requirements.txt index 4c06fe3..ac5f662 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,4 @@ django-sortedm2m>=1.3.2,<1.4 django-reversion>=2.0.6,<2.1 django-x509>=0.2.0,<0.3.0 django-taggit>=0.22.1,<0.23.0 +openwisp-utils<0.2 \ No newline at end of file diff --git a/tests/settings.py b/tests/settings.py index e25672e..bee1c39 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -22,7 +22,6 @@ 'django.contrib.messages', 'django.contrib.staticfiles', 'django_netjsonconfig', - 'django_netjsonconfig.admin_theme', 'django.contrib.admin', 'sortedm2m', 'reversion', diff --git a/tests/urls.py b/tests/urls.py index a594cb9..43fbae1 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,11 +1,8 @@ from django.conf import settings from django.conf.urls import include, url +from django.contrib import admin from django.contrib.staticfiles.urls import staticfiles_urlpatterns -from django_netjsonconfig.admin_theme.admin import admin, openwisp_admin - -openwisp_admin() - urlpatterns = [ url(r'^admin/', include(admin.site.urls)), # controller URLs