Ejemplo n.º 1
0
 def post(self, request, *args, **kwargs):
     data = request.data
     # data.update({'creator': request.user.id})
     # data.update({'last_modified_by': request.user.id})
     serializer = self.get_serializer(data=data)
     if serializer.is_valid(raise_exception=True):
         provider = self.queryset.filter(id=data.get('provider')).first()
         if provider:
             try:
                 if provider.name == MONGO:
                     mongo_db_manager = MongoDBManager()
                     db, cache_db = mongo_db_manager.connection_mongo(host=data.get('host'), port=data.get('port'),
                                                                      username=data.get('username'),
                                                                      password=data.get('password'),
                                                                      database=data.get('database'),
                                                                      ssl=data.get('ssl'), user_id=request.user.id)
                     collections = mongo_db_manager.get_all_collections(db=db, cache_db=cache_db)
                     # serializer.save()
                     return responses.ok(data=collections, method=constant.POST,
                                         entity_name='db_provider_connection')
                 else:
                     # TODO: implement another phase
                     pass
             except Exception as err:
                 return responses.bad_request(data=str(err), message_code='CONNECT_ERROR')
         else:
             return responses.bad_request(data='Provider not found', message_code='PROVIDER_NOT_FOUND')
     else:
         return Response(status=status.HTTP_503_SERVICE_UNAVAILABLE, data=None)
Ejemplo n.º 2
0
    def post(self, request, *args, **kwargs):
        data = request.data
        connection_id = kwargs.get("connection_id")
        list_field = data.get("list_field")
        table_name = data.get("table_name")
        connection = DBProviderConnection.objects.filter(
            id=connection_id).first()
        if connection is None:
            return responses.bad_request(
                data=None, message_code="PROVIDER_CONNECTION_NOT_FOUND")

        if connection.provider.name == MONGO:
            mongo_db_manager = MongoDBManager()
            db, cache_db = mongo_db_manager.connection_mongo_by_provider(
                provider_connection=connection)
            collections = mongo_db_manager.get_all_collections(
                db=db, cache_db=cache_db)
            column_mapping = CustomColumnMapping.objects.filter(
                table_name=table_name, connection_id=connection.id).exists()
            if column_mapping is False and table_name not in collections:
                mongo_db_manager.create_new_collection(db, table_name)
            else:
                return responses.bad_request(
                    data=None, message_code="TABLE_NAME_IS_EXISTS")

            for field in list_field:
                try:
                    custom_column = CustomColumnType.objects.get(
                        id=field.get('custom_column'))
                    CustomColumnMapping.objects.create(
                        connection_id=connection.id,
                        table_name=table_name,
                        real_column=field.get("column_name"),
                        custom_column_name=field.get("column_name"),
                        custom_column_id=custom_column.id)
                except Exception as ex:
                    print(ex)
                    continue

        resp = CustomColumnMapping.objects.filter(connection_id=connection.id,
                                                  table_name=table_name)
        serializer = self.get_serializer(resp, many=True)
        return responses.ok(data=serializer.data,
                            method=constant.POST,
                            entity_name="custom_column_mapping")
Ejemplo n.º 3
0
 def get(self, request, *args, **kwargs):
     connection_id = kwargs.get('pk', None)
     try:
         if connection_id:
             provider_connection = self.queryset.get(id=connection_id)
             provider = provider_connection.provider
             if provider:
                 if provider.name == MONGO:
                     mongo_db_manager = MongoDBManager()
                     db, cache_db = mongo_db_manager.connection_mongo_by_provider(
                         provider_connection=provider_connection)
                     data = mongo_db_manager.get_all_collections(db=db, cache_db=cache_db)
                     return responses.ok(data=data, method=constant.POST, entity_name='db_provider_connection')
                 else:
                     # TODO: implement another phase
                     pass
             else:
                 return responses.bad_request(data='Provider not found', message_code='PROVIDER_NOT_FOUND')
         else:
             return responses.bad_request(data=None, message_code='PROVIDER_CONNECTION_ID_EMPTY')
     except Exception as err:
         return responses.not_found(data=None, message_code='PROVIDER_CONNECTION_NOT_FOUND', message_system=err)
Ejemplo n.º 4
0
    def post(self, request, *args, **kwargs):
        try:
            user = request.user
            file_obj = request.FILES['file']
            # url_csv = upload_to_s3("import", file_obj.name, file_obj, user_id=user.id)

            file = file_obj.read().decode('utf-8')
            csv_data = csv.DictReader(StringIO(file))

            connection_id = kwargs.get("connection")
            table_name = kwargs.get("table_name")
            connection = DBProviderConnection.objects.filter(
                id=connection_id).first()
            if connection.provider.name == MONGO:
                mongo_db_manager = MongoDBManager()
                db, cache_db = mongo_db_manager.connection_mongo_by_provider(
                    provider_connection=connection)
                collections = mongo_db_manager.get_all_collections(
                    db=db, cache_db=cache_db)
                if table_name not in collections:
                    mongo_db_manager.create_new_collection(db, table_name)
                else:
                    headers = list(csv_data.fieldnames)
                    try:
                        columns = mongo_db_manager.get_all_keys(
                            db=db, collection=table_name)
                        if columns:
                            for header in headers:
                                if header not in columns:
                                    return responses.bad_request(
                                        data=
                                        f"Column '{header}' is not exists in table {table_name}",
                                        message_code="Column is not exists")

                    except Exception as err:
                        return responses.bad_request(data=str(err),
                                                     message_code=str(err))

                # list_insert = []
                # for row in csv_data:
                #     data = dict(row)
                #     # data["_id"] = str(ObjectId())
                #     list_insert.append(data)
                #
                # print(list_insert)

                file_full_name = file_obj.name.split(".")
                time_stamp = datetime.datetime.now().timestamp()
                file_name = f"{file_full_name[0]}_{str(int(time_stamp))}.{file_full_name[1]}"
                file_name = file_name.replace(" ", "_")
                fs = FileSystemStorage(
                    location=f"{settings.MEDIA_ROOT}/import",
                    base_url=f"{settings.MEDIA_ROOT}/import")
                filename = fs.save(file_name, file_obj)
                uploaded_file_url = fs.url(filename)

                static_dir = f"{settings.MEDIA_ROOT}/import/{filename}"

                import_record = ImportData.objects.create(
                    provider_connection_id=connection.id,
                    username=user.username,
                    table=table_name,
                    file_url=static_dir)
                # process_import_database.delay(import_id=import_record.id)
                return responses.ok(data="waiting import data",
                                    method='post',
                                    entity_name='import_database')
            return responses.bad_request(data=None,
                                         message_code="SQL_PROVIDER_NOT_FOUND")

        except Exception as err:
            return responses.not_found(data=None,
                                       message_code='SQL_FUNCTION_NOT_FOUND',
                                       message_system=err)