Python skeleton and library for OneCode projects
Project description
OneCode, your gateway to Python application deployment on the Cloud! Pssst, if you're not into rolling out your App but simply using them, check out the OneCode Cloud user doc.
- OneCode in One Minute
- Deploy on OneCode Cloud
- Getting Started with the OneCode API
- Upgrading from 0.x
- Work in Progress
- Getting Help
:snake: OneCode in One Minute
Install OneCode
pip install onecode
Create your first OneCode project
onecode-create
# then follow the prompts
? Enter the path where to create OneCode project: ~/
? Enter your OneCode project name: HelloWorld
⠋ Creating new OneCode project
✅ Created HelloWorld OneCode project
Add your first OneCode Element
Edit the file HelloWorld/flows/helloworld.py
such as
from onecode import Logger, text_input
def run():
Logger.info(f"Hello {text_input('your name', 'OneCoder')}!")
Running your OneCode project
cd HelloWorld
python main.py
# You should see the following printed
[INFO] helloworld - |OneCode|.helloworld.py:5 - Hello OneCoder!
By default, the OneCode text input is OneCoder
but now can take any other values without having to change the code.
:tada: Congratulations, you now are a OneCoder! :tada:
:volcano: Deploy on OneCode Cloud
The following steps will show you how to get setup for the 1st time:
-
Ensure you install at least
onecode >= 1.0.0
and have a GitHub account- If you have an app with a previous
onecode
version, upgrade from 0.x. - Create your OneCode App (or use an existing one) and push it to your GitHub account.
- If you have an app with a previous
-
Request a beta-tester access here.
-
Once you received your confirmation email, login on onecode.rocks.
-
Register your first app
- From the dashboard, navigate to Apps in the top menubar.
- Click on Register New App.
- On your first visit, you'll need to Link GitHub Account to your OneCode account.
- As you are redirected to GitHub, login to your GitHub account.
- Authorize OneCode.
-
Upon authorization, you will be redirected back to OneCode with your GitHub identity. You now need to decide which repositories OneCode may access in order to build your app by clicking on GitHub App.
-
Choose which repositories should be accessible by OneCode. Note that you can change these permissions at anytime.
- Select the repository and the branch corresponding to the OneCode App you want to deploy. Choose if needed a different image and Python version than the default one.
-
The App will then appear in your personal Apps Workspace and be automatically built. Each new commit that you push to the registered branch will automatically trigger a new build
:tada: :tada: :tada: Congratulations, you now are an Cloud OneCoder! :tada: :tada: :tada:
:rocket: Getting Started with the OneCode API
OneCode relies on the following principles:
-
no-disruption: OneCode doesn't force you to change the way you code. No matter what your code structure and Python files hierarchy, OneCode can seamlessly be integrated with it.
-
controllable input parameters: simply replace your hard-coded parameters with OneCode functions (called Elements) so that their value can change without having to change the code. One Code, many ways to run!
-
automated interface: OneCode push on the cloud, the interface will automatically be generated from the OneCode Elements
-
easy deployment: no need to change the code between your local machine and the cloud. Simply push your code as-is on your synchronized GitHub account and your App (environment and UI!) will build automatically!
The most important part of the API are Input and Output Elements. They can be inlined within your code or not, that's up to you (no-disruption!), see examples below:
- use Input Elements whenever you need to expose a parameter with a specific widget. For example:
# instead of: df = pd.read_csv('test.csv')
df = csv_reader('your df', 'test.csv')
# instead of: for i in range(5):
for i in range(slider('N', 5, min=0, max=10)): # inlined
# do stuff
# instead of: choice = 'cat'
choice = dropdown('your choice', 'cat', options=['dog', 'cat', 'fish']) # not inlined
Logger.info(f'Your choice is {choice}')
- use Output Elements whenever an output should be returned. For example:
# instead of: plt.savefig('stuff.png')
plt.savefig(file_output('stuff', 'stuff.png')) # inlined
# instead of: filepath = 'test.txt'
filepath = file_output('test', 'test.txt') # not inlined
with open(filepath, 'w') as f:
# do stuff
Check out the full API documentation here!
:arrow_up: Upgrading from 0.x
-
Ensure there is
requirements.txt
file at the root of your App and that it contains at leastonecode>=1,<2
. -
Change all Output Elements (e.g.
image_output()
,text_output()
, etc.) to simplyfile_output()
. -
Remove any
section_header()
element. -
Check out the work in progress section in case you were using advanced features.
:construction: Work in Progress
As onecode
is still transitioning to OneCode Cloud, early versions of the OneCode Cloud don't yet
support completely the following features:
-
Multi-steps: adding more than one flow to your App will eventually be supported. In the meantime, either split your app (one app per step) or merge all steps under a single one (you may directly update the
.onecode.json
file or create a new app and move the code to it). -
Folder Inputs: as the cloud doesn't really have directory structures, it needs some special work. In the meantime, replace with multiple selection
file_input
instead. -
Custom Elements (in custom plugin or
onecode_ext
): extra security precautions must be taken to allow custom UI on the Cloud. It has therefore been disabled for now. Replace them with regular elements until the Cloud is ready for them. -
Dynamic
options
: dynamic expressions inoptions
of thedropdown
element) is not fully supported yet. You can still use it, in that case, the elements will ask user to fill out values as regular text input (e.g. CSV column names, etc.). -
Dynamic
optional
:optional
asTrue/False
(static) works as expected, however dynamnic expressions will be ignored for now. As a consequence,hide_when_disabled
attribute is obsolete until dynamicoptional
are supported again. -
Attribute
count
: we go back-and-forth with this one on bringing this one to the Cloud. In the meantime, switch back to non-dynamic elements, e.g. multiple dropdown, text input collecting list of values, etc. -
Running
onecode-start
: getting a local UI is in the works, it's a pretty big feature, thanks for your patience on that one.
:wave: Getting Help
If you are a OneCode customer, you may directly email our support team. Feel free as well to browse the GitHub Issues and reach out to the community by posting bug reports, questions and suggestions.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file onecode-1.0.0.tar.gz
.
File metadata
- Download URL: onecode-1.0.0.tar.gz
- Upload date:
- Size: 39.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f084ea357a58067e55206ac7e0ec99f9bac724fe6788ae070070ccabbf209382 |
|
MD5 | ad84833be2615962783f2d929d48fb9b |
|
BLAKE2b-256 | a4fdb177a22816908e61752070489d71b7c7ba5fdb49a8762f313519a05b31ff |
File details
Details for the file onecode-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: onecode-1.0.0-py3-none-any.whl
- Upload date:
- Size: 63.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 547706b71168ba646cdb30a6e7db81e26b01ab959539ea766b74e721da3fee23 |
|
MD5 | f1faefd796bc19794df73be2274767cc |
|
BLAKE2b-256 | 8f7dcdb1ea559bfec68399d974653f2226c299a7311346ec6c49a2f02f80c18e |