def save(self, doc): """Save an instruction. Returns None if the save was successful, a message explaining why it failed otherwise. """ try: doc.validate() self.coll.save(doc.to_python()) except ShieldException as e: return str(e) creator = self.users.get(doc.creator_id) self.repo.commit(self._repo_key(creator, doc), doc.instruction, author=signature(creator.name, creator.name))
def create(self, creator, name, instruction, tags): """Create an instruction for a creator. Returns the InstructionDocument. Raises a DuplicateKeyError or ShieldException otherwise. """ doc = InstructionDocument( creator_id=creator.id, name=name, instruction=instruction, tags=tags) doc.validate() id = self.coll.insert(doc.to_python()) doc = InstructionDocument(**self.coll.find_one(id)) # grab ID self.repo.create(self._repo_key(creator, doc), doc.instruction, author=signature(creator.name, creator.name)) return doc