<commit_before>#encoding: utf-8
import logging
import datetime
from sqlalchemy import Table, MetaData, select, create_engine, insert, update
import sqlalchemy

class FunctionalError(ValueError):
    """
    Exception lancé lorsque que la donnée à traiter n'est pas valide
    """
    pass

class TechnicalError(ValueError):
    """
    Exception lancé lors d'un probléme technique
    typiquement la base de données est inaccessible
    """
    pass

def from_timestamp(timestamp):
    #@TODO: pour le moment on remet à l'heure local
    #à virer le jour ou kraken géreras tout en UTC
    return datetime.datetime.fromtimestamp(timestamp)

def from_time(time):
    return datetime.datetime.utcfromtimestamp(time).time()


def parse_active_days(active_days):
    """
    permet de parser les champs active_days
    retourne la valeur par défaut si non initialisé: "11111111"
    sinon vérifie que c'est bien une chaine de 8 0 ou 1 et la retourne
    raise une FunctionalError si le format n'est pas valide
    """
    if not active_days:
        return '11111111'
    else:
        if (active_days.count('0') + active_days.count('1')) != 8:
            raise FunctionalError('active_days not valid: ' + active_days)
        return  active_days


def build_message_dict(message):
    """
    construit à partir d'un object protobuf pbnavitia.realtime.Message le
    dictionnaire utilisé pour l'insertion en base
    """
    result = {}
    result['uri'] = message.uri
    result['object_uri'] = message.object.object_uri
    result['object_type_id'] = message.object.object_type

    if not message.active_days:
        result['active_days'] = '11111111'
    else:
        if (message.active_days.count('0')
                + message.active_days.count('1')) != 8:
            raise FunctionalError('not valid: ' + message.active_days)
        result['active_days'] = message.active_days

    result['start_publication_date'] = from_timestamp(
            message.start_publication_date)
    result['end_publication_date'] = from_timestamp(
            message.end_publication_date)

    result['start_application_date'] = from_timestamp(
            message.start_application_date)
    result['end_application_date'] = from_timestamp(
            message.end_application_date)

    result['start_application_daily_hour'] = from_time(
            message.start_application_daily_hour)
    result['end_application_daily_hour'] = from_time(
            message.end_application_daily_hour)<commit_msg>sindri: refacto<commit_after>#encoding: utf-8
import logging
import datetime
from sqlalchemy import Table, MetaData, select, create_engine, insert, update
import sqlalchemy

class FunctionalError(ValueError):
    """
    Exception lancé lorsque que la donnée à traiter n'est pas valide
    """
    pass

class TechnicalError(ValueError):
    """
    Exception lancé lors d'un probléme technique
    typiquement la base de données est inaccessible
    """
    pass

def from_timestamp(timestamp):
    #@TODO: pour le moment on remet à l'heure local
    #à virer le jour ou kraken géreras tout en UTC
    return datetime.datetime.fromtimestamp(timestamp)

def from_time(time):
    return datetime.datetime.utcfromtimestamp(time).time()


def parse_active_days(active_days):
    """
    permet de parser les champs active_days
    retourne la valeur par défaut si non initialisé: "11111111"
    sinon vérifie que c'est bien une chaine de 8 0 ou 1 et la retourne
    raise une FunctionalError si le format n'est pas valide
    """
    if not active_days:
        return '11111111'
    else:
        if (active_days.count('0') + active_days.count('1')) != 8:
            raise FunctionalError('active_days not valid: ' + active_days)
        return  active_days


def build_message_dict(message):
    """
    construit à partir d'un object protobuf pbnavitia.realtime.Message le
    dictionnaire utilisé pour l'insertion en base
    """
    result = {}
    result['uri'] = message.uri
    result['object_uri'] = message.object.object_uri
    result['object_type_id'] = message.object.object_type

    result['active_days'] = parse_active_days(message.active_days)

    result['start_publication_date'] = from_timestamp(
            message.start_publication_date)
    result['end_publication_date'] = from_timestamp(
            message.end_publication_date)

    result['start_application_date'] = from_timestamp(
            message.start_application_date)
    result['end_application_date'] = from_timestamp(
            message.end_application_date)

    result['start_application_daily_hour'] = from_time(
            message.start_application_daily_hour)
    result['end_application_daily_hour'] = from_time(
            message.end_application_daily_hour)
{'fraction_non_alphanumeric': 0.08501683501683502, 'fraction_numerical': 0.011994949494949494, 'mean_word_length': 3.5137701804368473, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 5, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7365341', 'n_tokens_mistral': 1455, 'n_tokens_neox': 1391, 'n_words': 364}