Reputation: 3559
bashhostlist.py
from __future__ import print_function
import subprocess
import sys
import logging
class Singleton(object):
"""
Creating a single object that will work for all the plugin
We create an object with an attrubute of the file path which is same for all the plugins
So rather than creating new object for all the same object works so making singleton
"""
_instance = None
def __new__(class_, *args, **kwargs):
if not isinstance(class_._instance, class_):
class_._instance = object.__new__(class_, *args, **kwargs)
return class_._instance
class InventoryMgmt(Singleton):
hostlist = {'hostcontent':None}
def __init__(self, path):
""" bash file path where environement are set """
self._scriptpath = path
The Singleton class is for singleton pattern.
Error type:
The error occurs in python version3.4 but not in python2.7
Error Log:
2017-11-03 03:09:39,187 - root - INFO - Plugin started
2017-11-03 03:09:39,187 - root - INFO - Trying to fetch from etc_shadow_plugin
2017-11-03 03:09:39,187 - root - ERROR - object() takes no parameters
Traceback (most recent call last):
File "/home/sjoshi/python3.4/check-acess/plugins/plugin_etc_shadow/plugin_etc_shadow.py", line 91, in run
listofhost=phelper.getallthehosts(hostnamewithoutdollar, envscriptpath)
File "/home/sjoshi/python3.4/check-acess/lib/sshplugin/sshplugin.py", line 172, in getallthehosts
myhosts=hostname.InventoryMgmt(envscriptpath)
File "/home/sjoshi/python3.4/check-acess/lib/inventory/bashhostlist.py", line 16, in __new__
class_._instance = object.__new__(class_, *args, **kwargs)
This is how I am making the call to the class
myhosts=hostname.InventoryMgmt(envscriptpath)
which is also clearly shown in the error message
Doubts:
Even though the init() method exists that takes one parameter why is it throwing that error. And most importantly the error was not there when it was run on python2.7
I have confirmed its not the tab and spacing problem, I saw many answers doubting on that problems so
Upvotes: 0
Views: 262
Reputation: 16624
You should remove those extra arguments. In python2.7 if you pass extra arguments to object.__new__
, a DeprecationWarning
will be issued, but this warning has been suppressed by default, if you run your script with -Wdefault
switch, you will see:
$ python2 -Wdefault singleton.py
singleton.py:13: DeprecationWarning: object() takes no parameters
class_._instance = object.__new__(class_, *args, **kwargs)
<__main__.InventoryMgmt object at 0x106a2fd90> <__main__.InventoryMgmt object at 0x106a2fd90> True
Since python3.3 this warning was converted to an error.
Upvotes: 2