def init_fake_id_map(self):
        """
        Build a mapping between fake ids stored in Stripe metadata and those obj's
        actual ids

        We do this so we can have fixtures with stable ids for objects Stripe doesn't
        allow us to specify an id for (eg Card).

        Fixtures and tests will use the fake ids, when we talk to stripe we use the
        real ids
        :return:
        """

        for fake_customer in self.fake_data_map[djstripe.models.Customer]:
            try:
                # can only access Cards via the customer
                customer = djstripe.models.Customer(
                    id=fake_customer["id"]
                ).api_retrieve()
            except InvalidRequestError:
                self.stdout.write(
                    f"Fake customer {fake_customer['id']} doesn't exist in Stripe yet"
                )
                return

            # assume that test customers don't have more than 100 cards...
            for card in customer.sources.list(limit=100):
                self.update_fake_id_map(card)

            for payment_method in djstripe.models.PaymentMethod.api_list(
                customer=customer.id, type="card"
            ):
                self.update_fake_id_map(payment_method)

            for subscription in customer["subscriptions"]["data"]:
                self.update_fake_id_map(subscription)

        for tax_rate in djstripe.models.TaxRate.api_list():
            self.update_fake_id_map(tax_rate)

        Build a mapping between fake ids stored in Stripe metadata and those obj's
        actual ids

        We do this so we can have fixtures with stable ids for objects Stripe doesn't
        allow us to specify an id for (eg Card).

        Fixtures and tests will use the fake ids, when we talk to stripe we use the
        real ids
        :return:
        
tests/apps/example/management/commands/regenerate_test_fixtures.py