<commit_before># -*- coding: utf-8 -*-
__author__ = 'Dmitriy.Dakhnovskiy'

import ast
from .abstract_source_parser import AbstractSourceParser


class PythonSourceParser(AbstractSourceParser):

    def __init__(self, source):
        """
        :param source: исходный код
        """
        super().__init__(source)

    @staticmethod
    def _parse_source(source):
        """
        возвращает разобранный в структуру код
        :param source: исходный код
        """
        try:
            parsed_source = ast.parse(source)
        except SyntaxError:
            parsed_source = None

        return parsed_source

    def _walk_parsed_source(self):
        """
        генератор по элементам разобранной структуры
        """
        return ast.walk(self.parsed_source)

    @staticmethod
    def _is_variable(element):
        """
        проаверяет является ли элемент структуры переменной
        :param element: элемент
        """
        return False

    @staticmethod
    def _is_function(element):
        """
        проаверяет является ли элемент структуры функцией
        :param element: элемент
        """
        if isinstance(element, ast.FunctionDef):
            name_function = PythonSourceParser._get_element_name(element)
            return not (name_function.startswith('__') and name_function.endswith('__'))

        return False

    @staticmethod
    def _get_words_from_identificator(identificator):
        """
        получить слова из идентификатора
        :param identificator: идентификатор
        """
        return identificator.split('_')

    @staticmethod
    def _get_element_name(element):
        """
        получить наименование(идентификатор) элемента разобранной структуры
        :param element: элемент структуры
        """
        return element.name.lower()
<commit_msg>+todo<commit_after># -*- coding: utf-8 -*-
__author__ = 'Dmitriy.Dakhnovskiy'

import ast
from .abstract_source_parser import AbstractSourceParser


class PythonSourceParser(AbstractSourceParser):

    def __init__(self, source):
        """
        :param source: исходный код
        """
        super().__init__(source)

    @staticmethod
    def _parse_source(source):
        """
        возвращает разобранный в структуру код
        :param source: исходный код
        """
        try:
            parsed_source = ast.parse(source)
        except SyntaxError:
            parsed_source = None

        return parsed_source

    def _walk_parsed_source(self):
        """
        генератор по элементам разобранной структуры
        """
        return ast.walk(self.parsed_source)

    @staticmethod
    def _is_variable(element):
        """
        проаверяет является ли элемент структуры переменной
        :param element: элемент
        """
        # TODO Реализация метода
        return False

    @staticmethod
    def _is_function(element):
        """
        проаверяет является ли элемент структуры функцией
        :param element: элемент
        """
        if isinstance(element, ast.FunctionDef):
            name_function = PythonSourceParser._get_element_name(element)
            return not (name_function.startswith('__') and name_function.endswith('__'))

        return False

    @staticmethod
    def _get_words_from_identificator(identificator):
        """
        получить слова из идентификатора
        :param identificator: идентификатор
        """
        return identificator.split('_')

    @staticmethod
    def _get_element_name(element):
        """
        получить наименование(идентификатор) элемента разобранной структуры
        :param element: элемент структуры
        """
        return element.name.lower()

{'fraction_non_alphanumeric': 0.08119079837618404, 'fraction_numerical': 0.0005412719891745603, 'mean_word_length': 2.3267326732673266, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, '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': '4039284', 'n_tokens_mistral': 1090, 'n_tokens_neox': 1174, 'n_words': 233}