Esempio n. 1
0
    def post(self, request, resource_id):

        data_dictionary_id = request.POST['data_dictionary_id']
        if data_dictionary_id:
            data_dictionary = ResourceDataDictionary.objects.get(
                id=int(data_dictionary_id))
        else:
            data_dictionary = ResourceDataDictionary()

        data_dictionary.resource = Resource.objects.get(id=resource_id)
        data_dictionary.description = request.POST['dd_description']

        data_dictionary.save()

        columns_id = util.get_items_post(request.POST, 'column_')

        for column in columns_id:
            temp_column = DBColumn.objects.get(id=column)
            temp_column.dd_description = request.POST['column_' + str(column)]
            temp_column.save()

        messages.success(request,
                         'Resource Data Dictionary created with success!')

        return redirect('frontend:panel_resource')
Esempio n. 2
0
    def post(self, request, table_name):
        db_config = DBConfig.objects.get(id=request.POST['database_id'])
        table_schema = request.POST['table_schema']

        table_extractor = TableExtractor(db_config, table_name, table_schema)

        fk_tables = table_extractor.get_special_columns(only_fk=True)

        tables = list()

        for fk_table in fk_tables:

            temp_table_extractor = TableExtractor(db_config,
                                                  fk_table.get('table_name'),
                                                  fk_table.get('table_schema'))
            table_columns = temp_table_extractor.get_columns(
                special_columns=False)
            data = temp_table_extractor.get_data(table_columns, 5)

            columns = list()

            for table_column in table_columns:
                column = {
                    'name':
                    table_column.get('column_name'),
                    'verbose_name':
                    util.verbose_name(table_column.get('column_name'))
                }
                columns.append(column)

            table = {
                'table_name': fk_table.get('table_name'),
                'table_name_verbose':
                util.verbose_name(fk_table.get('table_name')),
                'table_schema': fk_table.get('table_schema'),
                'table_primary_key':
                temp_table_extractor.get_primary_key_name(),
                'table_fk_column': fk_table.get('column_name'),
                'columns': columns,
                'data': data,
            }
            tables.append(table)

        PARAMETERS = {
            'database': db_config,
            'table_name': table_name,
            'table_schema': table_schema,
            'tables': tables,
            'primary_key': request.POST['primary_key'],
            'columns': util.get_items_post(request.POST, 'column_'),
        }

        return render(request, self.template_name, PARAMETERS)
Esempio n. 3
0
    def post(self, request, table_name):
        db_config = DBConfig.objects.get(id=request.POST['database_id'])
        ckan_instance = CKANInstance.objects.get(id=1)

        table_schema = request.POST['table_schema']

        PARAMETERS = dict()

        if request.POST.get('action', False) == 'create':
            table = DBTable()

            table.name = table_name
            table.db_schema = DBSchema.objects.get(name=table_schema)
            table.primary_key = request.POST['primary_key']
            table.save()

            table_extractor = TableExtractor(db_config, table_name,
                                             table_schema)
            table_columns = table_extractor.get_columns()

            columns = util.get_items_post(request.POST, 'column_')
            for column in columns:

                temp_column = DBColumn()
                temp_column.name = column
                temp_column.db_table = table

                for table_column in table_columns:
                    if table_column.get('column_name') == column:
                        temp_column.type = table_column.get('data_type')

                        if table_column.get(
                                'character_maximum_length') is not None:
                            temp_column.size = table_column.get(
                                'character_maximum_length')
                        elif table_column.get('numeric_precision') is not None:
                            temp_column.size = table_column.get(
                                'numeric_precision')
                        else:
                            temp_column.size = 0

                        temp_column.not_null = table_column.get('is_nullable')
                        break

                temp_column.save()

            # FK COLUMNS ############
            temp_fks = util.get_items_post(request.POST, 'fk_')
            temp_keys = util.get_items_post(request.POST, 'key_')
            temp_fkeys = util.get_items_post(request.POST, 'fkey_')

            table_fks = list()

            for fk in temp_fks:
                split_str = fk.split('_table_')

                # get the table
                if split_str[1] not in table_fks:
                    table_fks.append(split_str[1])

                    table_split = (split_str[1]).split('_schema_')

                    table_temp = DBTable()
                    table_temp.name = table_split[0]
                    table_temp.db_schema = DBSchema.objects.get(
                        name=table_split[1])
                    table_temp.db_table = table

                    # Search the table's key name
                    for temp_key in temp_keys:
                        ss_key = temp_key.split('_table_')

                        if ss_key[1] == table_temp.name:
                            table_temp.primary_key = ss_key[0]
                            break

                    # Search the table's fk key name
                    for temp_fkey in temp_fkeys:
                        ss_fkey = temp_fkey.split('_table_')

                        if ss_fkey[1] == table_temp.name:
                            table_temp.fk_name = ss_fkey[0]
                            break

                    table_temp.save()

                    for t_fk in temp_fks:
                        t_split_str = t_fk.split('_table_')

                        t_table_extractor = TableExtractor(
                            db_config, table_split[0], table_split[1])
                        t_table_columns = t_table_extractor.get_columns()

                        if t_split_str[1] == split_str[1]:
                            temp_column = DBColumn()
                            temp_column.name = t_split_str[0]
                            temp_column.db_table = table_temp

                            for t_table_column in t_table_columns:
                                if t_table_column.get(
                                        'column_name') == t_split_str[0]:
                                    temp_column.type = t_table_column.get(
                                        'data_type')

                                    if t_table_column.get(
                                            'character_maximum_length'
                                    ) is not None:
                                        temp_column.size = t_table_column.get(
                                            'character_maximum_length')
                                    elif t_table_column.get(
                                            'numeric_precision') is not None:
                                        temp_column.size = t_table_column.get(
                                            'numeric_precision')
                                    else:
                                        temp_column.size = 0

                                    temp_column.not_null = t_table_column.get(
                                        'is_nullable')
                                    break

                            temp_column.save()

            #########################

            resource = Resource()

            resource.name = request.POST['name']
            resource.description = request.POST['description']
            resource.table = table
            resource.ckan = ckan_instance
            resource.resource_status = 'ACTIVE'
            resource.ckan_data_set_id = request.POST['dataset']
            resource.user = request.user

            resource.save()

            messages.success(request, 'Resource created with success!')

            return redirect('frontend:panel_resource')

        elif request.POST.get('action', False) == 'show':
            columns = util.get_items_post(request.POST, 'column_')
            fk_columns = util.get_items_post(request.POST, 'fk_')
            key_columns = util.get_items_post(request.POST, 'key_')
            fkey_columns = util.get_items_post(request.POST, 'fkey_')

            remote_ckan = RemoteCKAN(ckan_instance.url)
            datasets = remote_ckan.action.package_list()

            columns_label = ''
            for item in columns:
                columns_label += item + ', '

            columns_label = columns_label[:-2]

            PARAMETERS = {
                'database': db_config,
                'table_name': table_name,
                'columns_label': columns_label,
                'table_schema': table_schema,
                'primary_key': request.POST['primary_key'],
                'columns': columns,
                'key_columns': key_columns,
                'fkey_columns': fkey_columns,
                'fk_columns': fk_columns,
                'datasets': datasets,
            }

        return render(request, self.template_name, PARAMETERS)