def test_fetch_missing_media(self):
        image_path = 'jr://file/commcare/case_list_image.jpg'
        self.master_app_with_report_modules.get_module(0).set_icon(
            'en', image_path)
        self.master_app_with_report_modules.create_mapping(self.image,
                                                           image_path,
                                                           save=False)

        remote_details = RemoteLinkDetails('http://localhost:8000', 'user',
                                           'key')
        data = b'this is a test: \255'  # Real data will be a binary multimedia file, so mock it with bytes, not unicode
        media_details = list(
            self.master_app_with_report_modules.multimedia_map.values())[0]
        media_details['multimedia_id'] = uuid.uuid4().hex
        media_details['media_type'] = 'CommCareMultimedia'
        with patch(
                'corehq.apps.linked_domain.remote_accessors._fetch_remote_media_content'
        ) as mock:
            mock.return_value = data
            fetch_remote_media('domain',
                               [('case_list_image.jpg', media_details)],
                               remote_details)

        media = CommCareMultimedia.get(media_details['multimedia_id'])
        self.addCleanup(media.delete)
        content = media.fetch_attachment(list(media.blobs.keys())[0])
        self.assertEqual(data, content)
def _migrate_linked_apps(apps, schema_editor):
    app_db = LinkedApplication.get_db()
    linked_apps = get_all_docs_with_doc_types(
        app_db, ['LinkedApplication', 'LinkedApplication-Deleted']
    )
    errors = []
    for app_doc in linked_apps:
        remote_details = None
        remote_url = app_doc.pop('remote_url_base', None)
        if remote_url:
            auth = app_doc.pop('remote_auth', {})
            remote_details = RemoteLinkDetails(
                remote_url,
                auth.get('username'),
                auth.get('api_key'),
            )

        master_domain = app_doc.pop('master_domain', None)
        if not master_domain and not remote_url:
            master_domain = get_app(None, app_doc['master']).domain
        try:
            DomainLink.link_domains(app_doc['domain'], master_domain, remote_details)
        except DomainLinkError as e:
            errors.append(str(e))
        else:
            app_db.save_doc(app_doc)

    _assert = soft_assert('{}@dimagi.com'.format('skelly'), exponential_backoff=False)
    _assert(not errors, 'Errors migrating linked apps to linked domain', {
        'errors': errors
    })
Exemple #3
0
 def handle(self, url_base, upstream_domain, username, api_key, downstream_domain, **options):
     remote_details = RemoteLinkDetails(
         url_base=url_base,
         username=username,
         api_key=api_key
     )
     DomainLink.link_domains(downstream_domain, upstream_domain, remote_details)
    def handle(self, master_id, linked_id, url_base, domain, username, api_key, **options):
        remote_details = RemoteLinkDetails(
            url_base,
            username,
            api_key,
        )

        linked_app = LinkedApplication.get(linked_id)
        link_app(linked_app, domain, master_id, remote_details)