Saravanan666/pypi-org huggingface dataset:
Package: aiowaqi
Python: WAQIAsynchronous Python client for the WAQI API.AboutThis package allows you to request data about air quality around the world.InstallationpipinstallaiowaqiUsageimportasynciofromaiowaqiimportWAQIClientasyncdefmain()->None:"""Show example of fetching air quality for Utrecht."""asyncwithWAQIClient()asclient:client.authenticate("token")air_quality=awaitclient.get_by_city("utrecht")print(air_quality)if__name__=="__main__":asyncio.run(main())Changelog & ReleasesThis repository keeps a change log usingGitHub's releasesfunctionality. The format of the log is based onKeep a Changelog.Releases are based onSemantic Versioning, and use the format
ofMAJOR.MINOR.PATCH. In a nutshell, the version will be incremented
based on the following:MAJOR: Incompatible or major changes.MINOR: Backwards-compatible new features and enhancements.PATCH: Backwards-compatible bugfixes and package updates.ContributingThis is an active open-source project. We are always open to people who want to
use the code or contribute to it.We've set up a separate document for ourcontribution guidelines.Thank you for being involved! :heart_eyes:Setting up development environmentThis Python project is fully managed using thePoetrydependency manager. But also relies on the use of NodeJS for certain checks during development.You need at least:Python 3.11+PoetryNodeJS 12+ (including NPM)To install all packages, including all development requirements:npminstall
poetryinstallAs this repository uses thepre-commitframework, all changes
are linted and tested with each commit. You can run all checks and tests
manually, using the following command:poetryrunpre-commitrun--all-filesTo run just the Python tests:poetryrunpytestAuthors & contributorsThe content is byJoost Lekkerkerker.For a full list of all authors and contributors,
checkthe contributor's page.LicenseMIT LicenseCopyright (c) 2023 Joost LekkerkerkerPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Package: aiowatcher
Library to "watch" files in a directory and call a
callback function(filename, lines)every time one of the monitored files is recorded, in real time.In practical terms, this can be compared to UNIX'stail -F * .logcommand,
but instead of having lines printed in stdout, a Python function is called.Like tail, it is in charge of "watching" new files that are
created after startup and "unlock" those that are removed in the meantime.
This means that you will be able to "follow" and support rotating log files as well.Key FeaturesUses Asyncio for asynchronous reading and monitoring.The implementation chooses automatically depending on the compatibility of the system.Monitoring of several files in the same directory or just one.Asynchronous callback function.Getting startedAll code samples require Python 3.6+.Basic Usageimport asyncio
from aiowatcher import AIOWatcher

async def callback(filename, line):
    print(line)

async def main():
    lw = AIOWatcher('var', callback, extensions=['txt'])
    await lw.init()
    await lw.loop()

loop = asyncio.get_event_loop()
loop.run_until_complete(main())Non blockingimport asyncio
from aiowatcher import AIOWatcher

async def callback(filename, line):
    print(line)

async def main():
    lw = AIOWatcher('var', callback, extensions=['txt'])
    while True:
        await lw.loop(blocking=False)
        await asyncio.sleep(0.1)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())Tailimport asyncio
from aiowatcher import AIOWatcher

async def callback(filename, lines):
    for line in lines:
        print(line[:-1])

async def main():
    lw = AIOWatcher('var', callback, extensions=['txt'])
    await lw.tail(3)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())Licenseaiowatcheris offered under the Apache 2 license.Source codeThe latest version of the developer is available on a GitHub repository:https://github.com/py-paulo/aiowatcher.gitChangelog0.0.5 (22-09-2020)FeaturesnewAIOWatcher().tailfunction to readNlines from a file and return as list.BugfixesAIOWatcher.readlines()returns a list instead of a string.
Package: aio-watts-vision
TODO: Rewrite me. Append your package’s long description.StatusRequirementsPython 3.7 overFeaturesToDo: Rewrite me.Setup$ python -m pip install --user aio-watts-vision
or
(venv)$ python -m pip install aio-watts-visionUsageToDo: Rewrite me.$ python
>>> import aio_watts_vision
>>> aio_watts_vision.sample.hello()
'hello'
>>>ChangeLog0.1.0 (2022-08-12)Initial release.
Package: aiowc
Asynchronous Python wrapper for WooCommerce REST API.Gives you asynchronous access to the REST API.
Based onaiohttpandwc-api-python.PRs are highly appreciated!Installationpip install aiowcorpip install"git+https://github.com/vakochetkov/aiowc"Getting startedGenerate API credentialsImport aiowc:fromaiowcimportAPI,APISessionSet API parameters:wcapi=API(url="https://example.com",consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",version="wc/v3",timeout=30)Make request with aiohttp session:asyncdefmain():asyncwithAPISession(wcapi)assession:res=awaitsession.get('products/categories',params={'per_page':5})json=awaitres.json()print(json)loop=asyncio.get_event_loop()loop.run_until_complete(main())Options and request types:Fully compatible withwc-api-python
Package: aiowebhdfs
aiowebhdfsI know, nobody usesHadoopanymore, but for those who do, here is a library that handles large files withasyncfeatures for web requests using thehttpxlibrary andaiofilesfor streaming data fromHDFSFeaturesImplements retries and timeout windows withretry_asyncfromopnieuwlibraryImplements streaming through theaiofileslibraryImplments async requests through thehttpxlibraryFully tested for core subset of operations in WebHDFSv3.2.1CREATE = Write FilefromaiowebhdfsimportWebHdfsAsyncClientclient=WebHdfsAsyncClient(host='namenode.local',port=8443,user='spark',kerberos_token=token)awaitclient.create('c:\\temp\\bigfile.txt','/data/agg/bigfile.txt',overwrite=False)OPEN = Read FilefromaiowebhdfsimportWebHdfsAsyncClientclient=WebHdfsAsyncClient(host='namenode.local',port=8443,user='spark',kerberos_token=token)awaitclient.open('/data/agg/bigfile.txt')ContentofthefileGETFILESTATUS = File InfofromaiowebhdfsimportWebHdfsAsyncClientclient=WebHdfsAsyncClient(host='namenode.local',port=8443,user='spark',kerberos_token=token)awaitclient.get_file_status('/data/agg/bigfile.txt'){"FileStatus":{"accessTime":0,"blockSize":0,"group":"supergroup","length":0,//inbytes,zerofordirectories"modificationTime":1320173277227,"owner":"webuser","pathSuffix":"","permission":"777","replication":0,"type":"DIRECTORY"//enum{FILE,DIRECTORY}}}LISTSTATUS = List DirectoryfromaiowebhdfsimportWebHdfsAsyncClientclient=WebHdfsAsyncClient(host='namenode.local',port=8443,user='spark',kerberos_token=token)awaitclient.list_directory('/tmp'){"FileStatuses":{"FileStatus":[{"accessTime":1320171722771,"blockSize":33554432,"group":"supergroup","length":24930,"modificationTime":1320171722771,"owner":"webuser","pathSuffix":"a.patch","permission":"644","replication":1,"type":"FILE"},{"accessTime":0,"blockSize":0,"group":"supergroup","length":0,"modificationTime":1320895981256,"owner":"szetszwo","pathSuffix":"bar","permission":"711","replication":0,"type":"DIRECTORY"},...]}}GETCONTENTSUMMARY = Summary of DirectoryfromaiowebhdfsimportWebHdfsAsyncClientclient=WebHdfsAsyncClient(host='namenode.local',port=8443,user='spark',kerberos_token=token)awaitclient.list_directory('/tmp'){"FileStatuses":{"FileStatus":[{"accessTime":1320171722771,"blockSize":33554432,"group":"supergroup","length":24930,"modificationTime":1320171722771,"owner":"webuser","pathSuffix":"a.patch","permission":"644","replication":1,"type":"FILE"},{"accessTime":0,"blockSize":0,"group":"supergroup","length":0,"modificationTime":1320895981256,"owner":"szetszwo","pathSuffix":"bar","permission":"711","replication":0,"type":"DIRECTORY"},...]}}
Package: aiowebostv
aiowebostvPython library to control LG webOS based TV devices.Based on:aiopylgtvlibrary athttps://github.com/bendavid/aiopylgtvbscpylgtvlibrary athttps://github.com/chros73/bscpylgtvRequirementsPython >= 3.9InstallpipinstallaiowebostvInstall from SourceRun the following command inside this folderpipinstall--upgrade.ExamplesBasic Example:importasynciofromaiowebostvimportWebOsClientHOST="192.168.1.39"# For first time pairing set key to NoneCLIENT_KEY="140cce792ae045920e14da4daa414582"asyncdefmain():"""Basic webOS client example."""client=WebOsClient(HOST,CLIENT_KEY)awaitclient.connect()# Store this key for future useprint(f"Client key:{client.client_key}")apps=awaitclient.get_apps_all()forappinapps:print(app)awaitclient.disconnect()if__name__=="__main__":asyncio.run(main())Subscribed State Updates Example:importasynciofromaiowebostvimportWebOsClientHOST="192.168.1.39"# For first time pairing set key to NoneCLIENT_KEY="140cce792ae045920e14da4daa414582"asyncdefon_state_change(client):"""State changed callback."""print("State changed:")print(f"System info:{client.system_info}")print(f"Software info:{client.software_info}")print(f"Hello info:{client.hello_info}")print(f"Channel info:{client.channel_info}")print(f"Apps:{client.apps}")print(f"Inputs:{client.inputs}")print(f"Powered on:{client.power_state}")print(f"App Id:{client.current_app_id}")print(f"Channels:{client.channels}")print(f"Current channel:{client.current_channel}")print(f"Muted:{client.muted}")print(f"Volume:{client.volume}")print(f"Sound output:{client.sound_output}")asyncdefmain():"""Subscribed State Updates Example."""client=WebOsClient(HOST,CLIENT_KEY)awaitclient.register_state_update_callback(on_state_change)awaitclient.connect()# Store this key for future useprint(f"Client key:{client.client_key}")# Change something using the remote during sleep period to get updatesawaitasyncio.sleep(30)awaitclient.disconnect()if__name__=="__main__":asyncio.run(main())Examples can be found in theexamplesfolder
Package: aioweenect
aioweenectAsynchronous Python client for the weenect APIInstallation$pipinstallaioweenectUsagefromaioweenectimportAioWeenectimportasyncioUSER="<YOUR_USER>"PASSWORD="<YOUR_PASSWORD>"asyncdefmain():"""Show example how to get location of your tracker."""asyncwithAioWeenect(username=USER,password=PASSWORD)asaioweenect:trackers_response=awaitaioweenect.get_trackers()tracker_id=trackers_response["items"][0]["id"]tracker_name=trackers_response["items"][0]["name"]position_response=awaitaioweenect.get_position(tracker_id=tracker_id)lat=position_response[0]["latitude"]lon=position_response[0]["longitude"]last_message=position_response[0]["last_message"]print(f"Location for{tracker_name}: lat:{lat}, lon:{lon}. Last message received:{last_message}")if__name__=="__main__":loop=asyncio.get_event_loop()loop.run_until_complete(main())
Package: aiowerkzeug
aiowerkzeugLibrary to make werkzeug working with asyncio.ChangelogVersion 0.2.0Use Python 3.5 async syntax.New~keep_context_factory. It works like~context_coroutine,
but simple code.Async version of Local, LocalStack and LocalManager. They implement__release_local__method.FeaturesAsync versions of Local, LocalStack and LocalManager.Locals work on asyncio Tasks.werkzeug.local.Localorwerkzeug.local.LocalStackmust be patched
withaiowerkzeug.local.patch_localPatchedwerkzeug.local.Localorwerkzeug.local.LocalStackuse currentasyncio.tasks.Taskto determine context.Decorator factory to mark coroutines to run in a context. Useful for Flask. It allows to run corountines
in newasyncio.tasks.Taskinside a specific context.For example, in Flask to run coroutines in Application context it is possible to create a decorator like that:def_get_app_context():returncurrent_app.app_context()app_coroutine=partial(context_coroutine,ctx=_get_app_context)@app_coroutinedeffoo_bar():print(current_app.debug)@flask_app.route('/')defcaller():asyncio.ensure_future(foo_bar())Asyncio HTTP server runner with reload$pythonaiowerkzeug/serving.py--reloadapp_test.appTODOForm parserDebug middlewareStatic files middleware
Package: aiowerobot
一个简单的异步公众号框架介绍代码fork自WeRoBot，修改成基于sanic的异步框架文档点我Installationpip install aiowerobotSimple usesfromaiowerobotimportAioWeRoBotrobot=AioWeRoBot(app_id='',app_secret='',token='')@robot.handlerasyncdefhello(message):return'Hello World!'config={'host':'0.0.0.0','port':8099}robot.run(**config)
Package: aiowhatsapp
aiowhatsappA whatsapp client library for python utilizing theWhatsApp Business Cloud API.Installation$pipinstallaiowhatsappUsageTODOContributingInterested in contributing? Check out the contributing guidelines. Please note that this project is released with a Code of Conduct. By contributing to this project, you agree to abide by its terms.Licenseaiowhatsappwas created by Solomon Olatunji. It is licensed under the terms of the MIT license.
Package: aio_windows_patch
version: 0.0.1status: devauthor: hszemail:hsz1273327@gmail.comDescThe python version so far has poorly supported windows. One of the most troubling things isloop.add_signal_handlercan not deal with the signal on windows.This project is asyncio’s patch which can deal with problem ,It’s fromhttps://codereview.appspot.com/119990043/.One day python will fix this problem. Then I will delete this program.keywords:asyncio,patchFeatureloop.add_signal_handler can deal with the signal on windowsExampleimportaio_windows_patchasasyncio....Installpython-mpip install aio_windows_patch
Package: aiowintest
Win-Test (http://win-test.com) is a tool used for Ham Radio Contesting.This is a partial implementation of the protocol used by Win-Test to
synchronize QSOs, gab (chat) messages, contest score, and other information
over a local IP network.The authors of this package are not affiliated in any way with the Win-Test
developers.InstallationInstall using pip:pipinstallaiowintestDocumentationPlease seehttps://aiowintest.readthedocs.io/AuthorsHans Insulander, SM0UTY, <hans@codium.se>
Package: aiowirecard
aiowirecardAsyncio wirecard API wrapper based onmoipproviding asyncronous requests.Usage$exportWIRECARD_KEY=<your_wirecard_key>
$exportWIRECARD_TOKEN=<your_wirecard_token>importasyncioimportjsonimportosimportrandomimportaiowirecardasyncdefmain():wirecard=aiowirecard.Wirecard(environment='sandbox',key=os.environ['WIRECARD_KEY'],token=os.environ['WIRECARD_TOKEN'])print('Creating customer...')customer={"ownId":"%0.11d"%random.randint(0,99999999999),"fullname":"Maria Oliveira","email":"maria@email.com","birthDate":"1980-5-10","taxDocument":{"type":"CPF","number":"%0.11d"%random.randint(0,99999999999)},"phone":{"countryCode":"55","areaCode":"11","number":"22226842"},"shippingAddress":{"city":"Rio de Janeiro","district":"Ipanema","street":"Avenida Atlântica","streetNumber":"60","zipCode":"02446000","state":"RJ","country":"BRA"},"fundingInstrument":{"method":"CREDIT_CARD","creditCard":{"expirationMonth":"06","expirationYear":"22","number":"6362970000457013","cvc":"123","holder":{"fullname":"Maria Oliveira","birthdate":"1980-05-10","taxDocument":{"type":"CPF","number":"10013390023"},"billingAddress":{"city":"Rio de Janeiro","district":"Copacabana","street":"Rua Raimundo Corrêa","streetNumber":"1200","zipCode":"05246200","state":"RJ","country":"BRA"},"phone":{"countryCode":"55","areaCode":"11","number":"22226842"}}}}}print('Customer data: ',customer)create_user=awaitwirecard.post_customer(parameters=customer)user_id=json.loads(create_user)['id']print('Customer id: ',user_id)get_user=awaitwirecard.get_customer(user_id)print('Customer info:',get_user)order={"ownId":"%0.11d"%random.randint(0,99999999999),"amount":{"currency":"BRL","subtotals":{"shipping":1500}},"items":[{"product":"Descrição do pedido","category":"CLOTHING","quantity":1,"detail":"Camiseta estampada branca","price":9500}],"customer":{"id":user_id}}new_order=awaitwirecard.post_order(order)print('Creating an order... ')order_id=json.loads(new_order)['id']print('Order id: ',order_id)order=awaitwirecard.get_order(order_id)print('Getting order info: ',order)loop=asyncio.get_event_loop()loop.run_until_complete(main())Functionspost_customer(parameters)# create new customerget_customer(parameters)# get customer datapost_creditcard(customer_id,parameters)# add new credit card to customer accountdelete_creditcard(creditcard_id)# delete credit cardpost_order(parameters)# create a new orderget_order(order_id)# get order by idpost_payment(order_id,parameters)# create a paymentget_payment(payment_id)# get payment data by idcapture_payment(payment_id)# capture of a preauthorized paymentvoid_payment(payment_id)# cancel the capture of a preauthorized paymentaccount_exists(account_id)# check if account existsparams exampleshere
Package: aiowiserbyfeller
Wiser by Feller API Async Python LibraryUse your Wiser by Feller smart light switches, cover controls and scene buttons in your python project.Beware:This integration implementsWiser by Fellerand notWiser by Schneider Electric, which is a competing Smart Home platform (and is not compatible). It es even more confusing, as Feller (the company) is a local subsidiary of Schneider Electric, catering only to the Swiss market.FunctionalityDevicesWiser by Feller devices always consist of two parts: The control front and the base module. There are switching base modules (for light switches and cover controllers) and non-switching base modules (for scene buttons and secondary controls).Because the functionality changes when the same base module is used with a different front, the combination of the two is considered an unique device.Devices are connected with each other by a proprietaryK+ bus system. One (and only one) device acts as a WLAN gateway (called µGateway) to interface with the system.Status LEDsEach front features a configurable RGB LED edge for their buttons. Normally you would configure those in theWiser Home app. They can be configured in color and brightness. For buttons controlling a load, there can be two different brightnesses: One for if the load is on and one for if it is off. For others (e.g. scene buttons) there can only be one brightness, as there is no logical "on" state.Note:Due to the implementation on the devices, the status light is not suited for fast updating, as multiple slow API calls are necessary.Known issuesAs of right now, the µGateway API only supports Rest and Websockets. MQTT is implemented,but only for the proprietary app.Note: device names are in German because manufacturer does not have an English online presence.
Package: aiowithings
Python: WithingsAsynchronous Python client for Withings.AboutThis package allows you to fetch data from Withings.InstallationpipinstallaiowithingsChangelog & ReleasesThis repository keeps a change log usingGitHub's releasesfunctionality. The format of the log is based onKeep a Changelog.Releases are based onSemantic Versioning, and use the format
ofMAJOR.MINOR.PATCH. In a nutshell, the version will be incremented
based on the following:MAJOR: Incompatible or major changes.MINOR: Backwards-compatible new features and enhancements.PATCH: Backwards-compatible bugfixes and package updates.ContributingThis is an active open-source project. We are always open to people who want to
use the code or contribute to it.We've set up a separate document for ourcontribution guidelines.Thank you for being involved! :heart_eyes:Setting up development environmentThis Python project is fully managed using thePoetrydependency manager. But also relies on the use of NodeJS for certain checks during development.You need at least:Python 3.11+PoetryNodeJS 12+ (including NPM)To install all packages, including all development requirements:npminstall
poetryinstallAs this repository uses thepre-commitframework, all changes
are linted and tested with each commit. You can run all checks and tests
manually, using the following command:poetryrunpre-commitrun--all-filesTo run just the Python tests:poetryrunpytestAuthors & contributorsThe content is byJoost Lekkerkerker.For a full list of all authors and contributors,
checkthe contributor's page.LicenseMIT LicenseCopyright (c) 2023-2024 Joost LekkerkerkerPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Package: aioworker
aioworkerA Python worker running overasyncioRequirementspython 3.8+InstallationpipinstallaioworkerUsageimportasynciofromaioworkerimportService,Workerasyncdeftask_1(loop):whileTrue:print('Hello world')awaitasyncio.sleep(2)if__name__=='__main__':#  Run the server using 1 worker processes.Worker(tasks=[task_1]).run(workers=1)or run tasks and the webserverimportasynciofromaioworkerimportService,Workerasyncdefsleeping(loop):whileTrue:print('Sleeping for 2 seconds...')awaitasyncio.sleep(2)asyncdefon_client_connect(reader,writer):"""Read up tp 300 bytes of TCP. This could be parsed usign the HTTP protocol for example"""data=awaitreader.read(300)print(f'TCP Server data received:{data}\n')writer.write(data)awaitwriter.drain()writer.close()if__name__=='__main__':# Run the server using 1 worker processes.Worker(tasks=[sleeping],web_server_config={'client_connected_cb':on_client_connect,},)).run(workers=1)How to stop the workerctrl+cDefault valuesVariableDefaultTCP server host0.0.0.0TPC server port8888ExamplesHello worldTCP ServerKafka ConsumerDevelopmentClone this repoRunpoetry installTest using./scripts/testLint automatically using./scripts/lint
Package: aioworkers
Easy configurable workers based on asyncioFree software: Apache Software License 2.0Required: Python >=3.7, optionalpyyaml,uvloop,httptools,yarl,crontab,setproctitle,msgpack,bson,jupyter.Documentation:https://aioworkers.readthedocs.io.FeaturesSpecify abstract class for communication between componentsConfiguration subsystemDevelopmentCheck code:hatchrunlint:allFormat code:hatchrunlint:fmtRun tests:hatchrunpytestRun tests with coverage:hatchruncovHistory0.27.0 (2023-08-11)Drop incorrect stubgen (#202)Method URI.with_host keep auth (#203)Add methods AsyncPath.is_dir/is_file (#205)Fix cmd from cython (#210)0.26 (2023-07-21)AsyncPath.unlink with missing_ok (#197)AsyncPath.rmtree and rmdir (#198)0.25 (2023-07-19)Fix option ++groups and add ++group (#192)Option –version (#193)Improve and fix AsyncPath and add AbstractFileSystem (#195)0.24.1 (2023-07-10)Fix using optional formatter and output (#188)0.24 (2023-07-08)Improve SocketServer.cleanup (#177)Web server support keep-alive (#179)Option –config/-c one value on key (#182)Option ++group/+g one value on key (#183)Cli support –output and –formatter for format results (#186)Use name in iter_entry_points (#187)