Exemplo n.º 1
0
    def remove_structure(self, ieml, key=None, value=None, normalize=True):
        ieml, key, value = normalize_key(ieml,
                                         key,
                                         value,
                                         parse_ieml=True,
                                         partial=True,
                                         structure=True)

        path = self.path_of(ieml,
                            descriptor=False,
                            mkdir=True,
                            normalize=normalize)

        if not os.path.isfile(path):
            return

        if key is None:
            os.remove(path)
            return

        with open(path, "r", encoding='utf8') as f:
            lines = [l for l in f.readlines()
                     if not l.startswith('"{}" {} '.format(str(ieml), key) + \
                                        ('"{}"'.format(value) if value else ''))]

        with open(path, "w", encoding='utf8') as f:
            f.writelines(lines)
Exemplo n.º 2
0
    def get_values(self, ieml, key):
        ieml, key, _ = normalize_key(ieml,
                                     key,
                                     None,
                                     parse_ieml=False,
                                     partial=False,
                                     structure=True)

        try:
            return self.df.loc(axis=0)[(ieml, key)].to_dict('list')['value']
        except KeyError:
            return []
Exemplo n.º 3
0
    def add_structure(self, ieml, key, value):
        ieml, key, value = normalize_key(ieml,
                                         key,
                                         value,
                                         parse_ieml=True,
                                         partial=False,
                                         structure=True)

        with open(self.path_of(ieml, descriptor=False, mkdir=True),
                  'a',
                  encoding='utf8') as fp:
            fp.write('"{}" {} "{}"\n'.format(str(ieml), key, value))
Exemplo n.º 4
0
    def add_descriptor(self, ieml, language, descriptor, value):
        ieml, language, descriptor = normalize_key(ieml,
                                                   language,
                                                   descriptor,
                                                   parse_ieml=True,
                                                   partial=False)
        value = _normalize_value(value)
        if not value:
            return

        with open(self.path_of(ieml, mkdir=True), 'a', encoding='utf8') as fp:
            fp.write('"{}" {} {} "{}"\n'.format(self.escape_value(str(ieml)),
                                                language, descriptor,
                                                self.escape_value(value)))
Exemplo n.º 5
0
    def get_values_partial(self, ieml, key=None):
        ieml, key, _ = normalize_key(ieml,
                                     key,
                                     None,
                                     parse_ieml=False,
                                     partial=True,
                                     structure=True)

        key = {'ieml': ieml, 'key': key}
        key = reduce(operator.and_, [
            self.df.index.get_level_values(k) == v
            for k, v in key.items() if v is not None
        ], True)

        res = defaultdict(list)
        for k, (v, ) in self.df[key].iterrows():
            res[k].append(v)

        return dict(res)
Exemplo n.º 6
0
    def remove_descriptor(self,
                          ieml,
                          language=None,
                          descriptor=None,
                          value=None,
                          normalize=True):
        ieml, language, descriptor = normalize_key(ieml,
                                                   language,
                                                   descriptor,
                                                   parse_ieml=True,
                                                   partial=True)

        path = self.path_of(ieml, mkdir=True, normalize=normalize)
        if not os.path.isfile(path):
            return

        if descriptor is None and language is None and value is None:
            os.remove(path)
            return

        if descriptor is None or language is None:
            if language is None:
                for l in LANGUAGES:
                    self.remove_descriptor(ieml, l, descriptor)
            else:
                for d in DESCRIPTORS_CLASS:
                    self.remove_descriptor(ieml, language, d)
            return

        if value:
            value = _normalize_value(value)

        with open(path, "r", encoding='utf8') as f:
            lines = [l for l in f.readlines()
                     if not l.startswith('"{}" {} {} '.format(str(ieml), language, descriptor) + \
                                        ('"{}"'.format(self.escape_value(value)) if value is not None else ''))]

        with open(path, "w", encoding='utf8') as f:
            f.writelines(lines)