2019-09-02 20:19:40 +00:00
|
|
|
import urllib
|
|
|
|
import requests
|
2019-09-02 21:38:44 +00:00
|
|
|
from twtxt.config import Config
|
2019-09-02 20:19:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
class RegistryClient(object):
|
|
|
|
|
2019-09-02 21:38:44 +00:00
|
|
|
def __init__(self, registry_url, insecure=False, disclose_identity=None):
|
2019-09-02 20:19:40 +00:00
|
|
|
self.registry_url = registry_url
|
2019-09-02 20:41:51 +00:00
|
|
|
self.session = requests.Session()
|
|
|
|
self.session.verify = not insecure
|
2019-09-02 20:19:40 +00:00
|
|
|
|
2019-09-02 21:38:44 +00:00
|
|
|
from twtxt_registry_client import __version__
|
|
|
|
if disclose_identity or disclose_identity is None:
|
|
|
|
try:
|
|
|
|
config = Config.discover()
|
|
|
|
except ValueError:
|
|
|
|
disclose_identity = False
|
|
|
|
else:
|
|
|
|
disclose_identity = config.disclose_identity
|
|
|
|
|
|
|
|
if disclose_identity:
|
|
|
|
user_agent = 'twtxt-registry/{} (+{}; @{})'.format(
|
|
|
|
__version__,
|
|
|
|
config.twturl,
|
|
|
|
config.nick,
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
user_agent = 'twtxt-registry/{}'.format(__version__)
|
|
|
|
self.session.headers['User-Agent'] = user_agent
|
|
|
|
|
2019-09-02 20:19:40 +00:00
|
|
|
def request(self, method, endpoint, *, format='plain', **params):
|
|
|
|
resp = method(
|
|
|
|
'/'.join([self.registry_url, format, endpoint]),
|
|
|
|
# Ignore parameters with None values
|
|
|
|
params={k: v for k, v in params.items() if v},
|
|
|
|
)
|
|
|
|
resp.raise_for_status()
|
|
|
|
return resp
|
|
|
|
|
|
|
|
def get(self, *args, **kwargs):
|
2019-09-02 20:41:51 +00:00
|
|
|
return self.request(self.session.get, *args, **kwargs)
|
2019-09-02 20:19:40 +00:00
|
|
|
|
|
|
|
def post(self, *args, **kwargs):
|
2019-09-02 20:41:51 +00:00
|
|
|
return self.request(self.session.post, *args, **kwargs)
|
2019-09-02 20:19:40 +00:00
|
|
|
|
|
|
|
def register(self, nickname, url, *, format='plain'):
|
|
|
|
return self.post(
|
|
|
|
'users',
|
|
|
|
format=format,
|
|
|
|
nickname=nickname,
|
|
|
|
url=url,
|
|
|
|
)
|
|
|
|
|
|
|
|
def list_users(self, *, q=None, format='plain'):
|
|
|
|
return self.get(
|
|
|
|
'users',
|
|
|
|
q=q,
|
|
|
|
format=format,
|
|
|
|
)
|
|
|
|
|
|
|
|
def list_tweets(self, *, q=None, format='plain'):
|
|
|
|
return self.get(
|
|
|
|
'tweets',
|
|
|
|
q=q,
|
|
|
|
format=format,
|
|
|
|
)
|
|
|
|
|
|
|
|
def list_mentions(self, url, *, format='plain'):
|
|
|
|
return self.get(
|
|
|
|
'mentions',
|
|
|
|
url=url,
|
|
|
|
format=format,
|
|
|
|
)
|
|
|
|
|
|
|
|
def list_tag_tweets(self, name, *, format='plain'):
|
|
|
|
return self.get(
|
2019-09-23 19:00:19 +00:00
|
|
|
'tags/{}'.format(urllib.parse.quote(name)),
|
2019-09-02 20:19:40 +00:00
|
|
|
format=format,
|
|
|
|
)
|