{"id":48489743,"url":"https://github.com/cloudblue/connect-extension-python-boilerplate","last_synced_at":"2026-04-07T11:04:41.225Z","repository":{"id":39287876,"uuid":"366769169","full_name":"cloudblue/connect-extension-python-boilerplate","owner":"cloudblue","description":null,"archived":false,"fork":false,"pushed_at":"2022-09-02T10:34:08.000Z","size":54,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-13T06:34:35.429Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudblue.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-05-12T15:48:24.000Z","updated_at":"2021-11-25T12:10:22.000Z","dependencies_parsed_at":"2022-08-26T19:41:35.483Z","dependency_job_id":null,"html_url":"https://github.com/cloudblue/connect-extension-python-boilerplate","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/cloudblue/connect-extension-python-boilerplate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudblue%2Fconnect-extension-python-boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudblue%2Fconnect-extension-python-boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudblue%2Fconnect-extension-python-boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudblue%2Fconnect-extension-python-boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudblue","download_url":"https://codeload.github.com/cloudblue/connect-extension-python-boilerplate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudblue%2Fconnect-extension-python-boilerplate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31509946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-07T11:04:41.092Z","updated_at":"2026-04-07T11:04:41.220Z","avatar_url":"https://github.com/cloudblue.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cookiecutter for CloudBlue Connect Extensions  \n  \n\n\u003e :warning: Is recommended to always use the [Connect CLI](https://github.com/cloudblue/connect-cli) in order to bootstrap projects since may enhance the experience and ensure usage of latest functionalities\n\n\nPowered by [Cookiecutter](https://github.com/cookiecutter/cookiecutter), Cookiecutter for CloudBlue Connect Extensions provides a framework for boostraping your custom extensions for Connect.\n\nWith this project you can write your own extension to execute either locally or using the Extension as a Service(a.k.a EaaS) module of Connect.\n\n## Features\n\n* Works fit python 3.8 and 3.9\n* Bootstraps a custom extension project within seconds\n* Provides all needed dependencies\n* Provides basic testing functionality including right mockers\n* Compatible with github Actions\n* Configures project licensing\n\n## Usage\n\nCreating a project that provides a extension package that could be run either using the [Connect CLI](https://github.com/cloudblue/connect-cli) or directly in [Connect](https://connect.cloudblue.com) is simple.\n\nFirst of all, install in your local machine Cookiecutter, for example you can do it using pip:\n\n\t$ pip install cookiecutter\n\nOnce cookiecutter is installed you can instantiate it against this repository:\n\n\t$ cookiecutter https://github.com/cloudblue/connect-extension-python-boilerplate\n \n You'll be prompted for some values. Provide them and a Connect project will be created for you.\n\n**Warning**: Please change sample data with your own desired information\n\n\tproject_name [My Awesome Project]: My Awesome Project\n\tproject_slug [my_awesome_project]:\n\tdescription [My extension for purchase request processing is super useful!]:\n\tpackage_name [connect_ext]: My super awesome package\n\tpackage_slug [my_super_awesome_package]:\n\tauthor [Globex Corporation]: ISV Inc\n\tversion [0.1.0]: 1.0.0\n\tSelect license:\n\t1 - Apache Software License 2.0\n\t2 - MIT\n\t3 - BSD\n\tChoose from 1, 2, 3 [1]: 1\n\tuse_github_actions [y]: y\n\tuse_asyncio [y]: n\n\tCapabilities_Info [In order to initialize your extension, we require to know what capabilities it must support, please answer below y (for Yes) or n (for No). Press enter to continue...]: \n\tsubscription_process_capabilities_1of6 [Would you like to process asset purchase requests? (default: n)]: y\n\tsubscription_process_capabilities_2of6 [Would you like to process asset change requests? (default: n)]: \n\tsubscription_process_capabilities_3of6 [Would you like to process asset suspend requests? (default: n)]: \n\tsubscription_process_capabilities_4of6 [Would you like to process asset resume requests? (default: n)]: \n\tsubscription_process_capabilities_5of6 [Would you like to process asset cancel requests? (default: n)]: \n\tsubscription_process_capabilities_6of6 [Would you like to process asset adjustment requests? (default: n)]: \n\tsubscription_validation_capabilities_1of2 [Would you like to validate asset purchase requests? (default: n)]: y\n\tsubscription_validation_capabilities_2of2 [Would you like to validate asset change requests? (default: n)]: \n\tproduct_capabilities_1of2 [Would you like to execute product actions? (default: n)]: \n\tproduct_capabilities_2of2 [Would you like to process product custom events? (default: n)]: \n\ttier_config_process_capabilities_1of3 [Would you like to process tier config setup requests? (default: n)]: \n\ttier_config_process_capabilities_2of3 [Would you like to process tier config change requests? (default: n)]: \n\ttier_config_process_capabilities_3of3 [Would you like to process tier config adjustment requests? (default: n)]: \n\ttier_config_validation_capabilities_1of2 [Would you like to validate tier config setup requests? (default: n)]: \n\ttier_config_validation_capabilities_2of2 [Would you like to validate tier config change requests? (default: n)]: y\n\tDone! Your extension project is ready to go!\n\nNow you can access your recently created extension folder and take a look arround it:\n\n\t$ cd my_awesome_project\n\t$ ls\n\nStarting here, if you want you can put your project on a git repository, for example at github:\n\n\t$ git init\n\t$ git add .\n\t$ git commit -m \"first commit\"\n\t$ git remote add origin https://github.com/cloudblue/my_custom_extension.git\n\t$ git push -u origin master\n\nIn the use case that you decided to use github actions, you will notice that a first CI task will run, this one will run the sample test\n\n## Creating your own extension\n\nFirst, edit the `extension.json` file, this file is a descriptor that can be read by Connect as well as Connect CLI to understand your extension. Please ensure that all properties are defined. On the capabilities dictionary, you can find the capabilities your extension is able to manage and also the states of each one.\n\nThe code of your extension must be defined on the `extension.py` file; here is where the system will find your function and execute it, either locally or remotely, depending of your election.\n\nJob done? Try to run it locally!\n\nIf you prefer try it from Connect CLI, go ahead and execute the following from your terminal:\n\n\t$ ccli project extension bootstrap\n\n\t************************************************************\n\n\tMy Awesome Extension version 1.0.0\n\n\t************************************************************\n\n\tWelcome to My Awesome Extension !\n\n\tMy extension for purchase request processing is super useful!\n\n\tLicense\n\n\tMy Awesome Extension is licensed under the Apache Software License 2.0 license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudblue%2Fconnect-extension-python-boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudblue%2Fconnect-extension-python-boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudblue%2Fconnect-extension-python-boilerplate/lists"}