Writing a plugin ================ **LetThereBe** is designed to be extensible and customisable so that it can be **tailored to other services or programming languages, and users can write **plugins. Any code below can be either added to a config.py file in the directory from where you are running the ``lettherebe`` command, or you can add them to the main package via There are three main components that can be extended: Repository hosting providers ---------------------------- At the moment we have provided support for GitHub, but other services such as BitBucket or GitLab could be added. To do this, you need to define a function that sets up a repo on the given service. The basic structure of the code to do this is:: from lettherebe.registry import repository_host, Repository class MyRepository(Repository): def add_directory_to_repo(local_path, remote_path, message): # Code here that knows how to put the directory at local_path into # the repository, in a sub-directory given by remote_path. The # message argument gives the commit message. def instructions_to_get_repo(self): # This should return a string with instructions on how to access # the repository and how to clone. @repository_host('name-of-service') def set_up_repo(argument1, argument2=False): """ Set up an empty repository on a repository host Parameters ---------- argument1 : str What is the value of argument1? argument2 : bool, optional What about the value of argument2? """ # create repo here then return class to provide abstract interface return MyRepository(...) The questions for the command-line and website are taken from the docstring, which should be in NumpyDoc format. Default values can be specified by using keyword arguments. It is important that this function returns a Repository subclass, but otherwise you can do anything you like in the function. All the rest will be taken care of by the ``lettherebe`` package! Package templates for different languages ----------------------------------------- To add support for a 'best practice template' for a new language, you will need to define a function as follows:: from lettherebe.registry import package_language @package_language('fortran66') def set_up_fortran66_package(tests=True): """ Set up a basic Python package Parameters ---------- tests : bool, optional Should tests be included? """ directory = tempfile.mkdtemp() # populate directory here return directory The use of ``tests`` as the argument is just an example, and you can put any number of arguments/options. The function should write the generated files to a local temporary directory and return the path to this directory. The rest of the package will then automatically sync those generated files to the remote repository.