Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ language: python

matrix:
include:
- os: linux
python: 3.5
- os: linux
python: 3.6
- os: linux
Expand Down
239 changes: 239 additions & 0 deletions fetchcode/commoncode_datautils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
# Copied from https://github.com/nexB/scancode-toolkit/blob/b4ea9c640f8ee4ed8851b5618c6d223bb1c02d47/src/commoncode/datautils.py
Comment thread
steven-esser marked this conversation as resolved.
#
# Copyright (c) 2018 nexB Inc. and others. All rights reserved.
# http://nexb.com and https://github.com/nexB/scancode-toolkit/
# The ScanCode software is licensed under the Apache License version 2.0.
# Data generated with ScanCode require an acknowledgment.
# ScanCode is a trademark of nexB Inc.
#
# You may not use this software except in compliance with the License.
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
# When you publish or redistribute any data created with ScanCode or any ScanCode
# derivative work, you must accompany this data with the following acknowledgment:
#
# Generated with ScanCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
# OR CONDITIONS OF ANY KIND, either express or implied. No content created from
# ScanCode should be considered or used as legal advice. Consult an Attorney
# for any legal advice.
# ScanCode is a free software code scanning tool from nexB Inc. and others.
# Visit https://github.com/nexB/scancode-toolkit/ for support and download.

from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals

from collections import OrderedDict

import attr
from attr.validators import in_ as choices # NOQA
import typing


"""
Utilities and helpers for data classes.
"""


HELP_METADATA = '__field_help'
LABEL_METADATA = '__field_label'


def attribute(default=attr.NOTHING, validator=None,
repr=False, eq=True, order=True, # NOQA
init=True, type=None, converter=None, # NOQA
help=None, label=None, metadata=None,): # NOQA
"""
A generic attribute with help metadata and that is not included in the
representation by default.
"""
metadata = metadata or dict()
if help:
metadata[HELP_METADATA] = help

if label:
metadata[LABEL_METADATA] = label

return attr.attrib(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=init,
metadata=metadata,
type=type,
converter=converter
)


def Boolean(default=False, validator=None, repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
A boolean attribute.
"""
return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=bool,
converter=converter,
help=help,
label=label,
)


def TriBoolean(default=None, validator=None, repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
A tri-boolean attribute with possible values of None, True and False.
"""
return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=bool,
converter=converter,
help=help,
label=label,
)


def String(default=None, validator=None, repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
A string attribute.
"""
return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=str,
converter=converter,
help=help,
label=label,
)


def Integer(default=0, validator=None, repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
An integer attribute.
"""
converter = converter or attr.converters.optional(int)
return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=int,
converter=converter,
help=help,
label=label,
)


def Float(default=0.0, validator=None, repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
A float attribute.
"""
return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=float,
converter=converter,
help=help,
label=label,
)


def List(item_type=typing.Any, default=attr.NOTHING, validator=None,
repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
A list attribute: the optional item_type defines the type of items it stores.
"""
if default is attr.NOTHING:
default = attr.Factory(list)

return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=typing.List[item_type],
converter=converter,
help=help,
label=label,
)


def Mapping(value_type=typing.Any, default=attr.NOTHING, validator=None,
repr=False, eq=True, order=True, # NOQA
converter=None, help=None, label=None): # NOQA
"""
A mapping attribute: the optional value_type defines the type of values it
stores. The key is always a string.

Notes: in Python 2 the type is Dict as there is no typing available for
OrderedDict for now.
"""
if default is attr.NOTHING:
default = attr.Factory(OrderedDict)

return attribute(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
init=True,
type=typing.Dict[str, value_type],
converter=converter,
help=help,
label=label,
)


##################################################
# FIXME: add proper support for dates!!!
##################################################

def Date(default=None, validator=None, repr=False, eq=True, order=True, # NOQA
converter=None, label=None, help=None,): # NOQA
"""
A date attribute. It always serializes to an ISO date string.
Behavior is TBD and for now this is exactly a string.
"""
return String(
default=default,
validator=validator,
repr=repr,
eq=eq,
order=order,
converter=converter,
help=help,
label=label,
)
Loading