Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
0.2.0 alpha
Install and update using pip
:
pip install -U botflow
All functions are connected by pipes (queues) and communicate by data.
When data come in, the function will be called and return the result.
Think about the pipeline operation in unix: ls|grep|sed
.
Benefits:
#. Decouple data and functionality #. Easy to reuse
Botflow provides pipe and route. It makes data-driven programming and powerful data flow processes easier.
Botflow is easy to use and maintain, does not need configuration files, and knows about asyncio
and how to parallelize computation.
Here's one of the simple applications you can make:
Load the price of Bitcoin every 2 seconds. Advantage price aggregator sample can be found here <https://github.com/kkyon/Botflow/tree/master/examples>
.
.. code-block:: python
from botflow import *
def main():
Pipe(
Timer(delay=2), # send timer data to pipe every 2 seconds
"http://api.coindesk.com/v1/bpi/currentprice.json", # send url to pipe when timer trigger
HttpLoader(), # read url and load http response
lambda r: r.json['bpi']['USD']['rate_float'], # read http response and parse as json
print, # print out
)
Bot.render('ex_output/simple_bitcoin_price')
Bot.run()
main()
Or write in chain style
.. code-block:: python
from botflow import *
p_cd_bitcoin=Pipe().Timer(delay=2).Loop("http://api.coindesk.com/v1/bpi/currentprice.json")\
.HttpLoader().Map(lambda r: r.json['bpi']['USD']['rate_float']).Map(print)
p_cd_bitcoin.run()
.. code-block:: python
from botflow import *
from aiohttp import web
p = Pipe(
{"msg":"hello world!"}
)
app = web.Application()
app.add_routes([
web.get('/', p.aiohttp_json_handle)
])
Bot.run_app(app)
#BotFlow start web server http://0.0.0.0:8080
Bot.render('bitcoin_arbitrage')
Botflow will render the data flow network into a graphviz image.
below is the flow graph generated by Botflow.Aggreate 6 exchanges bitcoin price for trading... image:: docs/bitcoin_arbitrage.png :width: 400
Fast Nodes will be run in parallel, and they will perform well when processing stream data. :Web Crawle: Botflow is 10x fatter than Scrapy
Replay-able
With replay mode enabled:
config.replay_mode=True
when an exception is raised at step N, you don't need to run from setup 1 to N.
Botflow will replay the data from nearest completed node, usually step N-1.
It will save a lot of time in the development phase.
Release
:0.2.0: Milestone release.:
# Jupyter support. Able to run inside Jupyter note book.
# pipe can be nest in another Pipe.
p1=Pipe(get_image)
p2=Pipe(get_price)
p_get_all=Pipe(Zip(p1,p2)).Filter
# Support Chain style pipe line creating.
Pipe(range(1,10)).Map(lambda x:x+1).Fiter(lambda x:x>2)
same as :
Pipe(range(1,10),lambda x:x+1,Filter(lambda x:x>2))
:0.1.9: Major change see below .:
# Backpressure rate limit support
# Httpserver support
# new Node support. *Zip*, *SendTo* *Flat* for make loop and redirect the flow
# Type hints support .for function type route
# reorge the source code for readable.
:0.1.8: http://docs.botflow.org/en/latest/change/0.1.8.html .:
#. Support parallel in ThreadPool for slow function.
#. Loop Node is deprecated. raw value and Iterable value can be used directly.
#. improve performance of BlockedJoin
:0.1.7:
Data-driven programming is typically applied to streams of structured data for filtering, transforming, aggregating (such as computing statistics), or calling other programs.
Botflow has a few basic concepts to implement Data-driven programming .
Source It is feed stream data to the pipe.
Function It is callable unit.Any callable function and object can work as Node. It is driven by data. Custom functions work as Map unit. There are some built-in nodes:
Route It will be used to create a complex data flow network, not just one main process. Botflow can nest Routes inside Routes. It is a powerful concept. There are some pre built-in Route:
All units (Pipe, Node, Route) communicate via queues and perform parallel computation in coroutines.
This is abstracted so that Botflow can be used with only limited knowledge of asyncio
.
FAQs
Data-driven and Reactive programming framework
We found that botflow demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.