wandbox-api 0.10.0
A Python binding to the Wandbox API.
License: MIT
Requires Python: >3.5
Keywords: API,Wandbox

# Wandbox API for Python

[![PyPI version](https://badge.fury.io/py/wandbox-api.svg)](https://badge.fury.io/py/wandbox-api)
[![Python Versions](https://img.shields.io/pypi/pyversions/wandbox_api.svg)](https://pypi.org/project/wandbox-api/)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/de16baa804f74dbe903201df65965118)](https://www.codacy.com/gh/srz-zumix/wandbox-api/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=srz-zumix/wandbox-api&amp;utm_campaign=Badge_Grade)
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/srz-zumix/wandbox-api.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/srz-zumix/wandbox-api/context:python)
[![GitHub Actions](https://github.com/srz-zumix/wandbox-api/actions/workflows/main.yml/badge.svg)](https://github.com/srz-zumix/wandbox-api/actions/workflows/main.yml)

[Wandbox](http://wandbox.org/) is a social compilation service.  
This project is a Pythonic binding to the Wandbox API, and CLI command.

* related
  * [wandbox-builder](https://github.com/melpon/wandbox-builder)
  * [Wandbox Status](https://srz-zumix.github.io/wandbox-status/)
  * [Wandbox News](https://github.com/srz-zumix/wandbox-news/)

## Installation

> pip install wandbox-api

## CLI

[wandbox](#wandbox)

### for Languages

|                     |                     |                           |                           |                 |
|:--------------------|:--------------------|:--------------------------|:--------------------------|:----------------|
| [Bash](#Bash)       | [C](#C)             | [C#](#C-1)                | [C++](#C-2)               | [CPP](#CPP)     |
| [Crystal](#Crystal) | [D](#D)             | [Elixir](#Elixir)         | [Erlang](#Erlang)         | [Go](#Go)       |
| [Groovy](#Groovy)   | [Haskell](#Haskell) | [Java](#Java)             | [JavaScript](#JavaScript) | [Julia](#Julia) |
| [Lazy K](#Lazy-K)   | [Lisp](#Lisp)       | [Lua](#Lua)               | [Nim](#Nim)               | [OCaml](#OCaml) |
| [OpenSSL](#OpenSSL) | [Pascal](#Pascal)   | [Perl](#Perl)             | [PHP](#PHP)               | [Pony](#Pony)   |
| [Python](#Python)   | [R](#R)             | [Ruby](#Ruby)             | [Rust](#Rust)             | [Scala](#Scala) |
| [SQL](#SQL)         | [Swift](#Swift)     | [TypeScript](#TypeScript) | [Vim script](#Vim-script) | [Zig](#Zig)     |

### wandbox

```sh
usage: wandbox [-h] [-v] [-l LANGUAGE] [-c COMPILER] [-x OPTIONS] [-r RUNTIME_OPTIONS] [-n] [-s] [--encoding ENCODING]
               [--no-default] [--stdin STDIN] [--retry-wait SECONDS] [--retry COUNT]
               {list,compilers,versions,lang,option,permlink,run,template,run-template,user,help} ...

positional arguments:
  {list,compilers,versions,lang,option,permlink,run,help}
    list                show list api response. see `list -h`
    compilers           show support compilers. see `compilers -h`
    versions            show support compilers. see `versions -h`
    lang                show support languages. see `lang -h`
    option              show compiler options. see `option -h`
    version             show compiler version from version-command. see `version -h`
    permlink            get permlink. see `permlink -h`
    run                 build and run command. see `run +h`
    template            get wandbox template code. see `template -h`
    run-template        run wandbox template code. see `run-template +h`
    user                get wandbox user info. see `user -h`
    help                show subcommand help. see `help -h`

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -l LANGUAGE, --language LANGUAGE
                        specify language
  -c COMPILER, --compiler COMPILER
                        specify compiler
  -x OPTIONS, --options OPTIONS
                        used options for a compiler
  -r RUNTIME_OPTIONS, --runtime-options RUNTIME_OPTIONS
                        runtime options
  -n, --dryrun          dryrun
  -V, --verbose         verbose log
  -s, --save            generate permanent link.
  --encoding ENCODING   set encoding
  --no-head             ignore head compiler version (at auto setup)
  --no-default          no set default options
  --stdin STDIN         set stdin
  --retry-wait SECONDS  wait time for retry when HTTPError occurs
  --retry COUNT         number of retries when HTTPError occurs
```

----

### Bash

Source files required for runtime are automatically added to the file list.

* wandbox-bash

#### Bash Example

> wandbox-bash run sample.sh

[Bash Example](./samples/command/src/bash)

----

### C

Include files required for compilation are automatically added to the file list.

* wandbox-cc  
  (wandbox -l C)
* wandbox-gcc  
  (wandbox -l C -c gcc-*-c)
* wandbox-clang  
  (wandbox -l C -c clang-*-c)

#### C Example

> wandbox-gcc run sample.c test.c  
> CXX="wandbox-gcc run" make

[C Example](./samples/command/src/cc)

----

### C#

* wandbox-cs  
  (wandbox -l C#)

#### C# Example

> wandbox-cs run sample.cs test.cs

[C# Example](./samples/command/src/csharp)

----

### C++

Include files required for compilation are automatically added to the file list.

* wandbox-cxx  
  (wandbox -l C++)
* wandbox-g++  
  (wandbox -l C++ -c gcc-*)
* wandbox-clang++  
  (wandbox -l C++ -c clang-*)

```sh
usage: wandbox-cxx [-h] [-v] [-c COMPILER] [-x OPTIONS] [-r RUNTIME_OPTIONS] [-n] [-s] [--encoding ENCODING]
                   [--no-default] [--stdin STDIN] [--retry-wait SECONDS] [--retry COUNT] [--std VERSION]
                   [--boost VERSION] [--no-warning] [--optimize] [--cpp-pedantic PEDANTIC] [--cpp-verbose] [--sprout] [--msgpack]
                   {list,compilers,versions,lang,option,permlink,run,template,run-template,user,help} ...

positional arguments:
  {list,compilers,versions,lang,option,permlink,run,help}
    list                show list api response. see `list -h`
    compilers           show support compilers. see `compilers -h`
    versions            show support compilers. see `versions -h`
    lang                show support languages. see `lang -h`
    option              show compiler options. see `option -h`
    version             show compiler version from version-command. see `version -h`
    permlink            get permlink. see `permlink -h`
    run                 build and run command. see `run +h`
    template            get wandbox template code. see `template -h`
    run-template        run wandbox template code. see `run-template +h`
    user                get wandbox user info. see `user -h`
    help                show subcommand help. see `help -h`

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -c COMPILER, --compiler COMPILER
                        specify compiler
  -x OPTIONS, --options OPTIONS
                        used options for a compiler
  -r RUNTIME_OPTIONS, --runtime-options RUNTIME_OPTIONS
                        runtime options
  -n, --dryrun          dryrun
  -V, --verbose         verbose log
  -s, --save            generate permanent link.
  --encoding ENCODING   set encoding
  --no-head             ignore head compiler version (at auto setup)
  --no-default          no set default options
  --stdin STDIN         set stdin
  --retry-wait SECONDS  wait time for retry when HTTPError occurs
  --retry COUNT         number of retries when HTTPError occurs
  --std VERSION         set --std options
  --boost VERSION       set boost options version X.XX or nothing
  --no-warning          disable warning option
  --optimize            use optimization
  --cpp-pedantic PEDANTIC
                        use cpp-pedantic
  --cpp-verbose         use cpp-verbose
  --sprout              use sprout
  --msgpack             use msgpack
```

#### C++ Example

> wandbox-cxx -c gcc-head run main.cpp -DWANDBOX  
> CXX="wandbox-g++ run" make

[C++ Example](./samples/command/src/cxx)

----

### CPP

Include files required for compilation are automatically added to the file list.

* wandbox-CPP  
  (wandbox -l CPP)
* wandbox-gcc-PP  
  (wandbox -l CPP -c gcc-*-pp)
* wandbox-clang-PP  
  (wandbox -l CPP -c clang-*-pp)

#### CPP Example

> wandbox-clang-PP run -CC -nostdinc -E -P sample.cpp test.cpp

[CPP Example](./samples/command/src/cpp)

----

### Crystal

Import modules required for compilation are automatically added to the file list.

* wandbox-crystal  
  (wandbox -l Crystal)

#### Crystal Example

> wandbox-crystal run sample.cr

[Crystal Example](./samples/command/src/crystal)

----

### D

* wandbox-dmd  
  (wandbox -l D -c dmd-*)
* wandbox-ldmd2  
  (wandbox -l D -c ldc-*)
* wandbox-dub

#### D Example

> wandbox-dmd run sample.d test2.d packages/test.d  
> wandbox-dub run

[D Example](./samples/command/src/dmd)
[Dub Example](./samples/command/src/dub)

----

### Elixir

* wandbox-elixir  
  (wandbox -l Elixir)
* wandbox-mix (Experimental)

#### Elixir Example

> wandbox-elixir run sample.exs  
> wandbox-mix run test

[Elixir Example](./samples/command/src/elixir)

----

### Erlang

* wandbox-erlc  
  (wandbox -l Erlang)

#### Erlang Example

> wandbox-erlc run prog.erl

[Erlang Example](./samples/command/src/erlang)

----

### Go

* wandbox-go  
  (wandbox -l Go)

#### Go Example

> wandbox-go run sample.go

[Go Example](./samples/command/src/go)

----

### Groovy

* wandbox-groovy  
  (wandbox -l Groovy)

#### Groovy Example

> wandbox-groovy run -cp . sample.groovy

[Groovy Example](./samples/command/src/groovy)

----

### Haskell

* wandbox-ghc  
  (wandbox -l Haskell)
* wandbox-stack

Note: wandbox-ghc/wandbox-stack add -dynamic compiler option. (output file size workarround.)

#### Haskell Example

> wandbox-ghc run sample.hs  
> wandbox-stack run

[Haskell Example](./samples/command/src/haskell)

[Haskell Stack Example](./samples/command/src/haskell-stack)

----

### Java

* wandbox-java  
  (wandbox -l Java)

#### Java Example

> wandbox-java run sample.java test.java

[Java Example](./samples/command/src/java)

----

### JavaScript

Import files/modules required for runtime are automatically added to the file list.

* wandbox-js  
  (wandbox -l JavaScript)
* wandbox-node  
  (wandbox -l JavaScript-c nodejs-*)
* wandbox-spidermonkey  
  (wandbox -l JavaScript -c spidermonkey-*)

#### JavaScript Example

> wandbox-node run --experimental-modules sample.js

[JavaScript Example](./samples/command/src/js)

----

### Julia

* wandbox-julia  
  (wandbox -l Julia)

#### Julia Example

> wandbox-julia run sample.jl

[Julia Example](./samples/command/src/julia)

----

### Lazy K

* wandbox-lazyk  
  (wandbox -l "Lazy K")

#### Lazy K Example

> wandbox-lazyk run sample.lazy

[Lazy K Example](./samples/command/src/lazyk)

----

### Lisp

* wandbox-sbcl  
  (wandbox -l Lisp)
* wandbox-clisp  
  (wandbox -l Lisp -c clisp-*)

#### Lisp Example

> wandbox-sbcl run sample.lisp

[Lisp Example](./samples/command/src/lisp)

----

### Lua

Import files/modules required for compilation are automatically added to the file list.

* wandbox-lua  
  (wandbox -l Lua)
* wandbox-luajit  
  (wandbox -l Lua -c luajit-*)

#### Lua Example

> wandbox-lua run sample.lua

[Lua Example](./samples/command/src/lua)

----

### Nim

Import modules/.c required for compilation are automatically added to the file list.

* wandbox-nim  
  (wandbox -l Nim)

#### Nim Example

> wandbox-nim run sample.nim

[Nim Example](./samples/command/src/nim)

----

### OCaml

* wandbox-ocamlopt  
  (wandbox -l OCaml)
* wandbox-ocaml  
  (wandbox -l OCaml)

#### OCaml Example

> wandbox-ocamlopt run sample.ml

[OCaml Example](./samples/command/src/ocaml)

----

### OpenSSL

Even just having wandbox would be enough.

* wandbox-ssl

#### OpenSSL Example

> wandbox-ssl genrsa -out test.key 2048  
> wandbox-ssl rsa -in test.key -pubout -out test.key.pub

[OpenSSL Example](./samples/command/src/openssl)

----

### Pascal

Include files required for runtime are automatically added to the file list.

* wandbox-fpc  
  (wandbox -l Pascal)

#### Pascal Example

> wandbox-fpc run sample.pas

[Pascal Example](./samples/command/src/pascal)

----

### Perl

Require files/modules required for runtime are automatically added to the file list.

* wandbox-perl  
  (wandbox -l Perl)

#### Perl Example

> wandbox-perl run sample.pl

[Perl Example](./samples/command/src/perl)

----

### PHP

Require/Include files required for runtime are automatically added to the file list.

* wandbox-php  
  (wandbox -l PHP)

#### PHP Example

> wandbox-php run sample.php

[PHP Example](./samples/command/src/php)

----

### Pony

Build directory files are automatically added to the file list.

* wandbox-ponyc  
  (wandbox -l Pony)

#### Pony Example

> wandbox-ponyc run ./sample ./sample2

wandbox-ponyc builds ./sample and ./sample2, Then execute ./sample2

[Pony Example](./samples/command/src/pony)

----

### Python

Import files/modules required for runtime are automatically added to the file list.

* wandbox-python  
  (wandbox -l Python)
* wandbox-python2  
  (wandbox -l Python -c cpython-2.7-*)
* wandbox-python3  
  (wandbox -l Python -c cpython-*)
* wandbox-pypy  
  (wandbox -l Python -c pypy-*)
* wandbox-pypy2  
  (wandbox -l Python -c pypy-2*)
* wandbox-pypy3  
  (wandbox -l Python -c pypy-3*)

#### Python Example

> wandbox-python3 run sample.py

wandbox-python supports setup.py

> wandbox-python -c cpython-head -r test run setup.py

If you open a file, add the file

> wandbox-python -c cpython-head -r test run setup.py README.md

[Python Example](./samples/command/src/python)

----

### R

Source files are automatically added to the file list.

* wandbox-rscript  
  (wandbox -l R)

#### R Example

> wandbox-rscript run sample.R

[R Example](./samples/command/src/r)

----

### Ruby

Require files required for runtime are automatically added to the file list.

* wandbox-ruby  
  (wandbox -l Ruby)
* wandbox-mruby  
  (wandbox -l Ruby -c mruby-*)

#### Ruby Example

> wandbox-ruby run sample.rb

[Ruby Example](./samples/command/src/ruby)

----

### Rust

Module files required for runtime are automatically added to the file list.

* wandbox-rustc  
  (wandbox -l Rust)
* wandbox-cargo

#### Rust Example

> wandbox-rustc run sample.rs  
> wandbox-cargo run

[Rust Example](./samples/command/src/rust)

----

### Scala

* wandbox-scalac  
  (wandbox -l Scala)

#### Scala Example

> wandbox-scalac run *.scala

[Scala Example](./samples/command/src/scala)

----

### SQL

* wandbox-sqlite  
  (wandbox -l SQL)
* wandbox-sqlite3  
  (wandbox -l SQL)

#### SQL Example

> wandbox-sqlite3 run SELECT 'Hello, Wandbox!';

[SQL Example](./samples/command/src/sql)

----

### Swift

* wandbox-swift  
  (wandbox -l Swift)

#### Swift Example

> wandbox-swift run main.swift

[Swift Example](./samples/command/src/swift)

----

### TypeScript

Import files/modules required for compilation are automatically added to the file list.

* wandbox-tsc  
  (wandbox -l TypeScript)

#### TypeScript Example

> wandbox-tsc run --module es2015 sample.ts

[TypeScript Example](./samples/command/src/ts)

----

### Vim script

* wandbox-vim  
  (wandbox -l "Vim script")

#### Vim script Example

> wandbox-vim run -X -N -u NONE -i NONE -V1 -e -s -S sample.vim +qall!

[Vim script Example](./samples/command/src/vim)

----

### Zig

Import files required for compilation are automatically added to the file list.

* wandbox-zig  
  (wandbox -l Zig)

#### Zig Example

> wandbox-zig run main.zig

[Zig Example](./samples/command/src/zig)

----

## CONTRIBUTING

[CONTRIBUTING](./CONTRIBUTING.md)