# Patchwork - automated patch tracking system # Copyright (C) 2011 Guilherme Salgado # # This file is part of the Patchwork package. # # Patchwork is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Patchwork is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty 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 Patchwork; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from datetime import datetime import email from itertools import count import textwrap from django.contrib.auth.models import User from patchwork.models import Bundle, Patch, Person, Project class ObjectFactory(object): """Factory methods for creating basic Python objects.""" def __init__(self): # Initialise the unique identifier. self.integer = count() def getUniqueEmailAddress(self): return "%s@example.com" % self.getUniqueString('email') def getUniqueString(self, prefix = None): """Return a string unique to this factory instance. :param prefix: Used as a prefix for the unique string. If unspecified, defaults to 'generic-string'. """ if prefix is None: prefix = "generic-string" string = "%s%s" % (prefix, self.getUniqueInteger()) return string.lower() def getUniqueInteger(self): """Return an integer unique to this factory instance.""" return self.integer.next() def makeUser(self): userid = password = self.getUniqueString() user = User.objects.create_user(userid, self.getUniqueEmailAddress(), password) user.save() return user def makeProject(self, linkname=None): name = self.getUniqueString() if linkname is None: linkname = name project = Project(linkname = linkname, name = name, listid = self.getUniqueString(), listemail = self.getUniqueEmailAddress()) project.save() return project def makePerson(self, is_user = True): person = Person(email = self.getUniqueEmailAddress(), name = self.getUniqueString()) person.save() if is_user: # Must create the user after the person is created or else # create_user() will trigger the creation of a person. user = User.objects.create_user(person.name, person.email, password = None) user.save() # Re-fetch the person object so that our callsite sees the link to the # newly created user. person = Person.objects.get(email = person.email) return person def makeBundle(self, patches = None): if patches is None: patches = [self.makePatch()] bundle = Bundle(owner = self.makeUser(), project = self.makeProject(), name = self.getUniqueString()) bundle.save() for patch in patches: bundle.append_patch(patch) bundle.save() return bundle def makePatch(self, project = None, submitter = None, author = None, date = None, content = None): if date is None: date = datetime.now() if project is None: project = self.makeProject() if submitter is None: submitter = self.makePerson() if author is None: author = submitter if content is None: content = textwrap.dedent("""\ --- a/apps/patchwork/bin/parsemail.py +++ b/apps/patchwork/bin/parsemail.py @@ -183,4 +183,3 @@ def find_content(project, mail): patch = None comment = None - if patchbuf: - mail_headers(mail) """) msgid = email.utils.make_msgid(idstring = self.getUniqueString()) patch = Patch(project = project, msgid = msgid, author = author, name = self.getUniqueString(), submitter = submitter, date = date, content = content) patch.save() return patch factory = ObjectFactory()