Source code for dgitcore.contrib.metadata.default

#!/usr/bin/env python
"""Adapter to a metadata server that provides dataset tracking and other
services.

* enable: Enable this adapter
* url: URL to which the metadata must be posted
* token: Authentication token for the server

"""
import os, sys, requests, json
from dgitcore.plugins.metadata import MetadataBase
from dgitcore.exceptions import *
from dgitcore.config import get_config, ChoiceValidator, URLValidator, NonEmptyValidator

[docs]class BasicMetadata(MetadataBase): """ Metadata backend for the datasets. Parameters ---------- Configuration (token) """ def __init__(self): self.enable = False self.token = None self.url = None super(BasicMetadata, self).__init__('basic-metadata', 'v0', "Basic metadata server")
[docs] def config(self, what='get', params=None): if what == 'get': return { 'name': 'basic-metadata', 'nature': 'metadata', 'variables': ['enable', 'token', 'url'], 'defaults': { 'enable': { 'value': "y", "description": "Enable generic Metadata server?", 'validator': ChoiceValidator(['y','n']) }, 'token': { 'value': '', 'description': 'Provide API token to be used for posting', 'validator': NonEmptyValidator(), }, 'url': { 'value': '', 'description': 'URL to which metadata should be posted', 'validator': URLValidator() }, } } else: try: self.enable = params['basic-metadata']['enable'] except: self.enable = 'n' return metadata = params['basic-metadata'] self.enable = metadata['enable'] self.token = metadata.get('token', None) self.url = metadata.get('url', None) if self.enable == 'y': if self.token is None: raise NetworkInvalidConfiguration("Missing token") if self.url is None: raise NetworkInvalidConfiguration("Missing URL")
[docs] def post(self, repo): """ Post to the metadata server Parameters ---------- repo """ datapackage = repo.package url = self.url token = self.token headers = { 'Authorization': 'Token {}'.format(token), 'Content-Type': 'application/json' } try: r = requests.post(url, data = json.dumps(datapackage), headers=headers) return r except: raise NetworkError() return ""
def setup(mgr): obj = BasicMetadata() mgr.register('metadata', obj)