httpie / httpie-unixsocket

A UNIX socket plugin for HTTPie
Other
44 stars 11 forks source link

Look into supporting nicer URL syntax of curl-unix-socket #8

Open msabramo opened 9 years ago

msabramo commented 9 years ago

Inspired by issue #7, as I think the current syntax is ugly and too error-prone.

root@db2722aaf51d:/# curl-unix-socket unix:///var/run/docker.sock:/info
{"Containers":2,"Debug":1,"DockerRootDir":"/var/lib/docker","Driver":"btrfs","DriverStatus":[],"ExecutionDriver":"native-0.2","ID":"EXI6:MA6J:YU45:24S3:CA6L:37PQ:JLKG:WPWI:5NFP:L3XW:WECP:HWK3","IPv4Forwarding":1,"Images":86,"IndexServerAddress":"https://index.docker.io/v1/","InitPath":"/usr/bin/docker","InitSha1":"","KernelVersion":"4.0.0-rc3","Labels":null,"MemTotal":33343193088,"MemoryLimit":1,"NCPU":8,"NEventsListener":0,"NFd":24,"NGoroutines":53,"Name":"debian","OperatingSystem":"Debian GNU/Linux 8 (jessie)","RegistryConfig":{"IndexConfigs":{"docker.io":{"Mirrors":null,"Name":"docker.io","Official":true,"Secure":true}},"InsecureRegistryCIDRs":["127.0.0.0/8"]},"SwapLimit":1,"SystemTime":"2015-03-18T12:00:18.261465223-07:00"}

Cc: @jakubroztocil, @jfrazelle

jkbrzt commented 7 years ago

Sounds good, anything needed from HTTTPie?

msabramo commented 7 years ago

@jkbrzt: Question: Is it possible for an HTTPie transport plugin to support multiple prefixes? E.g.:

class UnixSocketTransportPlugin(TransportPlugin):
    name = 'UNIX socket transport'

    prefix = ['http://sock.local/', 'http+unix://']

    def get_adapter(self):
        return UnixAdapter()

Because I have a new scheme that I'm playing with, but I thought it would be nice to support the old prefix too. Though maybe I shouldn't worry too much about it, since the version number is < 1 and thus arguably, people should be willing to accept breaking changes.

jkbrzt commented 7 years ago

@msabramo the plugin API currently only supports one prefix per plugin. But you could, for example, expose two plugins (differing only in the prefix) in setup.py, e.g.:


    entry_points={
        'httpie.plugins.transport.v1': [
            'httpie_unixsocket = httpie_unixsocket:UnixSocketTransportPlugin',
            'httpie_unixsocket_legacy = httpie_unixsocket:LegacyUnixSocketTransportPlugin',
        ]
    },
graingert commented 7 years ago

you can't use sock.local

".local" is the domain used to advertise with multicast DNS.

you need to use a subdomain of your own domain name.

msabramo commented 7 years ago

@jkbrzt: Thanks! Yeah that's what I was starting to think of as well after I posted my comment. Not a bad option. Although I might end up not needing it, because folks seem to be wanting to keep the http+unix:// protocol, in which case I could get by with just one plugin object.

msabramo commented 7 years ago

Note: I have begun working on this in https://github.com/msabramo/requests-unixsocket/pull/34

msabramo commented 7 years ago

Thanks, @graingert! Yeah a few people have mentioned that; I wasn't aware that .local has special meaning; good to know! And I see you found and commented on https://github.com/msabramo/requests-unixsocket/pull/34, which is great, because that's where all that discussion is happening.