def testSelectivePullReplication(self): """ Create national patients with different clinic ids and make sure they get selectively replicated to the proper clinics """ self.assertEqual(0, self.clinic_1_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(0, self.clinic_2_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(0, self.national_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self._add_patients(self.national_db, 10, TEST_CLINIC_1) self._add_patients(self.national_db, 20, TEST_CLINIC_2) self._add_patients(self.national_db, 30) self.assertEqual(0, self.clinic_1_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(0, self.clinic_2_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(60, self.national_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) # replicate to clinic 1 replicate(self.server, TEST_NATIONAL, TEST_CLINIC_1, filter=const.FILTER_CLINIC, query_params={ const.PROPERTY_CLINIC_ID: TEST_CLINIC_1 }) self.assertEqual(10, self.clinic_1_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(0, self.clinic_2_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(60, self.national_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) # replicate to clinic 2 replicate(self.server, TEST_NATIONAL, TEST_CLINIC_2, filter=const.FILTER_CLINIC, query_params={ const.PROPERTY_CLINIC_ID: TEST_CLINIC_2 }) self.assertEqual(10, self.clinic_1_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(20, self.clinic_2_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count()) self.assertEqual(60, self.national_db.view(const.VIEW_PATIENT_BY_BHOMA_ID, reduce=False).count())
def handle(self, *args, **options): if len(args) != 1: raise CommandError('Usage: manage.py migrate_rev2_data <old_db>') db = get_db() source_db = args[0] # the source db needs to have the migration views built so just force-sync the # design doc print "prepping source database %s" % source_db source = db.server.get_or_create_db(source_db) path_to_migration = os.path.join(settings.BHOMA_ROOT_DIR, "apps", "migration") loader = FileSystemDocLoader(path_to_migration, "_design", design_name="migration") loader.sync(source) print "migrating rev1 data to from %s to %s" % (source_db, db.dbname) replicate(db.server, source_db, db.dbname, filter="migration/migrates_rev_2") print "migration complete"