<commit_before># fslabel.py
# Filesystem labeling classes for anaconda's storage configuration module.
#
# Copyright (C) 2013  Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
# Public License for more details.  You should have received a copy of the
# GNU General Public License along with this program; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
# Red Hat Author(s): <NAME> <<EMAIL>>

import abc
import re

class FSLabelApp(object):
    """An abstract class that represents actions associated with a
       filesystem's labeling application.
    """

    __metaclass__ = abc.ABCMeta

    @property
    def name(self):
        """The name of the filesystem labeling application.

           :rtype: str
        """
        return self._name

    @abc.abstractproperty
    def reads(self):
        """Returns True if this app can also read a label.

           :rtype: bool
        """
        raise NotImplementedError

    @abc.abstractmethod
    def _writeLabelArgs(self, fs):
        """Returns a list of the arguments for writing a label.

           :param FS fs: a filesystem object

           :return: the arguments
           :rtype: list of str
        """
        raise NotImplementedError

    def setLabelCommand(self, fs):
        """Get the command to label the filesystem.

           :param FS fs: a filesystem object
           :return: the command
           :rtype: list of str
        """
        return [self.name] + self._writeLabelArgs(fs)

    @abc.abstractmethod
    def _readLabelArgs(self, fs):
        """Returns a list of arguments for reading a label.

           :param FS fs: a filesystem object
           :return: the arguments
           :rtype: list of str
        """
        raise NotImplementedError

    def readLabelCommand(self, fs):
        """Get the command to read the filesystem label.

           :param FS fs: a filesystem object
           :return: the command
           :rtype: list of str

           Raises an FSError if this application can not read the label.
        """
        if not self.reads:
            raise FSError("Application %s can not read the filesystem label." % self.name)
        return [self.name] + self._readLabelArgs(fs)

    def extractLabel(self, labelstr):
        """Extract the label from an output string.

           :param str labelstr: the string containing the label information

           :return: the label
           :rtype: str

           Raises an FSError if the label can not be extracted.
        """
        if not self.reads:
            raise FSError("Unknown format for application %s" % self.name)
        match = re.match(self._labelstrRegex(), labelstr)
        if match is None:
            raise FSError("Unknown format for application %s" % self.name)
        return match.group('label')

class E2Label(FSLabelApp):
    """Application used by ext2 and its descendants."""

    _name = "e2label"

    @property
    def reads(self):
        return True

    def _writeLabelArgs(self, fs):
        if fs.label:
            return [fs.device, fs.label]
        else:
            return [fs.device, ""]

    def _readLabelArgs(self, fs):
        return [fs.device]

    def _labelstrRegex(self):<commit_msg>Import errors so FSError name is resolved (#1038590)<commit_after># fslabel.py
# Filesystem labeling classes for anaconda's storage configuration module.
#
# Copyright (C) 2013  Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
# Public License for more details.  You should have received a copy of the
# GNU General Public License along with this program; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
# Red Hat Author(s): <NAME> <<EMAIL>>

import abc
import re

from .. import errors

class FSLabelApp(object):
    """An abstract class that represents actions associated with a
       filesystem's labeling application.
    """

    __metaclass__ = abc.ABCMeta

    @property
    def name(self):
        """The name of the filesystem labeling application.

           :rtype: str
        """
        return self._name

    @abc.abstractproperty
    def reads(self):
        """Returns True if this app can also read a label.

           :rtype: bool
        """
        raise NotImplementedError

    @abc.abstractmethod
    def _writeLabelArgs(self, fs):
        """Returns a list of the arguments for writing a label.

           :param FS fs: a filesystem object

           :return: the arguments
           :rtype: list of str
        """
        raise NotImplementedError

    def setLabelCommand(self, fs):
        """Get the command to label the filesystem.

           :param FS fs: a filesystem object
           :return: the command
           :rtype: list of str
        """
        return [self.name] + self._writeLabelArgs(fs)

    @abc.abstractmethod
    def _readLabelArgs(self, fs):
        """Returns a list of arguments for reading a label.

           :param FS fs: a filesystem object
           :return: the arguments
           :rtype: list of str
        """
        raise NotImplementedError

    def readLabelCommand(self, fs):
        """Get the command to read the filesystem label.

           :param FS fs: a filesystem object
           :return: the command
           :rtype: list of str

           Raises an FSError if this application can not read the label.
        """
        if not self.reads:
            raise errors.FSError("Application %s can not read the filesystem label." % self.name)
        return [self.name] + self._readLabelArgs(fs)

    def extractLabel(self, labelstr):
        """Extract the label from an output string.

           :param str labelstr: the string containing the label information

           :return: the label
           :rtype: str

           Raises an FSError if the label can not be extracted.
        """
        if not self.reads:
            raise errors.FSError("Unknown format for application %s" % self.name)
        match = re.match(self._labelstrRegex(), labelstr)
        if match is None:
            raise errors.FSError("Unknown format for application %s" % self.name)
        return match.group('label')

class E2Label(FSLabelApp):
    """Application used by ext2 and its descendants."""

    _name = "e2label"

    @property
    def reads(self):
        return True

    def _writeLabelArgs(self, fs):
        if fs.label:
            return [fs.device, fs.label]
        else:
            return [fs.device, ""]

    def _readLabelArgs(self, fs):
        return [fs.device]

    def _labelstrRegex(self):
{'fraction_non_alphanumeric': 0.07541934670198007, 'fraction_numerical': 0.0056753688989784334, 'mean_word_length': 2.4210526315789473, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, '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': '7188144', 'n_tokens_mistral': 2154, 'n_tokens_neox': 2020, 'n_words': 903}