def add_field(self, k, v, attrs=None):
        if k in self.atom_fields:
            # These should be unique!
            old_e = self.entry.find(NS['atom'] % k)
            if old_e == None:
                e = etree.SubElement(self.entry, NS['atom'] % k, nsmap=self.nsmap) # Notice we explicitly declare the nsmap
                e.text = v
            else:
                old_e.text = v
        elif "_" in k:
            # possible XML namespace, eg 'dcterms_title'
            nmsp, tag = k.split("_", 1)
            if nmsp in self.add_ns:
                e = etree.SubElement(self.entry, NS[nmsp] % tag, nsmap=self.nsmap) # Notice we explicitly declare the nsmap
                e.text = v
                if attrs is not None:
                    for an, av in attrs.iteritems():
                        e.set(an, av)
        elif k == "author" and isinstance(v, dict):
            self.add_author(**v)
Make sure you can deepcopy an Async.
dataset/ETHPy150Open swordapp/python-client-sword2/sword2/atom_objects.py/Entry.add_field--crossover with--dataset/ETHPy150Open Workiva/furious/furious/tests/test_async.py/TestAsync.test_deepcopy