Exemple #1
0
def _populate_database():
    get_user_model().objects.create_user(username='******', password='******')
    get_user_model().objects.create_superuser(username='******', password='******')
    image_name = 'test-image.jpg'
    image_bytes = None

    with open(CURRENT_DIR + '/' + image_name, 'rb') as image:
        image_bytes = image.read()

    resource = Resource(
        external_id='recpbs29kfas9i',
        url='https://test.test/resource.pdf'
    )
    resource.image.save(image_name, ContentFile(image_bytes), save=True)
    resource.save()

    for external_id in ('recZxlcM61qaDoOkc', 'recYK5ljTyL3b18J3', 'recvSDrARAcmKogbD'):
        practice = Practice(
            external_id=external_id,
            main_resource=resource,
        )
        practice.image.save(image_name, ContentFile(image_bytes), save=True)
        practice.save()

    for category_id in ('rec82929kfas9i', 'rec0098afaooka', 'recppasf09aii'):
        category = Category(
            external_id=category_id,
            practice_external_ids=['recZxlcM61qaDoOkc']
        )
        category.image.save(image_name, ContentFile(image_bytes), save=True)
        category.save()
        category.practices.add(Practice.objects.filter(external_id='recZxlcM61qaDoOkc').first())
Exemple #2
0
def _populate_database():
    User.objects.create_user(username='******', password='******')
    User.objects.create_superuser(username='******', password='******')
    image_name = 'test-image.jpg'
    image_bytes = None

    with open(CURRENT_DIR + '/' + image_name, 'rb') as image:
        image_bytes = image.read()

    resource = Resource(external_id='recpbs29kfas9i',
                        url='https://test.test/resource.pdf')
    resource.image.save(image_name, ContentFile(image_bytes), save=True)
    resource.save()

    for external_id in ('recZxlcM61qaDoOkc', 'recYK5ljTyL3b18J3',
                        'recvSDrARAcmKogbD'):
        practice = Practice(
            external_id=external_id,
            main_resource=resource,
        )
        practice.image.save(image_name, ContentFile(image_bytes), save=True)
        practice.save()
Exemple #3
0
    def update():
        """
        We completely replace whatever we have in the DB for
        the new information. Eventually we may want to only replace
        the changed ones.

        If there are errors, an array of them will be returned.
        """
        errors = []
        practices_base = settings.AIRTABLE_PRACTICES_BASE

        json_practices = _get_airtable_data('Pratiques?view=Grid%20view', practices_base)
        errors += validate_practices(json_practices)

        json_practice_types = _get_airtable_data('Types%20de%20pratique?view=Grid%20view', practices_base)
        errors += validate_practice_types(json_practice_types)

        json_weeds = _get_airtable_data('Adventices?view=Grid%20view', practices_base)
        errors += validate_weeds(json_weeds)

        json_pests = _get_airtable_data('Ravageurs?view=Grid%20view', practices_base)
        errors += validate_pests(json_pests)

        json_cultures = _get_airtable_data('Cultures?view=Grid%20view', practices_base)
        errors += validate_cultures(json_cultures)

        json_glyphosate = _get_airtable_data('Glyphosate?view=Grid%20view', practices_base)
        errors += validate_glyphosate_uses(json_glyphosate)

        json_resources = _get_airtable_data('Liens?view=Grid%20view', practices_base)
        errors += validate_resources(json_resources)

        json_resource_images = _get_airtable_data('logos?view=Grid%20view', practices_base)
        errors += validate_resource_images(json_resource_images)

        json_categories = _get_airtable_data('Categories?view=Grid%20view', practices_base)
        errors += validate_categories(json_categories)

        json_weed_practices = _get_airtable_data('Pratiques%2FAdventices?view=Grid%20view', practices_base)
        errors += validate_weed_practices(json_weed_practices)

        json_pest_practices = _get_airtable_data('Pratiques%2FRavageurs?view=Grid%20view', practices_base)
        errors += validate_pest_practices(json_pest_practices)

        json_culture_practices = _get_airtable_data('Pratiques%2FCultures?view=Grid%20view', practices_base)
        errors += validate_culture_practices(json_culture_practices)

        json_departments_practices = _get_airtable_data('Pratiques%2FDepartements?view=Grid%20view', practices_base)
        errors += validate_department_practices(json_departments_practices)

        json_departments = _get_airtable_data('Departements?view=Grid%20view', practices_base)
        errors += validate_departments(json_departments)

        json_glyphosate_practices = _get_airtable_data('Pratiques%2FGlyphosate?view=Grid%20view', practices_base)
        errors += validate_glyphosate_practices(json_glyphosate_practices)

        json_practice_groups = _get_airtable_data('Familles?view=Grid%20view', practices_base)
        errors += validate_practice_groups(json_practice_groups)

        json_mechanisms = _get_airtable_data('Marges%20de%20manoeuvre?view=Grid%20view', practices_base)
        errors += validate_mechanisms(json_mechanisms)

        has_fatal_errors = any(x.fatal for x in errors)
        if has_fatal_errors:
            return errors

        mechanisms = [Mechanism.create_from_airtable(x) for x in json_mechanisms]
        Mechanism.objects.all().delete()
        for mechanism in mechanisms:
            mechanism.save()

        categories = [Category.create_from_airtable(x) for x in json_categories]
        Category.objects.all().delete()
        for category in categories:
            category.save()

        json_resource_images.sort(key=lambda x: len(x['fields'].get('URL_principal')), reverse=True)
        resources = [Resource.create_from_airtable(x, json_resource_images) for x in json_resources]
        Resource.objects.all().delete()
        for resource in resources:
            resource.save()

        practice_groups = [PracticeGroup.create_from_airtable(x) for x in json_practice_groups]
        PracticeGroup.objects.all().delete()
        for practice_group in practice_groups:
            practice_group.save()

        practice_types = [PracticeType.create_from_airtable(x) for x in json_practice_types]
        PracticeType.objects.all().delete()
        for practice_type in practice_types:
            practice_type.save()

        weeds = [Weed.create_from_airtable(x) for x in json_weeds]
        Weed.objects.all().delete()
        for weed in weeds:
            weed.save()

        pests = [Pest.create_from_airtable(x) for x in json_pests]
        Pest.objects.all().delete()
        for pest in pests:
            pest.save()

        accepted_sectors = ['Grande culture']
        cultures = [SimulatorCulture.create_from_airtable(x) for x in json_cultures if x['fields'].get('Filière') in accepted_sectors]
        SimulatorCulture.objects.all().delete()
        for culture in cultures:
            culture.save()

        practices = [Practice.create_from_airtable(x, json_culture_practices, json_departments_practices,
                                                   json_departments, json_glyphosate, json_glyphosate_practices,
                                                   mechanisms, resources, json_practice_types, json_weeds,
                                                   json_weed_practices, json_pests, json_pest_practices) for x in json_practices]
        Practice.objects.all().delete()
        for practice in practices:
            practice.save()

        _link_practices_with_groups(practices, practice_groups)
        _link_practices_with_resources(practices, resources)
        _link_practices_with_types(practices, practice_types)
        _link_practices_with_categories(practices, categories)

        return errors