Request for Proposal (RFP) - Python wrapper

Global Fishing Watch

Global Fishing Watch

Software Engineering
Remote
Posted on Saturday, June 22, 2024

Who we are

Global Fishing Watch is an international nonprofit organization dedicated to advancing ocean governance through increased transparency of human activity at sea. By creating and publicly sharing map visualizations, data and analysis tools, we aim to enable scientific research and transform the way our ocean is managed. We believe human activity at sea should be public knowledge in order to safeguard the global ocean for the common good of all.

Global Fishing Watch has initiated the program delivery of our new organizational strategy, as delivered through four regional teams. Capacity development, trainings and making our data available widely to a range of users will form a core part of our upcoming work.

What we are looking for

We seek proposals for the development of a Python wrapper library to facilitate the integration and usage of its APIs by scientists and developers. The current APIs are accessible via R programming language, and this project aims to extend accessibility to Python users.

Description of work

Objectives

Main deliverables of this project:

  • Conducting analysis of Global Fishing Watch APIs (version 3) and developing a design plan and documentation.
  • Developing the Python wrapper library source code, including all public APIs, in a GitHub repository within the Global Fishing Watch organization.
  • Creating documentation, including installation instructions, usage examples, API reference documentation, and a contribution guide.
  • Implementing test cases and providing test reports to ensure functionality, reliability, and compatibility with different Python versions and environments.

Scope

The following describes the scope of the Python wrapper library:

  1. API Analysis and Design
  • Analyze the existing Global Fishing Watch (GFW) APIs (version 3) and accompanying documentation to comprehend the endpoints, parameters, authentication methods, and response formats.
  • Based on the analysis, design the structure and architecture of the Python wrapper library, determining classes, functions, and methods necessary for efficient interaction with the APIs.
  • Ensure adherence to naming conventions similar to the gfwR (R package) for seamless workflow and user support.
  • Submit the design documentation for review by the GFW team prior to implementation.

  1. Development
  • Develop the Python wrapper library according to the approved design specifications, utilizing Python3 in a dockerized environment.
  • Implement API request/response handling and comprehensive error handling, managing all error types and displaying appropriate error messages. Reference provided error codes and Public Postman collection examples for guidance.
  • Include instructions on obtaining an API Token from the API Token page for authentication mechanisms.

  1. Documentation
  • Develop comprehensive documentation for the wrapper/library end users, including:
    • Installation instructions in the README file for easy setup
    • Usage examples demonstrating various functionalities of the library/wrapper.
    • API reference documentation hosted in the GitHub Wiki within the same repository.
    • Docstrings in all public functions and classes.
  • Develop comprehensive documentation for updating/developing more features in the wrapper, including:
    • A contribution guide similar to the gfwR contribution guide to facilitate collaboration and contributions from the community.
    • Instructions on how to update the wrapper, so explaining that it requires docker and the steps for development.
  1. Testing
  • Conduct thorough testing of the Python wrapper library to ensure functionality, reliability, and compatibility across different Python versions and environments.
  • Include unit tests for each function of the wrapper, some examples can be found in the Public Postman collection
  • Include integration tests based on the list of use cases that Global Fishing Watch.

Acceptance Criteria

The Python wrapper library will be considered accepted when it meets the following criteria:

  • It successfully integrates with all public API endpoints in version 3.
  • Easy-to-understand code written in English.
  • Proper error handling and authentication mechanisms.
  • Passing all test cases and exhibiting expected behavior.
  • Complete, accurate, and easy-to-understand documentation in English.

Timeline

The estimated timeline for the project is 5 weeks.

Week 1 - Analysis and Design

Week 2 - GFW review design

Week 3 & 4 - Development, Testing, and Documentation

Week 4 & 5 - GFW Testing and Feedback

Project tracking:

  • Weekly checkpoints with GFW product manager, research, and engineering representatives.
  • Tasks and bug tracking will be maintained in a Jira project.

Terms and Conditions

  • Any changes to the scope of work must be approved in writing by both parties.
  • The Python wrapper library will be a work-for-hire, with all intellectual property rights belonging to Global Fishing Watch, which plans to license the package under the open-source Apache-2.0 licence as it has done with the gfwR package.

Vendor qualifications requirements

For this project, the vendor should possess a combination of technical skills, experience, and qualifications related to API analysis, Python programming, software design, documentation, and testing.

Submission requirements

Interested parties should submit a proposal via email as a Word or PDF attachment to apis@globalfishingwatch.org. The proposal should consist of:

  • A cover letter detailing the provider’s interest and qualifications, including previous experience relevant to the RFP.
  • A narrative proposal outlining the approach to fulfilling the responsibilities outlined in the RFP.
  • A descriptive budget outlining the total cost of fulfilling the terms of the RFP.
  • A proposed timeline for completing the consultancy.
  • Resumes/CVs of key project personnel.

Submission deadline

Proposals should be submitted by July 15th 2024.