示例#1
0
    def _run(self, file, project, codebook_name, default_language, codebook,
             **kargs):
        data = csv_as_columns(self.bound_form.get_reader())

        # build code, parent pairs
        if "parent" in data:
            parents = zip(data["code"], data["parent"])
        else:
            cols = get_indented_columns(data)
            parents = list(get_parents_from_columns(cols))
        uuids = data["uuid"] if "uuid" in data else [None] * len(parents)

        # create codebook
        if not codebook:
            codebook = Codebook.objects.create(project=project,
                                               name=codebook_name)
            log.info("Created codebook {codebook.id} : {codebook}".format(
                **locals()))
        else:
            codebook.cache_labels()
            log.info("Updating {codebook.id} : {codebook}".format(**locals()))

        # create/retrieve codes
        codes = {
            code: Code.get_or_create(uuid=uuid or None)
            for ((code, parent), uuid) in zip(parents, uuids)
        }

        to_add = []
        for code, parent in parents:
            instance = codes[code]
            parent_instance = codes[parent] if parent else None
            instance.add_label(default_language, code)
            cbc = codebook.get_codebookcode(instance)
            if cbc is None:
                to_add.append((instance, parent_instance))
            else:
                getid = lambda c: None if c is None else c.id
                if getid(cbc.parent) != getid(parent_instance):
                    cbc.parent = parent_instance
                    cbc.save()
        codebook.add_codes(to_add)

        for col in data:
            if col.startswith(LABEL_PREFIX):
                lang = col[len(LABEL_PREFIX):].strip()
                if lang.startswith('-'): lang = lang[1:].strip()
                try:
                    lang = int(lang)
                except ValueError:
                    lang = Language.get_or_create(label=lang).id
                for (code, parent), label in zip(parents, data[col]):
                    if label:
                        codes[code].add_label(lang, label)
        return codebook
    def _run(self, file, project, codebook_name, default_language, codebook, **kargs):
        data = csv_as_columns(self.bound_form.get_reader())
        
        # build code, parent pairs
        if "parent" in data:
            parents = zip(data["code"], data["parent"])
        else:
            cols = get_indented_columns(data)
            parents = list(get_parents_from_columns(cols))
        uuids = data["uuid"] if "uuid" in data else [None] * len(parents)

        # create codebook
        if not codebook:
            codebook = Codebook.objects.create(project=project, name=codebook_name)
            log.info("Created codebook {codebook.id} : {codebook}".format(**locals()))
        else:
            codebook.cache_labels()
            log.info("Updating {codebook.id} : {codebook}".format(**locals()))

        # create/retrieve codes
        codes = {code : Code.get_or_create(uuid=uuid or None) for ((code, parent), uuid) in zip(parents, uuids)}

        to_add = []
        for code, parent in parents:
            instance = codes[code]
            parent_instance = codes[parent] if parent else None
            instance.add_label(default_language, code)
            cbc = codebook.get_codebookcode(instance)
            if cbc is None:
                to_add.append((instance, parent_instance))
            else:
                getid = lambda c: None if c is None else c.id
                if getid(cbc.parent) != getid(parent_instance):
                    cbc.parent = parent_instance
                    cbc.save()
        codebook.add_codes(to_add)


        for col in data:
            if col.startswith(LABEL_PREFIX):
                lang = col[len(LABEL_PREFIX):].strip()
                if lang.startswith('-'): lang = lang[1:].strip()
                try:
                    lang = int(lang)
                except ValueError:
                    lang = Language.get_or_create(label=lang).id
                for (code, parent), label in zip(parents, data[col]):
                    if label:
                        codes[code].add_label(lang, label)
        return codebook
示例#3
0
    def _run(self, file, project, codebook_name, **kargs):
        data = csv_as_columns(self.bound_form.get_reader())

        # build code, parent pairs
        if "parent" in data:
            parents = zip(data["code"], data["parent"])
        else:
            cols = get_indented_columns(data)
            parents = list(get_parents_from_columns(cols))

        uuids = data["uuid"] if "uuid" in data else [None] * len(parents)

        # create objects
        cb = Codebook.objects.create(project=project, name=codebook_name)

        log.info("Created codebook {cb.id} : {cb}".format(**locals()))

        codes = {
            code: Code.get_or_create(uuid=uuid or None)
            for ((code, parent), uuid) in zip(parents, uuids)
        }

        to_add = []
        for code, parent in parents:
            instance = codes[code]
            parent_instance = codes[parent] if parent else None
            to_add.append((instance, parent_instance))
            if not instance.labels.all().exists():
                instance.add_label(0, code)
        cb.add_codes(to_add)

        for col in data:
            if col.startswith(LABEL_PREFIX):
                lang = col[len(LABEL_PREFIX):]
                try:
                    lang = int(lang)
                except ValueError:
                    lang = Language.objects.get(label=lang).id
                for (code, parent), label in zip(parents, data[col]):
                    if label and not codes[code].labels.filter(
                            language_id=lang).exists():
                        codes[code].add_label(lang, label)
        return cb
示例#4
0
    def _run(self, file, project, codebook_name, **kargs):
        data = csv_as_columns(self.bound_form.get_reader())
        
        # build code, parent pairs
        if "parent" in data:
            parents = zip(data["code"], data["parent"])
        else:
            cols = get_indented_columns(data)
            parents = list(get_parents_from_columns(cols))

        uuids = data["uuid"] if "uuid" in data else [None] * len(parents)

        # create objects
        cb = Codebook.objects.create(project=project, name=codebook_name)

        log.info("Created codebook {cb.id} : {cb}".format(**locals()))


        
        codes = {code : Code.get_or_create(uuid=uuid or None) for ((code, parent), uuid) in zip(parents, uuids)}

        to_add = []
        for code, parent in parents:
            instance = codes[code]
            parent_instance = codes[parent] if parent else None
            to_add.append((instance, parent_instance))
            if not instance.labels.all().exists():
                instance.add_label(0, code)
        cb.add_codes(to_add)


        for col in data:
            if col.startswith(LABEL_PREFIX):
                lang = col[len(LABEL_PREFIX):]
                try:
                    lang = int(lang)
                except ValueError:
                    lang = Language.objects.get(label=lang).id
                for (code, parent), label in zip(parents, data[col]):
                    if label and not codes[code].labels.filter(language_id=lang).exists():
                        codes[code].add_label(lang, label)
        return cb