Mika Löfgren
Mika Löfgren

Reputation: 13

Imported library 'owaspapi' contains no keywords. (if it's installed using pip)

I have made a library for Robot Framework (myapi.py). If I place it in the same directory with my robot test I can import the library like this:

Library    myapi.py

It works just fine.

However, I made the library pip installable so that others may take it into use in other projects easily. The library installs just fine with pip. I also changed the robot test to import the library like this:

Library    myapi

When I run the robot test I get warning:

[ WARN ] Imported library 'myapi' contains no keywords.

Here's the (pip installable) library file structure:

setup.py
myapi
  \__init__.py
  \myapi.py
  \version.py

The setup.py content is:

from setuptools import setup, find_packages

exec(open('myapi/version.py').read())

    setup(
        name='myapi',
        version=__version__,
        packages=['myapi'],
        install_requires=['requests']
    )

The init.py content is:

from .version import __version__

The version.py content is:

__version__ = '1.1.0'

The myapi.py content is (included only the first function I have):

import requests
import time
from time import strftime
import urllib2


__all__ = ['create_new_MY_session']

def create_new_MY_session():
    session_name = strftime('my_session_%S_%H_%M_%d_%m_%Y')
    r = requests.get("http://localhost:8080/JSON/core/action/newSession/?zapapiformat=JSON&name=" + session_name + "/'")
    print ("Creating new session: " + session_name + ". Status code...")
    print (r.status_code)
    assert (r.status_code) == 200

And finally the beginning of the robot test (login.robot):

*** Settings ***

Suite Setup       Open Firefox With Proxy
Suite Teardown    Close Browser

Library           mypapi
Library           OperatingSystem
Library           Selenium2Library

Resource    ws_keywords/product/webui.robot

*** Test Cases ***

MY Start New MY Session
    Create New MY Session

I wonder if the library works just fine when located right next to the robot test, what am I missing if I make it pip installable...? Why does it complain that there are no keywords?

Upvotes: 1

Views: 1040

Answers (1)

A. Kootstra
A. Kootstra

Reputation: 6981

In your myapi.py file you missing the class reference. When the file is placed inside your Robot Framework project this wasn't an issue, but when creating a pip installable module, this is required. A basic Python Library code example is this:

myapi.py

class myapi(object):

    ROBOT_LIBRARY_VERSION = 1.0

    def __init__(self):
        pass

    def keyword(self):
        pass

Upvotes: 1

Related Questions