Exemplo n.º 1
0
class Story(Model, Node):
    _schema = story_schema

    def _on_init(self):
        try:
            self._validate()
        except Exception as e:
            print('ERROR in validation for Story:')
            print()
            print(str(e))
            print()
            print(self._yaml())
            print()

    mpd = property(lambda self: get_manifest(self))

    image = property(lambda self: get_image_url(self))

    video = property(lambda self: get_video_url(self))

    __repr__ = lambda self: f'Story(pk={self.pk})'

    location = property(lambda self: fallback(
        lambda: self['story_locations'][0]['location'], lambda: self[
            'story_locations']['location'], lambda: None))

    geotag: compose(
        property, silent)(lambda self: self['story_locations'][0]['location'])

    swipeup_url = property(
        silent(lambda self: self['story_cta'][0]['links'][0]['webUri']))

    spotyfy_song = property(
        lambda self: self['story_app_attribution']['content_url'])
Exemplo n.º 2
0
    def scorer(self):
        def from_attr():
            if self._scorer is not None:
                return self._scorer
            else:
                raise ValueError

        def from_sklearn_metrics():
            return sklearn.metrics.get_scorer(self.name)

        def from_import():
            module_name, scorer_name = self.name.rsplit('.', maxsplit=1)
            mod = import_module_from_modname(module_name)
            return getattr(mod, scorer_name)

        self._scorer = fallback(
            from_attr,
            from_sklearn_metrics,
            from_import,
            raiser(
                BalletError,
                'Could not get a scorer with configuration {}'.format(
                    self.name)),
        )
        return self._scorer
Exemplo n.º 3
0
def detect_github_username(project: 'Project') -> str:
    """Detect github username

    Looks in the following order:
    1. github.user git config variable
    2. git remote origin
    3. $USER
    4. 'username'
    """
    @raiseifnone
    def get_config_variable():
        return project.repo.config_reader().get_value('github',
                                                      'user',
                                                      default=None)

    @raiseifnone
    def get_remote():
        url = list(project.repo.remote('origin').urls)[0]
        # protocol:user/repo, i.e. '[email protected]:ballet/ballet'
        return re_find(r'.+:(.+)/.+', url)

    @raiseifnone
    def get_user_env():
        return sys.environ.get('USER')

    def get_default():
        return 'username'

    return fallback(get_config_variable, get_remote, get_user_env,
                    (get_default, ()))
Exemplo n.º 4
0
class Media(Node, Model):
    def _on_init(self):
        try:
            self._validate()
        except Exception as e:
            print('ERROR in validation for Media:')
            print()
            print(str(e))
            print()
            print(self._yaml())
            print()

    _schema = media_schema

    __repr__ = lambda self: f'Media(url={self.url})'

    # id = property(lambda self: self.pk)

    url = property(lambda self: url_from_id(self.pk))

    # for image data, for video posts returns the thumbnail
    images = property(lambda self:  \
        list(map(get_image_url, self['carousel_media'])) if self['carousel_media'] \
        else [get_image_url(self)] or
        []
    )

    # for videos, it is a MDP, if it is long it needs to be recomposed
    mpd = property(lambda self:  \
        list(map(get_manifest, self['carousel_media'] or [])) if self['carousel_media'] \
        else [get_manifest(self)] or
        []
    )

    videos = property(lambda self:  \
        list(map(get_video_url, self['carousel_media'] or [])) if self['carousel_media'] \
        else [get_video_url(self)] or
        []
    )

    # def fallback(*args):
    #     first = lambda arr: arr[1:] if len(arr) > 0 else lambda: None
    #     rest = lambda arr: arr[:1]if len(arr) > 0 else []
    #     return  first(args)() or fallback(rest(args))

    _usertags = property(lambda self: fallback(
        lambda: self['usertags']['in']['user'], lambda: list(
            map(lambda x: x['user'], self['usertags']['in'])), lambda: list(
                map(lambda x: x['user'], self['caption']['usertags']['in'])),
        lambda: list(
            mapcat(
                lambda data: map(lambda x: x['user'], data['usertags']['in']),
                self['carousel_media'] or [])), lambda: list(
                    mapcat(
                        lambda data: map(lambda x: x['user'], data['caption'][
                            'usertags']['in']), self['carousel_media'] or [])
                ), lambda: []))
Exemplo n.º 5
0
def _get_name(func):
    return fallback(
        lambda: func.__closure__[1].cell_contents.__name__,
        lambda: func.__name__,
        lambda: func.__class__.__name__,
    )
Exemplo n.º 6
0
# TODO, in pyton 3.2 attribtes aren't ordered
def attributes(instance):
    list = [
        v for k, v in instance.__dict__.items()
        if not k.startswith('__') and not k.endswith('__')
        and not isinstance(v, (FunctionType, classmethod, staticmethod))
    ]
    return tuple(list)


class SafeDict(dict):
    def __missing__(self, key):
        return '{' + key + '}'


get_image_url = lambda data: fallback(
    lambda: data['image_versions2']['candidates'][0]['url'],
    lambda: data['image_versions2'][0]['url'],
    lambda: None,
)

get_video_url = lambda data: fallback(
    lambda: data['video_versions'][0]['url'],
    # lambda: get_mdp_url(data['video_dash_manifest']),
    lambda: None,
)

# get_media_url = lambda data:  get_image_url(data)

get_manifest = lambda data: data['video_dash_manifest']