def _save_package(self, path, ownerid): meta = self._get_meta(path) try: # can't use get_or_create as that demands there be an owner project = Project.objects.get(name=meta.name) isnewproject = False except Project.DoesNotExist: project = Project(name=meta.name) isnewproject = True release = project.get_release(meta.version) if not isnewproject and release and release.version == meta.version: print "%s-%s already added" % (meta.name, meta.version) return # algorithm as follows: If owner is given, try to grab user with that # username from db. If doesn't exist, bail. If no owner set look at # mail address from metadata and try to get that user. If it exists # use it. If not, bail. owner = None if ownerid: try: if "@" in ownerid: owner = User.objects.get(email=ownerid) else: owner = User.objects.get(username=ownerid) except User.DoesNotExist: pass else: try: owner = User.objects.get(email=meta.author_email) except User.DoesNotExist: pass if not owner: print "No owner defined. Use --owner to force one" return # at this point we have metadata and an owner, can safely add it. project.owner = owner # Some packages don't have proper licence, seems to be a problem # with setup.py upload. Use "UNKNOWN" project.license = meta.license or "Unknown" project.metadata_version = meta.metadata_version project.author = meta.author project.home_page = meta.home_page project.download_url = meta.download_url project.summary = meta.summary project.description = meta.description project.author_email = meta.author_email project.save() for classifier in meta.classifiers: project.classifiers.add( Classifier.objects.get_or_create(name=classifier)[0]) release = Release() release.version = meta.version release.project = project filename = os.path.basename(path) file = File(open(path, "rb")) release.distribution.save(filename, file) release.save() print "%s-%s added" % (meta.name, meta.version)