Git Product home page Git Product logo

carehare's Introduction


License: license

Spreadsheet, meet automation.

Welcome to Workbench!

Workbench is a platform that helps you make sense of data tables. Code like a pro -- without code.

Features include:

  • Steps to download, HTML-scrape, clean, analyze and visualize data.
  • Steps to load tables from Google Drive, Twitter and APIs.
  • Emailed notifications when data changes.
  • An integrated data-journalism training course.
  • Undo, so you can't make mistakes -- only experiments.
  • Unlimited power, with custom Python and Excel-like formulas.

Try it

To see what Workbench does, run your own server.


User Documentation

Contributing

Workbench is licensed under the AGPL 3.0 license. You are free to use the code or parts of it in your own applications, even your own own closed source applications. If you modify Workbench code or merge it into your own software, you must open-source the modifications.

Contact us

Always happy to hear from you:

We also welcome issue reports and pull requests :)

Credits

Workbench started as a project of Columbia Journalism School, made possible through the generous support of Krishna Bharat and the Knight Foundation.

carehare's People

Contributors

adamhooper avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

carehare's Issues

`connection.publish()` hangs after disconnect

@ASYNC_TEST
async def test_publish_after_disconnect(connection):
    await connection.close()
    with pytest.raises(carehare.ConnectionClosed):
        await connection.publish(b"foo", routing_key="messages")

Expected results: raise carehare.ConnectionClosed
Actual results: stall

persistent message publishing

Looks like carahare can only publish transient messages - all of which will be gone after rabbitmq cluster restarts (even though with lazy queues they'll be persisted to disk).

Is that an intended way?

How about AMQP headers?

I need AMQP header access for received messages.
Looks like overriding next_delivery() (either by subclassing or plain old monkey-patching) should do the trick, but it would be nice to have next_delivery_with_headers() available out of the box (with a better name, probably..). Do you accept PRs? What would you suggest for a function name?

Also, ability to set queue arguments would be nice - x-stream-offset argument in particular, to use with rabbitmq streams.

PS: That asyncio.wait() trick in _next_delivery() is really awesome! I was really wary of asyncio.wait_for() for as long as I can remember, but couldn't find a decent solution.

Leading slash in VirtualHost should be stripped

Accoring RabbitMQ specificatiosn vhost segment does not include leading slash:

amqp_URI = "amqp://" amqp_authority [ "/" vhost ] [ "?" query ]
The vhost component of the URI does not include the leading "/" character from the path. This makes it possible to refer to any vhost, not only those that begin with a "/" character.

But carehare uses an 'urlparse' python function (https://github.com/CJWorkbench/carehare/blob/main/carehare/_connection.py#L35 and https://github.com/CJWorkbench/carehare/blob/main/carehare/_connection.py#L60) which does not strip leading slash.

>>> urllib.parse.urlparse(carehare.connect('amqp://guest:[email protected]/sample_vhost')._url).path
'/sample_vhost'

Protocol.connection_lost() is inappropriately chatty

I'd like to suggest a change in the way Protocol.connection_lost() records the loss of a connection. At the moment, it does this:

logger.info("Connection lost: %r", exc)

even when exc is None (on a normal disconnection, IIUC). I think it would be better to not output anything if exc is None, else a higher severity should be used (warning or error), for example:

if exc:
    logger.error("Connection lost: %r", exc)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.