Search code examples
python-3.xpysnmpnameko

Error while creating a service using nameko for Pysnmp get_request--Attempted "nameko_entrypoints" operation on ASN.1 schema object


I am new to pysnmp and nameko. I have been assignment a work to create a service in nameko framework to perform snmp get_request using pysnmp library.

Below is the code i have tried

from pysnmp.hlapi import *
from nameko.rpc import rpc


class GreetingService(object):
    name = "greeting_service"

    @rpc
    def getFunc(oid):
        errorIndication, errorStatus, errorIndex, varBinds = next(
            getCmd(SnmpEngine(),
                   CommunityData('public', mpModel=0),
                   UdpTransportTarget(('snmp.live.gambitcommunications.com', 161)),
                   ContextData(),
                   ObjectType(ObjectIdentity('SNMPv2-MIB', oid, 0)))
        )

        if errorIndication:
            print(errorIndication)
        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
        else:
            for varBind in varBinds:
                print(' = '.join([x.prettyPrint() for x in varBind]))

    if __name__ == "__main__":
        getFunc('sysName')

when i try to start the service using terminal with the following command

$ nameko run helloworld

I get the following error message.


syed@syed-ThinkPad-E480:~/Pysnmp$ nameko run helloworld
Traceback (most recent call last):
  File "/home/syed/.local/bin/nameko", line 11, in <module>
    sys.exit(main())
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/main.py", line 112, in main
    args.main(args)
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/commands.py", line 110, in main
    main(args)
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/run.py", line 181, in main
    import_service(path)
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/run.py", line 71, in import_service
    if inspect.getmembers(potential_service, is_entrypoint):
  File "/usr/lib/python3.7/inspect.py", line 354, in getmembers
    if not predicate or predicate(value):
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/run.py", line 35, in is_entrypoint
    return hasattr(method, ENTRYPOINT_EXTENSIONS_ATTR)
  File "/home/syed/.local/lib/python3.7/site-packages/pyasn1/type/base.py", line 221, in __getattr__
    raise error.PyAsn1Error('Attempted "%s" operation on ASN.1 schema object' % attr)
pyasn1.error.PyAsn1Error: Attempted "nameko_entrypoints" operation on ASN.1 schema object
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/home/syed/.local/bin/nameko", line 11, in <module>
    sys.exit(main())
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/main.py", line 112, in main
    args.main(args)
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/commands.py", line 110, in main
    main(args)
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/run.py", line 181, in main
    import_service(path)
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/run.py", line 71, in import_service
    if inspect.getmembers(potential_service, is_entrypoint):
  File "/usr/lib/python3.7/inspect.py", line 354, in getmembers
    if not predicate or predicate(value):
  File "/home/syed/.local/lib/python3.7/site-packages/nameko/cli/run.py", line 35, in is_entrypoint
    return hasattr(method, ENTRYPOINT_EXTENSIONS_ATTR)
  File "/home/syed/.local/lib/python3.7/site-packages/pyasn1/type/base.py", line 221, in __getattr__
    raise error.PyAsn1Error('Attempted "%s" operation on ASN.1 schema object' % attr)
pyasn1.error.PyAsn1Error: Attempted "nameko_entrypoints" operation on ASN.1 schema object

Please help me out to understand weather what i have tried is correct way or else it is wrong.. If so how to rectify the mistake.

Any help will be appreciable.

Thanks in advance


Solution

  • It has something to do with the way how nameko hooks up your code...

    It seems to try looking up nameko_entrypoints attribute at all objects it can find in your module eventually running into ASN.1 schema objects (which are sacred and should not be used for anything other than blueprinting purposes).

    My suggestion would be to replace from pysnmp.hlapi import * with specific imports of pysnmp classes/functions you are using in your code. That should hopefully hide fragile pieces out of nameko's sight.