You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

467 lines
17 KiB

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Lednerb">
<meta name="description" content="Bilberry Premium Theme for Hugo.">
<meta name="keywords" content="blog,personal,responsive,search,font awesome,pages,posts,multilingual,highlight.js,syntax highlighting,premium,shortcuts">
<meta name="generator" content="Hugo 0.50" />
<title> Testing &#34;django-netjsonconfig&#34; | My cool new Blog</title>
<meta name="description" content="The challenges which I faced while installing and using **django-netjsonconfig**. ">
<meta itemprop="name" content="Testing &#34;django-netjsonconfig&#34;">
<meta itemprop="description" content="The challenges which I faced while installing and using **django-netjsonconfig**. ">
<meta property="og:title" content="Testing &#34;django-netjsonconfig&#34;">
<meta property="og:description" content="The challenges which I faced while installing and using **django-netjsonconfig**. ">
<meta property="og:image" content="https://www.gravatar.com/avatar/88188b6cc451928eba90e8400bc68086?size=200">
<meta property="og:url" content="https://h.cowbay.org/article/netjsonconfig/">
<meta property="og:site_name" content="My cool new Blog">
<meta property="og:type" content="article">
<link rel="icon" type="image/png" href="https://h.cowbay.org/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://h.cowbay.org/favicon-16x16.png" sizes="16x16">
<link rel="stylesheet" href="https://h.cowbay.org/sass/combined.min.717098cb5503581e75f12e486a847ca410bf8367d4d8713f4c37affc868c5a1d.css">
</head>
<body class="bilberry-hugo-theme">
<nav>
<div class="container">
<ul class="topnav">
<li><a href="/page/about-bilberry/">About Bilberry</a></li>
<li><a href="https://github.com/Lednerb/bilberry-hugo-theme" target="_blank">Github</a></li>
</ul>
<div id="search-box" class="search">
<i class="fa fa-search"></i>
<input id="search" type="text" placeholder="Search ...">
</div>
</div>
</nav>
<header>
<div class="container">
<div class="logo">
<a href="/" class="logo">
<img src="https://www.gravatar.com/avatar/88188b6cc451928eba90e8400bc68086?d=mm&size=200" alt="">
<span class="overlay"><i class="fa fa-home"></i></span>
</a>
</div>
<div class="titles">
<h3 class="title"><a href="/">My cool new Blog</a></h3>
<span class="subtitle">Hello World! This is the most epic subtitle ever.</span>
</div>
<div class="languages">
<a href="/en" class="active">en</a>
<a href="/de">de</a>
</div>
<div class="toggler">
<i class="fa fa-bars" aria-hidden="true"></i>
</div>
</div>
</header>
<div class="main container">
<div class="article-wrapper u-cf single">
<a class="bubble" href="/article/netjsonconfig/">
<i class="fa fa-fw fa-pencil"></i>
</a>
<article class="default article">
<div class="content">
<h3><a href="/article/netjsonconfig/">Testing &#34;django-netjsonconfig&#34;</a></h3>
<div class="meta">
<span class="date moment">2018-01-14</span>
<span class="categories">
<a href="/categories/programming">programming</a>
</span>
</div>
<p>A task came up in Google Code-in which asked me to install the <a href="https://github.com/openwisp/django-netjsonconfig">django-netjsonconfig</a> module by <a href="https://www.openwisp.org">OpenWISP</a>. Furthermore, I&rsquo;m also supposed to share the challenges I faced during the set-up process as a sort of feedback. I&rsquo;ll be trying be concise in this post so, without further ado, I&rsquo;m beginning with this post.</p>
<h1 id="installing-django-netjsonconfig">Installing &ldquo;django-netjsonconfig&rdquo;</h1>
<p>The installation instructions for this this module have been well-documented on its <a href="https://github.com/openwisp/django-netjsonconfig#installing-for-development">GitHub repository</a>. So I began the installation by creating a <strong>Python 2.7 Virtual Environment</strong> using <code>python2 -m virtualenv py2</code> for the sake of cleanliness on my local machine. I chose <code>python2</code> for since for this since I was also on the lookout for bugs in the module and most of the bugs seem to be related with it since it&rsquo;s a bit outdated now.<br />
I then activated the <code>virtualenv</code> and started entering the installation commands according to the instructions in the repository. Everything went on smoothly until the <code>python setup.py develop</code> command. I got an error as shown in the below picture.</p>
<p><img src="/images/netjsonconfig/django2.png" alt="develop failed" /></p>
<p>Clearly, the error suggests that <strong>Django v2.0.1</strong> was being downloaded which <strong>isn&rsquo;t supported</strong> by <strong>Python 2.7</strong>. A bit of browsing led me to the conclusion that the <code>setup.py</code> needed to be modified to download <strong>older Django versions</strong> for Python 2.7. So, I added a simple <code>if-else</code> block to the django installation statement as shown in the picture.</p>
<p><img src="/images/netjsonconfig/my-fix.png" alt="setup.py fix" /></p>
<p>If you&rsquo;re curious about my fix, this is the <a href="https://github.com/UtkarshVerma/django-netjsonconfig/commit/1575acbbc719e539cd8ecbffc761d8b9c2023d56">link</a>.</p>
<p>Here, what&rsquo;s being done is basically:</p>
<ul>
<li>Detect <code>python</code> version used for installation using <code>sys.version_info[0]</code>.</li>
<li>Install older Django versions if <code>sys.version_info[0]&lt;3</code>, that is <code>python2</code> is detected.</li>
<li>Install latest version if above condition isn&rsquo;t satisfied, that is <code>python3</code> is detected.</li>
</ul>
<p>I also had to remove the django installation line from <code>requirements.txt</code> since <code>setup.py</code> was fetching the requirement names from there. After applying this fix, I re-ran the <code>python setup.py develop</code> command and there it was! The sweet smell of success. Now an <strong>older yet python2 compatible</strong> version of <strong>Django</strong> was being installed when using <code>python2</code> as clearly shown in one of the pictures below:</p>
<p><img src="/images/netjsonconfig/django-v-fixed.png" alt="Older Django being downloaded" /></p>
<p><img src="/images/netjsonconfig/Success!.png" alt="Successful!" /></p>
<p>After this, I installed some more requirements using <code>pip install -r requirements-test.txt</code>
This was how I&rsquo;d finished installing <code>django-netjsonconfig</code> using Python2. Now all that was left to do was to to do the migrations and run the server.</p>
<h1 id="making-migrations-and-creating-a-superuser">Making Migrations and Creating a superuser</h1>
<p>By referring to the instructions on the repo again, I opened the <code>tests</code> directory,
did the migrations using <code>./manage.py migrate</code>. It was really satisfying to see all the CLI responses coloured in <strong>green</strong>. :smile:
<img src="/images/netjsonconfig/migrate.png" alt="Migrate" /></p>
<p>After that, there was the superuser creation using <code>./manage.py createsuperuser</code>.</p>
<p><img src="/images/netjsonconfig/superuser.png" alt="Superuser creation" /></p>
<h1 id="running-the-test-server">Running the Test Server</h1>
<p>I started the test server using <code>./manage.py runserver</code> and it was successful.</p>
<p><img src="/images/netjsonconfig/up-and-running.png" alt="Server Up and Running!" /></p>
<p>I could also now visit the server at <a href="http://localhost/admin">http://localhost:8000/admin</a>.</p>
<p><img src="/images/netjsonconfig/logged-in.png" alt="Logged In" /></p>
<h1 id="conclusion">Conclusion</h1>
<p>So, that&rsquo;s how I installed the <strong>django-netjsonconfig</strong> module. Also, I&rsquo;ve commited my fixes to my <strong>forked repo</strong> <a href="https://github.com/UtkarshVerma/django-netjsonconfig">here</a>. Here&rsquo;s the <a href="https://github.com/openwisp/django-netjsonconfig/pull/71">link to my pull request</a>. That concludes this post.</p>
</div>
<div class="footer">
<div class="tags">
<i class="fa fa-tags"></i>
<div class="links">
<a href="/tags/google-code-in">google code in</a>
<a href="/tags/openwisp">openwisp</a>
<a href="/tags/django">django</a>
</div>
</div>
</div>
</article>
</div>
<div id="disqus_thread"></div>
<script type="application/javascript">
var disqus_config = function () {
};
(function() {
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
return;
}
var d = document, s = d.createElement('script'); s.async = true;
s.src = '//' + "bilberry-hugo-theme" + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="https://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</div>
<footer>
<div class="container">
<div class="recent-posts">
<strong>Latest posts</strong>
<ul>
<li>
<a href="/article/google-550-5-7-1-sloution/">寄信給google被退信 錯誤 550-5.7.1的解法</a>
</li>
<li>
<a href="/article/netdata-linux-system-performance-monitor-dashboard/">Netdata Linux System Performance Monitor Dashboard</a>
</li>
<li>
<a href="/article/linux-performance-monitor-dashboard-netdata-md/">Linux 底下極其詳細的System performace Monitor Dashboard - Netdata</a>
</li>
<li>
<a href="/article/syntax-test/">Syntax Test</a>
</li>
<li>
<a href="/article/psql-create-role-and-assign-priviledges/">psql create role and assign priviledges</a>
</li>
<li>
<a href="/article/study-url/">Study URL</a>
</li>
<li>
<a href="/article/rsync-time-backup/">[筆記] Linux 底下好用的備份工具 rsync-time-backup</a>
</li>
</ul>
</div>
<div class="categories">
<a href="/categories/"><strong>Categories</strong></a>
<ul>
<li>
<a href="/categories/%E6%9C%AA%E5%88%86%E9%A1%9E">未分類 (86)</a>
</li>
<li>
<a href="/categories/%E5%B7%A5%E4%BD%9C%E7%AD%86%E8%A8%98">工作筆記 (68)</a>
</li>
<li>
<a href="/categories/%E5%85%B6%E4%BB%96">其他 (46)</a>
</li>
<li>
<a href="/categories/%E7%AD%86%E8%A8%98">筆記 (30)</a>
</li>
<li>
<a href="/categories/%E5%89%AA%E5%A0%B1">剪報 (18)</a>
</li>
<li>
<a href="/categories/starting">Starting (5)</a>
</li>
<li>
<a href="/categories/blog">Blog (4)</a>
</li>
</ul>
</div>
<div class="right">
<div class="external-profiles">
<strong>Social media</strong>
<a href="https://twitter.com/TheRealLednerb" target="_blank"><i class="fa fa-twitter-adblock-proof"></i></a>
<a href="https://github.com/Lednerb" target="_blank"><i class="fa fa-github"></i></a>
</div>
<div class="languages">
<strong>Other languages</strong>
<a href="/en" class="active">en</a>
<a href="/de">de</a>
</div>
</div>
</div>
</footer>
<div class="credits">
<div class="container">
<div class="copyright">
<a href="https://github.com/Lednerb" target="_blank">
&copy;
2017
by Lednerb
</a>
</div>
<div class="author">
<a href="https://github.com/Lednerb/bilberry-hugo-theme" target="_blank">Bilberry Hugo Theme</a>
</div>
</div>
</div>
<script type="text/javascript" src="https://h.cowbay.org/js/externalDependencies.39c47e10e241eae2947b3fe21809c572.js" integrity="md5-OcR&#43;EOJB6uKUez/iGAnFcg=="></script>
<script type="text/javascript" src="https://h.cowbay.org/js/theme.ff50ae6dc1bfc220b23bf69dbb41b54e.js" integrity="md5-/1CubcG/wiCyO/adu0G1Tg=="></script>
<script>
$(".moment").each(function() {
$(this).text(
moment( $(this).text() )
.locale( "en" )
.format('LL')
);
});
$(".footnote-return sup").html("");
</script>
<script>
var client = algoliasearch("Y2C4RWMPXW", "50ea7f8c41c0ad233926e0be2b769ed1");
var index = client.initIndex("default-content");
$('#search').autocomplete({ hint: false, autoselect: true, debug: false },
[
{
source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5, filters: 'language: en' }),
displayKey: function(suggestion) {
return suggestion.title || suggestion.author
},
templates: {
suggestion: function(suggestion) {
return "<span class='entry " + suggestion.type + "'>"
+ "<span class='title'>" + suggestion.title + "</span>"
+ "<span class='fa fa-fw " + suggestion.iconClass + "'></span>"
+ "</span>"
;
},
empty: function() {
return "<span class='empty'>Nothing found.</span>"
},
footer: function() {
return '<div class="branding">Powered by <img src="https:\/\/h.cowbay.org\/dist\/algolia-logo-light.svg" /></div>'
}
},
}
])
.on('autocomplete:selected', function(event, suggestion, dataset) {
window.location = (suggestion.url);
})
.keypress(function (event, suggestion) {
if (event.which == 13) {
window.location = (suggestion.url);
}
});
</script>
</body>
</html>