Duplicate identifiers in types.gen.ts

Description
I am still seeing these errors in the generated code
SyntaxError: /usr/dgc-playwright/generated/data-class-client/types.gen.ts: Identifier 'DataClassGroupId' has already been declared. (451:12)

  449 |  *
  450 |  */
> 451 | export type DataClassGroupId = string;
      |             ^
  452 |
  453 | /**
  454 |  * The name of a `Data Class`.

   at activity/profileActivities.test.ts:451

    at Object.<anonymous> (/usr/dgc-playwright/generated/data-class-client/index.ts:10:1)
    at Object.<anonymous> (/usr/dgc-playwright/api/clients/clients.ts:6:1)
    at Object.<anonymous> (/usr/dgc-playwright/api/core/auth/auth.ts:2:1)
    at Object.<anonymous> (/usr/dgc-playwright/fixtures/messaging-eventing/meActivitiesFixture.ts:1:1)
    at Object.<anonymous> (/usr/dgc-playwright/tests/activity/profileActivities.test.ts:1:1)

Im my types.gen.ts there are duplicates
export type DataClassDescription = string;

/**
 * The status of a `Data Class`.
 *
 * This attribute allows a `Data Class` to be `ENABLED` or `DISABLED`.
 * An `DISABLED` `Data Class` will never be used as part of the classification process.
 *
 * Possible values:
 * - `ENABLED`
 * - `DISABLED`
 *
 */
export type DataClassStatus = string;

I think this was supposed to be fixed in this ticket - https://github.com/hey-api/openapi-ts/issues/420
OpenAPI specification (optional)
components:
  parameters:
    listOfValuesId:
      name: listOfValuesId
      in: path
      description: |
        The ID of a `List Of Values`.
      required: true
      schema:
        type: string
        format: uuid
    DataClassIdInPath:
      name: dataClassId
      in: path
      description: |
        The ID of a `Data Class`.
      required: true
      schema:
        type: string
        format: uuid
    DataClassGroupIdInPath:
      name: dataClassGroupId
      in: path
      description: |
        The ID of a `Data Class Group`.
      required: true
      schema:
        type: string
        format: uuid
    DataClassGroupId:
      name: dataClassGroupId
      in: query
      description: |
        The ID of a `Data Class Group`.
      required: false
      schema:
        type: string
        format: uuid
    DataClassName:
      name: name
      in: query
      description: |
        The name of a `Data Class`.

        The matching logic is case insensitive and supports partial matches.

        E.g. A search for `EMAIL` matches `Data Class` name `Email Address`

        E.g. A search for `Security` matches `Data Class` name `Social-Security-Number`
      required: false
      schema:
        type: string
    DataClassDescription:
      name: description
      in: query
      description: |
        The description of a `Data Class`.

        The matching logic is case insensitive and supports partial matches.
      required: false
      schema:
        type: string
    DataClassGroupName:
      name: name
      in: query
      description: |
        The name of a `Data Class Group`.

        The matching logic is case insensitive and supports partial matches.

        E.g. A search for `PERSONAL` or a search for `Identi` match `Data Class Group` name 'Personal Identifiable Information'
      required: false
      schema:
        type: string
    DataClassContainsRules:
      name: containsRules
      in: query
      description: |
        Filters the `Data Classes` based on whether or not they contain rules.

        If `containsRules=true` is defined as parameter, only the `Data Classes` containing rules are returned.
        This can be useful to retrieve only the `Data Classes` that can be used for automated classification.
      required: false
      example: true
      schema:
        type: boolean
    DataClassStatus:
      name: status
      in: query
      description: |
        Applies a filter based on the `status` of the `Data Classes`.

        Possible values:
        - `ENABLED`
        - `DISABLED`

        If multiple `status` parameters are provided, the `Data Classes` matching any `status` defined
        as parameter are taken into account (OR logic).
      required: false
      schema:
        type: array
        items:
          type: string
        example:
          - ENABLED
      style: form
      explode: true
    RuleType:
      name: ruleType
      in: query
      required: false
      description: |
        Filter based on the `ruleType` of `Classification Rules` defined inside the `Data Class`.
        Multiple `ruleType` parameters can be provided.
        In this case, the API returns the `DataClasses` containing rules matching any of the defined types (OR logic).

        The following values are currently supported:
        - `REGULAR_EXPRESSION`
        - `LIST_OF_VALUES`
        - `CODE_SET`
        - `LIKE`
        - `GREATER_THAN`
        - `LESS_THAN`
        - `EQUAL`
        - `BETWEEN`
      schema:
        type: array
        items:
          type: string
          example: LIST_OF_VALUES
      style: form
      explode: true
    Offset:
      name: offset
      in: query
      required: false
      description: |
        The index of the first result to retrieve.

        If not set (offset = `0`), results will be retrieved starting from row `0`.
      schema:
        type: integer
        format: int32
        default: 0
    Limit:
      name: limit
      in: query
      required: false
      description: |
        The maximum number of results to retrieve.

        If not set, the default limit  (limit = `50`) will be used. The maximum value for this parameter is
        `1000`.
      schema:
        type: integer
        format: int32
        default: 50
        maximum: 1000
    DataClassView:
      name: view
      in: query
      required: false
      description: |
        The view of the `Data Class` to return.

        Possible values are `basic` or `extended` (case insensitive). The `basic` view does not include the rules, whereas the `extended` view does.
      schema:
        type: string
        default: basic
    Cursor:
      name: cursor
      in: query
      required: false
      description: |
        The cursor pointing to the first resource to be included in the response. This cursor cannot be created and must have been extracted from a response returned by a previous API call.

        If this parameter is missing, the API will return the resources starting from the first resource available (index=0).
      schema:
        type: string
  schemas:
    ListOfValues:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ListOfValuesId'
        valueCount:
          $ref: '#/components/schemas/ValueCount'
        firstValues:
          $ref: '#/components/schemas/FirstValues'
    CodeSet:
      type: object
      description: |
        Represents a `Code Set` asset.
      required:
        - id
      properties:
        id:
          $ref: '#/components/schemas/CodeSetId'
        valueCount:
          $ref: '#/components/schemas/ValueCount'
    DataClass:
      type: object
      required:
        - id
        - name
        - status
        - createdBy
        - createdOn
        - lastModifiedBy
        - lastModifiedOn
      properties:
        id:
          $ref: '#/components/schemas/DataClassId'
        name:
          $ref: '#/components/schemas/DataClassName'
        description:
          $ref: '#/components/schemas/DataClassDescription'
        status:
          $ref: '#/components/schemas/DataClassStatus'
        createdBy:
          $ref: '#/components/schemas/CreatedBy'
        createdOn:
          $ref: '#/components/schemas/CreatedOn'
        lastModifiedBy:
          $ref: '#/components/schemas/LastModifiedBy'
        lastModifiedOn:
          $ref: '#/components/schemas/LastModifiedOn'
        rules:
          $ref: '#/components/schemas/ClassificationRules'
    DataClassGroup:
      type: object
      description: |
        Group of `Data Classes`.
      required:
        - id
        - name
        - dataClasses
      properties:

Configuration
/* eslint-disable no-console */

const defaultConfig = {
  client: 'axios',
  lint: false,
  format: false,
};

const config = [
  {
    name: 'UsageAnalyticsAppUsageClient',
    input: './resources/usage-analytics/usage_1.0.yaml',
    output: './generated/usage-analytics-client/usage',
  },
  {
    name: 'UsageAnalyticsAppUsersClient',
    input: './resources/usage-analytics/users_1.0.yaml',
    output: './generated/usage-analytics-client/users',
  },
  {
    name: 'UsageAnalyticsAppEventsClient',
    input: './resources/usage-analytics/events_1.0.yaml',
    output: './generated/usage-analytics-client/events',
  },
  {
    name: 'ImportAppClient',
    input: './resources/dgc-importer-rest.json',
    output: './generated/dgc-import-client',
  },
  {
    name: 'CoreAppClient',
    input: './resources/dgc-rest.json',
    output: './generated/core-client',
  },
  {
    name: 'CorePrivateAppClient',
    input: './resources/dgc-private-rest.json',
    output: './generated/core-private-client',
  },
  {
    name: 'EdgeAppClient',
    input: './resources/edge-management-api.yaml',
    output: './generated/edge-client',
  },
  {
    name: 'CloudIngestionsAppClient',
    input: './resources/cloud-ingestions-rest.json',
    output: './generated/cloud-ingestions-client',
  },
  {
    name: 'DataClassApiClient',
    input: './resources/data-class-api.yaml',
    output: './generated/data-class-client',
  },
  {
    name: 'DataClassificationAppClient',
    input: './resources/data-classification-rest.json',
    output: './generated/data-classification-client',
  },
  {
    name: 'ProtectApiClient',
    input: './resources/protect-public-api.yaml',
    output: './generated/protect-client',
  },
].map((c) => ({ ...defaultConfig, ...c }));

async function generateAll() {
  const openApiTs = await import('@hey-api/openapi-ts');

  for (const c of config) {
    await openApiTs.createClient(c);
  }
}

generateAll()
  .then(() => console.log('Finished generating'))
  .catch(console.error);

System information (optional)
MacOS
Node 20

I see @costa-collibra. What was fixed were schemas as that was your example in the previous issue, will need to check types. @adsonkrohne Can you share more details about your problem in a new issue please?

@mrlubos
i see things like this is the browser after generating the code with openapi-ts:
`
Compiled with problems:
×
ERROR in src/service-api/services.gen.ts:952:5
TS2300: Duplicate identifier 'data'.
950 |    */
951 |   public static searchUsersUsingPost(

952 |     data: $OpenApiTs["/api/admin/user/search"]["post"]["req"]
|     ^^^^
953 |   ): CancelablePromise<
954 |     | $OpenApiTs["/api/admin/user/search"]["post"]["res"][200]
955 |     | $OpenApiTs["/api/admin/user/search"]["post"]["res"][201]
ERROR in src/service-api/services.gen.ts:957:13
TS2300: Duplicate identifier 'data'.
955 |     | $OpenApiTs["/api/admin/user/search"]["post"]["res"][201]
956 |   > {
957 |     const { data } = data;
|             ^^^^
958 |     return __request(OpenAPI, {
959 |       method: "POST",
960 |       url: "/api/admin/user/search",
ERROR in src/service-api/services.gen.ts:1105:5
TS2300: Duplicate identifier 'data'.
1103 |    */
1104 |   public static loginUsingPost(
1105 |     data: $OpenApiTs["/api/auth/login"]["post"]["req"]
|     ^^^^
1106 |   ): CancelablePromise<
1107 |     | $OpenApiTs["/api/auth/login"]["post"]["res"][200]
1108 |     | $OpenApiTs["/api/auth/login"]["post"]["res"][201]
ERROR in src/service-api/services.gen.ts:1110:24
TS2300: Duplicate identifier 'data'.
1108 |     | $OpenApiTs["/api/auth/login"]["post"]["res"][201]
1109 |   > {
1110 |     const { userAgent, data } = data;
|                        ^^^^
1111 |     return __request(OpenAPI, {
1112 |       method: "POST",
1113 |       url: "/api/auth/login",
`

That sounds like a separate problem, can you open an issue please? And provide your OpenAPI spec + what's getting generated if relevant?

@mrlubos it's basically generating code with "data" variable existing more than once.
Maybe if it would get specific names like userSearchData or similar then there would not see the "Identifier 'x' has already been declared" error.
PS: i think it's the same error, no need for a separate issue.

openapi: '3.0.3'
info:
  title: Collibra Classification - Data Class API
  description: |
    This API provides the ability to manage Data Classes.
  x-audience: public
  version: '0.0.2-unstable'
servers:
  - url: /rest/classification/v1
tags:
  - name: Data Class
    description: Management of `Data Classes`.
  - name: List Of Values
    description: Management of the `Lists of Values` used by `Classification Rules` of type `LIST_OF_VALUE`.
  - name: Data Class Group
    description: Management of `Data Class Groups`.
paths:
  /dataClasses:
    get:
      tags:
        - Data Class
      summary: Find Data Classes
      description: |
        Finds `Data Classes` based on the provided criteria.

        By default, this endpoint returns a `basic` description of the `Data Classes` that does not include the details of the `Classification Rules`.
        To retrieve the extended view of the `Data Classes` that includes the `Classification Rules`, you can pass the `view=extended` parameter.
      operationId: findDataClasses
      parameters:
        - $ref: '#/components/parameters/DataClassStatus'
        - $ref: '#/components/parameters/DataClassContainsRules'
        - $ref: '#/components/parameters/RuleType'
        - $ref: '#/components/parameters/DataClassName'
        - $ref: '#/components/parameters/DataClassDescription'
        - $ref: '#/components/parameters/DataClassGroupId'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/DataClassView'
      responses:
        '200':
          description: |
            `Data Classes` successfully retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClassPagedResponse'
              examples:
                no-results:
                  summary: We couldn't find any data classes
                  value:
                    results: []
                results-with-single-data-class:
                  $ref: '#/components/examples/SingleDataClassAsResults'
                results-with-multiple-data-classes:
                  $ref: '#/components/examples/MultipleDataClassesAsResults'
                results-with-multiple-extended-data-classes:
                  $ref: '#/components/examples/MultipleExtendedDataClassesAsResults'
        '400':
          description: |
            Invalid request to find `Data Classes`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                rule-with-values-invalid-request:
                  $ref: '#/components/examples/RuleWithValuesInvalidRequest'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    post:
      summary: Create a Data Class
      description: |
        Creates a `Data Class`(only `one rule` per data class is supported by this API version)`
      operationId: addDataClass
      tags:
        - Data Class
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddDataClassRequest'
            examples:
              create-data-class-with-name-only:
                summary: Create a Data Class with only a name provided
                value:
                  name: Email Address
              create-data-class-with-rule:
                summary: Create a Data Class containing a rule based on regular expressions
                value:
                  name: Email Address
                  status: DISABLED
                  rules:
                    - type: REGULAR_EXPRESSION
                      regularExpression: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.
                      confidenceThreshold: 50
                      examples:
                        -<EMAIL_ADDRESS>                        -<EMAIL_ADDRESS>              create-data-class-with-multi-values-rule:
                summary: Create a Data Class containing a rule based on a list of values. Accepts maximum of 1000 values. To provide more values, provide them via file instead.
                value:
                  name: Country
                  status: ENABLED
                  rules:
                    - type: LIST_OF_VALUES_INLINE_ARRAY
                      values: ['CountryShort', 'CountryLong', 'CountryShortLong']
                      confidenceThreshold: 70
                      examples:
                        - IT
                        - POLAND
                        - Belgium,BE
              create-data-class-with-reference-to-list-of-values:
                summary: Create a Data Class containing a rule that references an existing list of values
                value:
                  name: Country
                  status: ENABLED
                  rules:
                    - type: LIST_OF_VALUES
                      listOfValues:
                        id: f914145f-4356-4e5d-9fe9-b2d666d5db73
                      confidenceThreshold: 70
                      examples:
                        - IT
                        - POLAND
                        - Belgium,BE
              create-data-class-with-rule-values-as-csv:
                summary: Create a Data Class containing a rule defined as a CSV value
                value:
                  name: Country
                  status: ENABLED
                  rules:
                    - type: LIST_OF_VALUES_INLINE_CSV
                      value: |
                        CountryShort
                        CountryLong
                        CountryShortLong
              create-data-class-with-code-set:
                summary: Create a Data Class containing a rule that references a code set
                value:
                  name: Country
                  status: ENABLED
                  rules:
                    - type: CODE_SET
                      codeSetId: f914145f-4356-4e5d-9fe9-b2d666d5db73
                      confidenceThreshold: 70
                      examples:
                        - IT
                        - POLAND
                        - Belgium,BE
      responses:
        '201':
          description: |
            `Data Class` successfully created.
          headers:
            Location:
              description: Reference to the newly created Data Class
              schema:
                type: string
                format: url
                example: https://hostname.com/dataClasses/2ffbd52a-6324-4337-9176-49ab9c66f6c9
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClass'
              examples:
                data-class-with-rule:
                  $ref: '#/components/examples/ExtendedDataClass'
                data-class-with-name-only:
                  $ref: '#/components/examples/DataClassWithNameOnly'
                create-data-class-with-multi-values-rule:
                  $ref: '#/components/examples/DataClassWithMultipleValuesRule'
                create-data-class-with-codeset-rule:
                  $ref: '#/components/examples/DataClassWithCodeSetRule'
        '400':
          description: |
            Invalid request to create a `Data Class`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                rule-with-values-invalid-request:
                  $ref: '#/components/examples/RuleWithValuesInvalidRequest'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /dataClasses/{dataClassId}:
    parameters:
      - $ref: '#/components/parameters/DataClassIdInPath'
    get:
      tags:
        - Data Class
      summary: Get a Data Class
      description: |
        Get a single `Data Class` by its identifier.
      operationId: getDataClass
      responses:
        '200':
          description: |
            `Data Class` successfully retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClass'
              examples:
                data-class-with-multi-values-rule:
                  $ref: '#/components/examples/DataClassWithMultipleValuesRule'
                data-class-with-code-set-rule:
                  $ref: '#/components/examples/DataClassWithCodeSetRule'
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    patch:
      tags:
        - Data Class
      summary: Update a Data Class
      description: |
        Update attributes of a `Data Class`.

        It is possible to associate a rule to a `Data Class` or modify values of an existing rule however only `one rule` per `Data Class` is supported by this API version.

      operationId: changeDataClass
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeDataClassRequest'
            examples:
              update-data-class-name:
                summary: Modification of the Data Class name
                value:
                  name: Email Address
              update-data-class-status:
                summary: Modification of the Data Class status
                value:
                  status: DISABLED
              update-of-rule:
                summary: Modification of the rule defined inside the Data Class
                value:
                  rules:
                    - type: REGULAR_EXPRESSION
                      regularExpression: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.
                      columnNameFilters: []
                      columnTypeFilters: []
                      allowNullValues: true
                      allowEmptyValues: false
                      confidenceThreshold: 70
                      examples:
                        -<EMAIL_ADDRESS>                        -<EMAIL_ADDRESS>              update-rule-values-inline:
                summary: Modification of the rule based on a list of values. Accepts maximum of 1000 values. To provide more values, provide them via file instead.
                value:
                  rules:
                    - type: LIST_OF_VALUES_INLINE_ARRAY
                      values: ['Country-Short', 'Country-Long', 'Country-Short-Long']
              update-rule-values-reference:
                summary: Modification of the rule based on an existing list of values
                value:
                  rules:
                    - type: LIST_OF_VALUES
                      listOfValues:
                        id: e7e75a00-9492-4115-b534-186303f6688a
              update-rule-values-as-csv:
                summary: Modification of the rule defined as a CSV value
                value:
                  rules:
                    - type: LIST_OF_VALUES_INLINE_CSV
                      value: |
                        Value1
                        Value2
                        Value3
                        Value4
              update-rule-based-on-code-set:
                summary: Modification of the rule based on a code set
                value:
                  rules:
                    - type: CODE_SET
                      codeSetId: e7e75a00-9492-4115-b534-186303f6688a
      responses:
        '200':
          description: |
            `Data Class` successfully changed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClass'
              examples:
                data-class-with-rule:
                  $ref: '#/components/examples/ExtendedDataClass'
                data-class-with-name-only:
                  $ref: '#/components/examples/DataClassWithNameOnly'
                data-class-with-rule-values-updated:
                  $ref: '#/components/examples/DataClassWithMultipleValuesRuleUpdated'
                data-class-with-code-set-rule-updated:
                  $ref: '#/components/examples/DataClassWithCodeSetRuleUpdated'
        '400':
          description: |
            Invalid request to update a `Data Class`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                rule-with-values-invalid-request:
                  $ref: '#/components/examples/RuleWithValuesInvalidRequest'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    delete:
      summary: Delete a Data Class
      description: |
        Delete a `Data Class` by its identifier.
        The `Classification Rules` defined for the `Data Class` and any `Data Class` related `List Of Values` will be deleted,
        and the `Data Class` will be removed from all `Data Class Groups` referencing it.
      tags:
        - Data Class
      operationId: deleteDataClass
      responses:
        '204':
          description: |
            `Data Class` successfully deleted.
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
      security:
        - basicAuth: []
  /dataClasses/merge:
    post:
      summary: Merge Data Classes
      description: |
        Merge one or multiple `Data Classes` into a target `Data Class`.

        A `400` response is returned in the following cases:
        - The `Data Class` defined by `targetDataClass` does not exist.
        - At least one of the `Data Classes` defined by `dataClassesToBeMerged` does not exist.
        - `dataClassesToBeMerged` includes the `Data Class` defined via `targetDataClass`.
      operationId: mergeDataClasses
      tags:
        - Data Class
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeDataClassesRequest'
      responses:
        '200':
          description: |
            `Data Classes` have been merged successfully. The resulting `Data Class` is included in the response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClass'
              examples:
                data-class-with-name-only:
                  $ref: '#/components/examples/DataClassWithNameOnly'
                data-class-with-rule:
                  $ref: '#/components/examples/ExtendedDataClass'
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /listOfValues:
    post:
      tags:
        - List Of Values
      summary: Creates a new List Of Values
      description: |
        Create a new `List Of Values` by providing the values as a JSON object.

        This endpoint can be used to create a new `List Of Values` that contains maximum 1,000 values. To create a `List of Value` that is larger than 1,000 values, the `/listOfValues/upload` endpoint must be used.
      operationId: addListOfValues
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Values'
            examples:
              create-list-of-values:
                $ref: '#/components/examples/ListOfValuesCreationRequest'
      responses:
        '201':
          description: |
            `List Of Values` successfully created.
          headers:
            Location:
              description: Reference to the newly created `List Of Values`
              schema:
                type: string
                format: url
                example: https://hostname.com/listOfValues/2ffbd52a-6324-4337-9176-49ab9c66f6c9
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOfValues'
              examples:
                list-of-value:
                  $ref: '#/components/examples/ListOfValues'
        '400':
          description: |
            Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                too-many-values:
                  $ref: '#/components/examples/TooManyValuesResponse'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /listOfValues/upload:
    post:
      tags:
        - List Of Values
      summary: Creates a new List Of Values from a file
      description: |
        Create a new `List Of Values` from a file.

        This endpoint can be used to create any `List of Values`, regardless of its size.
        However, it must be used to create a `List Of Values` containing more than 1,000 values.

        The file provided to this endpoint must be a text file (`text/plain`) in which each value is defined as a separate line.
        The following characters are supported as valid value separators:
        - Carriage return (aka `CR`  or `\r`)
        - Line feed (aka `LF` or `\n`)
        - The end of line sequence composed of those 2 characters (aka `EOL` or `\r\n`)
      operationId: addListOfValuesFromFile
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
                - fileName
              type: object
              properties:
                fileName:
                  type: string
                  format: binary
                  description: Files containing the values (1 value per line)
      responses:
        '201':
          description: |
            `List Of Values` successfully created.
          headers:
            Location:
              description: Reference to the newly created `List Of Values`
              schema:
                type: string
                format: url
                example: https://hostname.com/listOfValues/2ffbd52a-6324-4337-9176-49ab9c66f6c9
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOfValues'
              examples:
                list-of-value:
                  $ref: '#/components/examples/ListOfValues'
        '400':
          description: |
            Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                too-many-values:
                  $ref: '#/components/examples/TooManyValuesResponse'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /listOfValues/{listOfValuesId}:
    get:
      tags:
        - List Of Values
      summary: Get a List Of Values
      description: |
        Returns a specific `List Of Values`.

        This endpoint only returns a *summary* of the `List Of Values`. This summary includes the following information:
        - The identifier of the list (`id`)
        - The number of values (`valueCount`)
        - The first 1,000 values (`firstValues`).

        To retrieve all the values defined inside a specific `List Of Values`, the following endpoints can be used:
        - `/listOfValues/{listOfValuesId}/values`, which returns the values in a JSON document. This endpoint supports pagination.
        - `/listOfValues/{listOfValuesId}/valuesAsFile`, which returns all the values as a file.
      operationId: getListOfValues
      parameters:
        - $ref: '#/components/parameters/listOfValuesId'
      responses:
        '200':
          description: |
            `List Of Values` successfully retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOfValues'
              examples:
                list-of-value:
                  $ref: '#/components/examples/ListOfValues'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    put:
      tags:
        - List Of Values
      summary: Update a List Of Values
      description: |
        Update an existing `List Of Values` by providing the values as a JSON object.

        You can use this endpoint to update a `List Of Values` that contains maximum 1,000 values.
        To update a `List Of Values` that is larger than 1,000 values, use the `/listOfValues/{listOfValuesId}/upload` endpoint.
      operationId: changeListOfValues
      parameters:
        - $ref: '#/components/parameters/listOfValuesId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Values'
            examples:
              update-list-of-values:
                $ref: '#/components/examples/ListOfValuesCreationRequest'
      responses:
        '200':
          description: |
            The `List Of Values` was successfully updated.
          headers:
            Location:
              description: A reference to the updated `List Of Values`.
              schema:
                type: string
                format: url
                example: https://hostname.com/listOfValues/2ffbd52a-6324-4337-9176-49ab9c66f6c9
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOfValues'
              examples:
                list-of-value:
                  $ref: '#/components/examples/ListOfValues'
        '400':
          description: |
            Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                too-many-values:
                  $ref: '#/components/examples/TooManyValuesResponse'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    delete:
      summary: Delete a List Of Values
      description: |
        Delete a `List Of Values` by its identifier.

        If this `List Of Values` is used in a `Classification Rule`, it cannot be deleted.
      tags:
        - List Of Values
      operationId: deleteListOfValues
      parameters:
        - $ref: '#/components/parameters/listOfValuesId'
      responses:
        '204':
          description: |
            `List Of Values` successfully deleted.
        '400':
          description: |
            Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                list-of-value-in-use:
                  $ref: '#/components/examples/ListOfValuesInUseResponse'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /listOfValues/{listOfValuesId}/values:
    get:
      tags:
        - List Of Values
      summary: Get the values contained inside a List Of Values
      description: |
        Returns the values defined in a given `List Of Values`.
      operationId: getValuesFromListOfValues
      parameters:
        - $ref: '#/components/parameters/listOfValuesId'
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: |
            Values successfully returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValuePagedResponse'
              examples:
                values-with-next-page-available:
                  summary: Values are returned and an additional page is available
                  value:
                    nextCursor: iurwfejlweinwtywkxnctwltcqlyl
                    results:
                      - Value 1
                      - Value 2
                      - Value 3
                      - Value 4
                      - Value 5
                values-with-no-next-page-available:
                  summary: Values are returned and no additional page is available
                  value:
                    results:
                      - Value 1
                      - Value 2
                      - Value 3
                      - Value 4
                      - Value 5
                values-empty:
                  summary: No values are defined in the `List Of Values`
                  value:
                    results: []
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /listOfValues/{listOfValuesId}/valuesAsFile:
    get:
      tags:
        - List Of Values
      summary: Get the values contained in a List Of Values as a file
      description: |
        Returns the values of a given `List Of Values` as a file.

        The file returned by this endpoint is a text file (`text/plain`) in which each value is defined as a separate line.
        The following characters are supported as valid value separators:
        - Carriage return (aka `CR`  or `\r`)
        - Line feed (aka `LF` or `\n`)
        - The end of line sequence composed of those 2 characters (aka `EOL` or `\r\n`)
      operationId: getValuesFromListOfValuesAsFile
      parameters:
        - $ref: '#/components/parameters/listOfValuesId'
      responses:
        '200':
          description: |
            Values file successfully returned.
          content:
            text/plain:
              schema:
                type: string
          headers:
            Content-Disposition:
              schema:
                type: string
                description: Provides a file name to the client.
                example: attachment; filename="f914145f-4356-4e5d-9fe9-b2d666d5db73-values.csv"
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /listOfValues/{listOfValuesId}/upload:
    post:
      tags:
        - List Of Values
      summary: Update an existing List Of Values via file upload
      description: |
        Updates a `List Of Values` from a file.

        This endpoint can be used to update any `List of Values`, regardless of its size.
        However, it must be used for `List Of Values` that contain more than 1,000 values.

        The file provided to this endpoint must be a text file (`text/plain`) in which each value is defined as a separate line.
        The following characters are supported as valid value separators:
          - Carriage return (aka `CR`  or `\r`)
          - Line feed (aka `LF` or `\n`)
          - The end of line sequence composed of those 2 characters (aka `EOL` or `\r\n`)
      operationId: changeListOfValuesFromFile
      parameters:
        - $ref: '#/components/parameters/listOfValuesId'
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
                - fileName
              type: object
              properties:
                fileName:
                  type: string
                  format: binary
                  description: Files containing the values (1 value per line)
      responses:
        '201':
          description: |
            `List Of Values` successfully updated.
          headers:
            Location:
              description: Reference to the updated `List Of Values`
              schema:
                type: string
                format: url
                example: https://hostname.com/listOfValues/2ffbd52a-6324-4337-9176-49ab9c66f6c9
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOfValues'
              examples:
                list-of-value:
                  $ref: '#/components/examples/ListOfValues'
        '400':
          description: |
            Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
              examples:
                standard-invalid-request:
                  $ref: '#/components/examples/DefaultInvalidRequest'
                too-many-values:
                  $ref: '#/components/examples/TooManyValuesResponse'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /dataClassGroups:
    get:
      tags:
        - Data Class Group
      summary: Find Data Class Groups
      description: |
        Finds `Data Class Groups` based on the provided criteria.
      operationId: findDataClassGroups
      parameters:
        - $ref: '#/components/parameters/DataClassGroupName'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: |
            `Data Class Groups` successfully retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClassGroupPagedResponse'
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    post:
      summary: Create a Data Class Group
      description: |
        Creates a `Data Class Group`.
      operationId: addDataClassGroup
      tags:
        - Data Class Group
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddDataClassGroupRequest'
      responses:
        '201':
          description: |
            `Data Class Group` successfully created.
          headers:
            Location:
              description: |
                Reference to the newly created `Data Class Group`.
              schema:
                type: string
                format: url
                example: https://hostname.com/dataClassGroups/2ffbd52a-6324-4337-9176-49ab9c66f6c9
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClassGroup'
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
  /dataClassGroups/{dataClassGroupId}:
    parameters:
      - $ref: '#/components/parameters/DataClassGroupIdInPath'
    get:
      tags:
        - Data Class Group
      summary: Get a Data Class Group
      description: |
        Get a single `Data Class Group` by its identifier.
      operationId: getDataClassGroup
      responses:
        '200':
          description: |
            `Data Class Group` successfully retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClassGroup'
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    patch:
      tags:
        - Data Class Group
      summary: Update a Data Class Group.
      description: |
        Update attributes of a `Data Class Group`.
      operationId: changeDataClassGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeDataClassGroupRequest'
      responses:
        '200':
          description: |
            `Data Class Group` successfully changed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataClassGroup'
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
    delete:
      summary: Delete a Data Class Group
      description: |
        Delete a `Data Class Group` by its identifier.
      tags:
        - Data Class Group
      operationId: deleteDataClassGroup
      responses:
        '204':
          description: |
            `Data Class Group` successfully deleted.
        '400':
          $ref: '#/components/responses/InvalidRequest400'
        '401':
          $ref: '#/components/responses/InvalidRequest401'
        '403':
          $ref: '#/components/responses/InvalidRequest403'
        '404':
          $ref: '#/components/responses/InvalidRequest404'
        '500':
          $ref: '#/components/responses/InvalidRequest500'
      security:
        - basicAuth: []
components:
  parameters:
    listOfValuesId:
      name: listOfValuesId
      in: path
      description: |
        The ID of a `List Of Values`.
      required: true
      schema:
        type: string
        format: uuid
    DataClassIdInPath:
      name: dataClassId
      in: path
      description: |
        The ID of a `Data Class`.
      required: true
      schema:
        type: string
        format: uuid
    DataClassGroupIdInPath:
      name: dataClassGroupId
      in: path
      description: |
        The ID of a `Data Class Group`.
      required: true
      schema:
        type: string
        format: uuid
    DataClassGroupId:
      name: dataClassGroupId
      in: query
      description: |
        The ID of a `Data Class Group`.
      required: false
      schema:
        type: string
        format: uuid
    DataClassName:
      name: name
      in: query
      description: |
        The name of a `Data Class`.

        The matching logic is case insensitive and supports partial matches.

        E.g. A search for `EMAIL` matches `Data Class` name `Email Address`

        E.g. A search for `Security` matches `Data Class` name `Social-Security-Number`
      required: false
      schema:
        type: string
    DataClassDescription:
      name: description
      in: query
      description: |
        The description of a `Data Class`.

        The matching logic is case insensitive and supports partial matches.
      required: false
      schema:
        type: string
    DataClassGroupName:
      name: name
      in: query
      description: |
        The name of a `Data Class Group`.

        The matching logic is case insensitive and supports partial matches.

        E.g. A search for `PERSONAL` or a search for `Identi` match `Data Class Group` name 'Personal Identifiable Information'
      required: false
      schema:
        type: string
    DataClassContainsRules:
      name: containsRules
      in: query
      description: |
        Filters the `Data Classes` based on whether or not they contain rules.

        If `containsRules=true` is defined as parameter, only the `Data Classes` containing rules are returned.
        This can be useful to retrieve only the `Data Classes` that can be used for automated classification.
      required: false
      example: true
      schema:
        type: boolean
    DataClassStatus:
      name: status
      in: query
      description: |
        Applies a filter based on the `status` of the `Data Classes`.

        Possible values:
        - `ENABLED`
        - `DISABLED`

        If multiple `status` parameters are provided, the `Data Classes` matching any `status` defined
        as parameter are taken into account (OR logic).
      required: false
      schema:
        type: array
        items:
          type: string
        example:
          - ENABLED
      style: form
      explode: true
    RuleType:
      name: ruleType
      in: query
      required: false
      description: |
        Filter based on the `ruleType` of `Classification Rules` defined inside the `Data Class`.
        Multiple `ruleType` parameters can be provided.
        In this case, the API returns the `DataClasses` containing rules matching any of the defined types (OR logic).

        The following values are currently supported:
        - `REGULAR_EXPRESSION`
        - `LIST_OF_VALUES`
        - `CODE_SET`
        - `LIKE`
        - `GREATER_THAN`
        - `LESS_THAN`
        - `EQUAL`
        - `BETWEEN`
      schema:
        type: array
        items:
          type: string
          example: LIST_OF_VALUES
      style: form
      explode: true
    Offset:
      name: offset
      in: query
      required: false
      description: |
        The index of the first result to retrieve.

        If not set (offset = `0`), results will be retrieved starting from row `0`.
      schema:
        type: integer
        format: int32
        default: 0
    Limit:
      name: limit
      in: query
      required: false
      description: |
        The maximum number of results to retrieve.

        If not set, the default limit  (limit = `50`) will be used. The maximum value for this parameter is
        `1000`.
      schema:
        type: integer
        format: int32
        default: 50
        maximum: 1000
    DataClassView:
      name: view
      in: query
      required: false
      description: |
        The view of the `Data Class` to return.

        Possible values are `basic` or `extended` (case insensitive). The `basic` view does not include the rules, whereas the `extended` view does.
      schema:
        type: string
        default: basic
    Cursor:
      name: cursor
      in: query
      required: false
      description: |
        The cursor pointing to the first resource to be included in the response. This cursor cannot be created and must have been extracted from a response returned by a previous API call.

        If this parameter is missing, the API will return the resources starting from the first resource available (index=0).
      schema:
        type: string
  schemas:
    ListOfValues:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ListOfValuesId'
        valueCount:
          $ref: '#/components/schemas/ValueCount'
        firstValues:
          $ref: '#/components/schemas/FirstValues'
    CodeSet:
      type: object
      description: |
        Represents a `Code Set` asset.
      required:
        - id
      properties:
        id:
          $ref: '#/components/schemas/CodeSetId'
        valueCount:
          $ref: '#/components/schemas/ValueCount'
    DataClass:
      type: object
      required:
        - id
        - name
        - status
        - createdBy
        - createdOn
        - lastModifiedBy
        - lastModifiedOn
      properties:
        id:
          $ref: '#/components/schemas/DataClassId'
        name:
          $ref: '#/components/schemas/DataClassName'
        description:
          $ref: '#/components/schemas/DataClassDescription'
        status:
          $ref: '#/components/schemas/DataClassStatus'
        createdBy:
          $ref: '#/components/schemas/CreatedBy'
        createdOn:
          $ref: '#/components/schemas/CreatedOn'
        lastModifiedBy:
          $ref: '#/components/schemas/LastModifiedBy'
        lastModifiedOn:
          $ref: '#/components/schemas/LastModifiedOn'
        rules:
          $ref: '#/components/schemas/ClassificationRules'
    DataClassGroup:
      type: object
      description: |
        Group of `Data Classes`.
      required:
        - id
        - name
        - dataClasses
      properties:
        id:
          $ref: '#/components/schemas/DataClassGroupId'
        name:
          $ref: '#/components/schemas/DataClassGroupName'
        dataClasses:
          $ref: '#/components/schemas/DataClassIds'
    AddDataClassRequest:
      type: object
      description: |
        Request to create a `Data Class`. Only the `name` property is mandatory when creating a new `Data Class`.
      required:
        - name
      properties:
        name:
          $ref: '#/components/schemas/DataClassName'
        description:
          $ref: '#/components/schemas/DataClassDescription'
        status:
          $ref: '#/components/schemas/DataClassStatus'
        rules:
          $ref: '#/components/schemas/EditableClassificationRules'
    ChangeDataClassRequest:
      type: object
      description: |
        Request to change a `Data Class`.

        All the attributes are optional.
      properties:
        name:
          $ref: '#/components/schemas/DataClassName'
        description:
          $ref: '#/components/schemas/DataClassDescription'
        status:
          $ref: '#/components/schemas/DataClassStatus'
        rules:
          $ref: '#/components/schemas/EditableClassificationRules'
    MergeDataClassesRequest:
      type: object
      description: |
        Request to merge `Data Classes` with a specific `Data Class`.
      required:
        - targetDataClass
        - dataClassesToBeMerged
      properties:
        targetDataClass:
          $ref: '#/components/schemas/TargetDataClassId'
        dataClassesToBeMerged:
          $ref: '#/components/schemas/ToBeMergedDataClassIds'
    ChangeDataClassGroupRequest:
      type: object
      description: |
        Request to update a `Data Class Group`.

        All the attributes are optional.
      properties:
        name:
          $ref: '#/components/schemas/DataClassGroupName'
        dataClasses:
          $ref: '#/components/schemas/DataClassIds'
    AddDataClassGroupRequest:
      type: object
      description: |
        Request to create a `Data Class Group`.

        Only the `name` property is mandatory. If no data classes are defined, the group is created empty.
      required:
        - name
      properties:
        name:
          $ref: '#/components/schemas/DataClassGroupName'
        dataClasses:
          $ref: '#/components/schemas/DataClassIds'
    EditableClassificationRule:
      description: |
        An `EditableClassificationRule` can be used to create or edit a `ClassificationRule` defined inside
        a `Data Class`.
      oneOf:
        - $ref: '#/components/schemas/SingleValuedClassificationRule'
        - $ref: '#/components/schemas/RegularExpressionBasedClassificationRule'
        - $ref: '#/components/schemas/ListOfValuesBasedClassificationRule'
        - $ref: '#/components/schemas/InlineListOfValuesBasedClassificationRule'
        - $ref: '#/components/schemas/InlineCsvListOfValuesBasedClassificationRule'
        - $ref: '#/components/schemas/BetweenClassificationRule'
        - $ref: '#/components/schemas/CodeSetBasedClassificationRule'
      discriminator:
        propertyName: type
        mapping:
          REGULAR_EXPRESSION: '#/components/schemas/RegularExpressionBasedClassificationRule'
          LIST_OF_VALUES: '#/components/schemas/ListOfValuesBasedClassificationRule'
          LIST_OF_VALUES_INLINE_ARRAY: '#/components/schemas/InlineListOfValuesBasedClassificationRule'
          LIST_OF_VALUES_INLINE_CSV: '#/components/schemas/InlineCsvListOfValuesBasedClassificationRule'
          CODE_SET: '#/components/schemas/CodeSetBasedClassificationRule'
          LIKE: '#/components/schemas/SingleValuedClassificationRule'
          GREATER_THAN: '#/components/schemas/SingleValuedClassificationRule'
          LESS_THAN: '#/components/schemas/SingleValuedClassificationRule'
          EQUAL: '#/components/schemas/SingleValuedClassificationRule'
          BETWEEN: '#/components/schemas/BetweenClassificationRule'
    BaseClassificationRule:
      type: object
      required:
        - type
        - allowNullValues
        - allowEmptyValues
        - confidenceThreshold
      properties:
        type:
          $ref: '#/components/schemas/RuleType'
        columnNameFilters:
          $ref: '#/components/schemas/ColumnNameFilters'
        columnTypeFilters:
          $ref: '#/components/schemas/ColumnTypeFilters'
        allowNullValues:
          $ref: '#/components/schemas/AllowNullValues'
        allowEmptyValues:
          $ref: '#/components/schemas/AllowEmptyValues'
        confidenceThreshold:
          $ref: '#/components/schemas/ConfidenceThreshold'
        examples:
          $ref: '#/components/schemas/Examples'
    ClassificationRule:
      description: |
        A `ClassificationRule` defines a read-only representation of a rule.
      oneOf:
        - $ref: '#/components/schemas/SingleValuedClassificationRule'
        - $ref: '#/components/schemas/RegularExpressionBasedClassificationRule'
        - $ref: '#/components/schemas/ListOfValuesBasedClassificationRule'
        - $ref: '#/components/schemas/BetweenClassificationRule'
        - $ref: '#/components/schemas/CodeSetBasedClassificationRule'
      discriminator:
        propertyName: type
        mapping:
          REGULAR_EXPRESSION: '#/components/schemas/RegularExpressionBasedClassificationRule'
          LIST_OF_VALUES: '#/components/schemas/ListOfValuesBasedClassificationRule'
          CODE_SET: '#/components/schemas/CodeSetBasedClassificationRule'
          LIKE: '#/components/schemas/SingleValuedClassificationRule'
          GREATER_THAN: '#/components/schemas/SingleValuedClassificationRule'
          LESS_THAN: '#/components/schemas/SingleValuedClassificationRule'
          EQUAL: '#/components/schemas/SingleValuedClassificationRule'
          BETWEEN: '#/components/schemas/BetweenClassificationRule'
    SingleValuedClassificationRule:
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          required:
            - value
          properties:
            value:
              $ref: '#/components/schemas/Value'
    RegularExpressionBasedClassificationRule:
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          properties:
            regularExpression:
              $ref: '#/components/schemas/RegularExpression'
    InlineListOfValuesBasedClassificationRule:
      description: |
        `Classification Rule` based on a `List Of Values` defined inline as an array of values.
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          properties:
            values:
              $ref: '#/components/schemas/Values'
    InlineCsvListOfValuesBasedClassificationRule:
      type: object
      description: |
        `Classification Rule` based on a `List Of Values` defined as a single value in CSV format.
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          properties:
            value:
              $ref: '#/components/schemas/ValuesAsCsv'
    ListOfValuesBasedClassificationRule:
      description: |
        `Classification Rule` based on a `List Of Values`.
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          properties:
            listOfValues:
              $ref: '#/components/schemas/ListOfValues'
    BetweenClassificationRule:
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          properties:
            minValueInclusive:
              $ref: '#/components/schemas/Value'
            maxValueInclusive:
              $ref: '#/components/schemas/Value'
    CodeSetBasedClassificationRule:
      allOf:
        - $ref: '#/components/schemas/BaseClassificationRule'
        - type: object
          required:
            - codeSet
          properties:
            codeSet:
              $ref: '#/components/schemas/CodeSet'
    ValuePagedResponse:
      type: object
      properties:
        nextCursor:
          type: string
          description: An opaque cursor that can be used to query the next page of results.
          example: 234iurjfklsefhr2cil3459jf
        results:
          type: array
          description: The list of results.
          items:
            $ref: '#/components/schemas/Value'
    DataClassPagedResponse:
      type: object
      properties:
        results:
          type: array
          description: The list of results.
          items:
            $ref: '#/components/schemas/DataClass'
    DataClassGroupPagedResponse:
      type: object
      properties:
        results:
          type: array
          description: The list of results.
          items:
            $ref: '#/components/schemas/DataClassGroup'
    DataClassName:
      type: string
      description: |
        Name of the `Data Class`.
      example: email
    DataClassDescription:
      type: string
      description: |
        The description of the `Data Class`. The maximum length of this field is set to 10,000 characters.
      example: Email address
    DataClassStatus:
      type: string
      description: |
        The status of a `Data Class`.

        This attribute allows a `Data Class` to be `ENABLED` or `DISABLED`.
        An `DISABLED` `Data Class` will never be used as part of the classification process.

        Possible values:
        - `ENABLED`
        - `DISABLED`
      example: ENABLED
    ListOfValuesId:
      type: string
      format: uuid
      description: |
        Id of a `List Of Values`.
    CodeSetId:
      type: string
      format: uuid
      description: |
        Id of a `Code Set` asset defined.
    DataClassId:
      type: string
      format: uuid
      description: |
        Id of a `Data Class`.
    AssetId:
      type: string
      format: uuid
      description: |
        Id of an `Asset` defined in the Data Intelligence Graph.
    TargetDataClassId:
      type: string
      format: uuid
      description: |
        Id of a `Data Class`. Following the merge operation, only this specific `Data Class` will remain.
    DataClassIds:
      type: array
      description: |
        Ids of the `Data Classes` contained in the `Data Class Group`.
      items:
        $ref: '#/components/schemas/DataClassId'
    ToBeMergedDataClassIds:
      type: array
      description: |
        Ids of the `Data Classes` to be merged. At the end of the merge operation, those `Data Classes` will be deleted.
      items:
        $ref: '#/components/schemas/DataClassId'
      minItems: 1
    EditableClassificationRules:
      type: array
      description: |
        `Classification Rules` to be defined inside the `Data Class`.
      items:
        $ref: '#/components/schemas/EditableClassificationRule'
    ClassificationRules:
      type: array
      description: |
        `Classification Rules` defined for the `Data Class`. Only `one rule` per `Data Class` is currently supported.
      items:
        $ref: '#/components/schemas/ClassificationRule'
    RuleType:
      type: string
      example: REGULAR_EXPRESSION
      description: |
        RuleType used by the rule.

        The following values are currently supported:
          - `REGULAR_EXPRESSION`
          - `LIST_OF_VALUES`
          - `CODE_SET`
          - `LIKE`
          - `GREATER_THAN`
          - `LESS_THAN`
          - `EQUAL`
          - `BETWEEN`

        When **creating** or **updating** a `Classification Rule`, the following values are also supported:
          - `LIST_OF_VALUES_INLINE_ARRAY`
          - `LIST_OF_VALUES_INLINE_CSV`

        These additional types are automatically converted into `LIST_OF_VALUES` and will be retrieved as such with GET endpoints.
    RegularExpression:
      type: string
      description: |
        A regular expression. The maximum length of this field is set to 10,000 characters.
      example: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.
    Value:
      type: string
      description: |
        Value used by the `Classification Rule`.
      example: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.
    Values:
      type: array
      items:
        type: string
      maxItems: 1000
      description: |
        Values defined as an array of strings.

        This array has a maximum size of 1,000 values.
        To provide more than 1,000 values, provide them via file instead.
      example:
        - BE
        - FR
        - NL
    FirstValues:
      type: array
      items:
        type: string
      maxItems: 1000
      description: |
        Values defined as an array of strings. Contains the first 1,000 values.
      example:
        - BE
        - FR
        - NL
    ValuesAsCsv:
      type: string
      description: |
        Values defined as a CSV-formatted string in which each value is defined one a separate line.

        The following characters are supported as valid value separators:
        - Carriage return (aka `CR`  or `\r`)
        - Line feed (aka `LF` or `\n`)
        - The end of line sequence composed of those 2 characters (aka `EOL` or `\r\n`)
      example: |
        value1
        value2
        value3
        value4
    ColumnNameFilters:
      type: array
      items:
        type: string
      default: []
      example:
        - email
        - e-mail
      description: |
        The `Data Class` is only considered if the column name is a full or partial match with the value of this property. .

        It is not case sensitive and it is using a text match (not a regular expression).

        Any match will make the `Data Class` considered.
    ColumnTypeFilters:
      type: array
      items:
        type: string
      default: []
      description: |
        The `Data Class` can only be considered if the column technical data type is part of the values defined for this property.

        Any match will make the `Data Class` considered.
      example:
        - VARCHAR
        - INTEGER
    AllowNullValues:
      type: boolean
      description: |
        If the value is set to `true`, null values are considered when calculating the confidence level of a matching `Data Class`.

        If the value is set to `false`, only the non-null values are considered by the classification process and are taken into account when calculating the confidence level of a matching `Data Class`.
      default: false
    AllowEmptyValues:
      type: boolean
      description: |
        If the value is set to `true`, empty values are considered by the classification process and are taken into account when calculating the confidence level of a matching `Data Class`.

        If the value is set to `false`, only the non-empty values are considered by the classification process and are taken into account when calculating the confidence level of a matching `Data Class`.
      default: false
    ConfidenceThreshold:
      type: integer
      description: The Data Class is only considered in the result if this confidence threshold is reached.
      default: 0
      minimum: 0
      maximum: 100
    ValueCount:
      type: integer
      description: The number of values defined in the rule
      default: 0
      minimum: 0
    Examples:
      type: array
      default: []
      items:
        type: string
      description: |
        Examples of values that match the Classification Rule.
      example:
        -<EMAIL_ADDRESS>        -<EMAIL_ADDRESS>    DataClassGroupId:
      type: string
      format: uuid
      description: |
        Id of the `Data Class Group`.
    DataClassGroupName:
      type: string
      description: |
        Name of the `Data Class Group`.
      example: PII Data Classes
    CreatedBy:
      type: string
      description: The id of the user that created this resource.
      format: uuid
      example: 4d250cc5-e583-4640-9874-b93d82c7a6cb
    CreatedOn:
      type: integer
      description: The timestamp (in UTC time standard) of the creation of this resource.
      format: int64
      example:<PHONE_NUMBER>320
    LastModifiedBy:
      type: string
      description: The id of the user who modified this resource the last time.
      format: uuid
      example: a073ff90-e7bc-4b35-ba90-c4d475f642fe
    LastModifiedOn:
      type: integer
      description: The timestamp (in UTC time standard) of the last modification of this resource.
      format: int64
      example:<PHONE_NUMBER>163
    StandardErrorResponse:
      type: object
      properties:
        statusCode:
          type: integer
          description: An HTTP response code.
          example: 400
        titleMessage:
          type: string
          description: A translated message.
          example: Invalid request
        helpMessage:
          type: string
          description: A translated message.
          example: Do this or do that
        userMessage:
          type: string
          description: A translated message.
          example: This has happened.
        errorCode:
          type: string
          description: An error code. This error code is not translated.
          example: dataClassWithSameNameAlreadyExists
  responses:
    InvalidRequest400:
      description: The request is not valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StandardErrorResponse'
          example:
            statusCode: 400
            titleMessage: 'Invalid Request'
            helpMessage: 'Please check the application logs for more information.'
            userMessage: 'The request is not valid.'
            errorCode: 'invalidRequest'
    InvalidRequest500:
      description: An unexpected error occurred.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StandardErrorResponse'
          example:
            statusCode: 500
            titleMessage: 'Unexpected error'
            helpMessage: 'Please check the application logs for more information.'
            userMessage: 'Something went wrong.'
            errorCode: 'unexpectedError'
    InvalidRequest401:
      description: The client is not authenticated.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StandardErrorResponse'
          example:
            statusCode: 401
            titleMessage: 'Unauthorized'
            helpMessage: 'Please check the application logs for more information.'
            userMessage: 'Failed to authenticate request through basic credentials'
            errorCode: 'authenticationFailed'
    InvalidRequest403:
      description: The user lacks permissions.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StandardErrorResponse'
          example:
            statusCode: 403
            titleMessage: 'Forbidden'
            helpMessage: 'Please check the application logs for more information.'
            userMessage: 'The user does not have the required permissions.'
            errorCode: 'authorizationFailed'
    InvalidRequest404:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StandardErrorResponse'
          example:
            statusCode: 404
            titleMessage: 'Not Found'
            helpMessage: 'Please check the application logs for more information.'
            userMessage: 'The resource could not be found'
            errorCode: 'Not found'
  examples:
    DataClassWithNameOnly:
      summary: Data Class that does not include a rule
      value:
        id: 4fd664f5-a987-4769-ac0a-50d33e081a03
        name: Email Address
        status: ENABLED
        rules: []
        createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
        createdOn:<PHONE_NUMBER>320
        lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
        lastModifiedOn:<PHONE_NUMBER>320
    BasicDataClass:
      summary: Basic representation of a Data Class.
      description: |
        This representation does not include the `Classification Rules` defined for the `Data Class`.
      value:
        id: 4fd664f5-a987-4769-ac0a-50d33e081a03
        name: Email Address
        status: ENABLED
        createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
        createdOn:<PHONE_NUMBER>320
        lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
        lastModifiedOn:<PHONE_NUMBER>320
    ExtendedDataClass:
      summary: Extended representation of a Data Class.
      description: |
        This representation does include the `Classification Rules` defined for the `Data Class`.
        In this case, the `Data Class` defines a single rule of type `REGULAR_EXPRESSION`.
      value:
        id: 4fd664f5-a987-4769-ac0a-50d33e081a03
        name: Email Address
        status: ENABLED
        rules:
          - type: REGULAR_EXPRESSION
            regularExpression: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.
            columnNameFilters: []
            columnTypeFilters: []
            allowNullValues: false
            allowEmptyValues: false
            confidenceThreshold: 50
            examples:
              -<EMAIL_ADDRESS>              -<EMAIL_ADDRESS>        createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
        createdOn:<PHONE_NUMBER>320
        lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
        lastModifiedOn:<PHONE_NUMBER>320
    DataClassWithCodeSetRule:
      summary: Data Class including a rule based on code set
      description: |
        In this example, the `Classification Rule` is of type `CODE_SET` and
        includes a reference to a `Code Set` asset.
      value:
        id: c20f183c-ca24-441c-ad96-aee5566ff2e9
        name: Country
        status: ENABLED
        rules:
          - type: CODE_SET
            codeSet:
              id: f914145f-4356-4e5d-9fe9-b2d666d5db73
              valueCount: 3
            columnNameFilters: []
            columnTypeFilters: []
            allowNullValues: false
            allowEmptyValues: false
            confidenceThreshold: 50
            examples:
              - IT
              - Poland
              - Belgium,BE
        createdBy: 078c598b-229b-4cd1-9802-5a5f2ee68dbd
        createdOn:<PHONE_NUMBER>002
        lastModifiedBy: 078c598b-229b-4cd1-9802-5a5f2ee68dbd
        lastModifiedOn:<PHONE_NUMBER>002
    DataClassWithMultipleValuesRule:
      summary: Data Class including a rule based on a list of values
      description: |
        In this example, the `Classification Rule` is of type `LIST_OF_VALUES` and
        includes a reference to the `List Of Values`, the first 100 values, and the count of values.
      value:
        id: c20f183c-ca24-441c-ad96-aee5566ff2e9
        name: Country
        status: ENABLED
        rules:
          - type: LIST_OF_VALUES
            listOfValues:
              id: f914145f-4356-4e5d-9fe9-b2d666d5db73
              valueCount: 3
              firstValues:
                - CountryShort
                - CountryLong
                - CountryShortLong
            columnNameFilters: []
            columnTypeFilters: []
            allowNullValues: false
            allowEmptyValues: false
            confidenceThreshold: 50
            examples:
              - IT
              - Poland
              - Belgium,BE
        createdBy: 078c598b-229b-4cd1-9802-5a5f2ee68dbd
        createdOn:<PHONE_NUMBER>002
        lastModifiedBy: 078c598b-229b-4cd1-9802-5a5f2ee68dbd
        lastModifiedOn:<PHONE_NUMBER>002
    SingleDataClassAsResults:
      summary: Only a single Data Class is returned.
      description: |
        In this example, a single `Data Class` is returned.
        The `Classification Rules` defined for this `Data Class` are not returned via this endpoint.
      value:
        results:
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeeb
            name: Email Address
            status: ENABLED
            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
    MultipleDataClassesAsResults:
      summary: Multiple Data Classes are returned.
      description: |
        In this example, multiple `Data Classes` are returned.
        The `Classification Rules` defined for this `Data Class` are not returned via this endpoint since the `basic` view has been requested.
      value:
        results:
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeeb
            name: Email Address
            status: ENABLED
            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeec
            name: IBAN
            status: ENABLED
            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeed
            name: Country Codes
            status: ENABLED
            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
    MultipleExtendedDataClassesAsResults:
      summary: Multiple Extended Data Classes are returned.
      description: |
        In this example, multiple `Data Classes` are returned.
        The `Classification Rules` defined for this `Data Class` are returned via this endpoint since the `view=extended` parameter has been provided.
      value:
        results:
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeeb
            name: Email Address
            status: ENABLED
            rules:
              - type: REGULAR_EXPRESSION
                regularExpression: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.
                confidenceThreshold: 50
                examples:
                  -<EMAIL_ADDRESS>                  -<EMAIL_ADDRESS>            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeec
            name: IBAN
            status: ENABLED
            rules:
              - type: REGULAR_EXPRESSION
                regularExpression: /[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}/.
                confidenceThreshold: 50
                examples:
                  - DE89 3704 0044 0532 0130 00
                  - AT61 1904 3002 3457 3201
                  - FR14 2004 1010 0505 0001 3
            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
          - id: 1de748bc-a0b2-4d13-9c99-7225419edeed
            name: Country Codes
            status: ENABLED
            rules:
              - type: LIST_OF_VALUES
                listOfValues:
                  id: f914145f-4356-4e5d-9fe9-b2d666d5db73
                  valueCount: 3
                  firstValues:
                    - IT
                    - BE
                    - FR
                columnNameFilters: []
                columnTypeFilters: []
                allowNullValues: false
                allowEmptyValues: false
                confidenceThreshold: 50
                examples:
                  - IT
                  - BE
                  - FR
            createdBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            createdOn:<PHONE_NUMBER>320
            lastModifiedBy: c4391a65-38ba-4b83-97fe-218811bf1b18
            lastModifiedOn:<PHONE_NUMBER>320
    DataClassWithMultipleValuesRuleUpdated:
      summary: Data Class including a rule based on a list of values
      value:
        id: c20f183c-ca24-441c-ad96-aee5566ff2e9
        name: Country
        status: ENABLED
        rules:
          - type: LIST_OF_VALUES
            listOfValues:
              id: f914145f-4356-4e5d-9fe9-b2d666d5db73
              valueCount: 3
              firstValues:
                - CountryShort
                - CountryLong
                - CountryShortLong
            columnNameFilters: []
            columnTypeFilters: []
            allowNullValues: false
            allowEmptyValues: false
            confidenceThreshold: 50
            examples:
              - IT
              - Poland
              - Belgium
        createdBy: 078c598b-229b-4cd1-9802-5a5f2ee68dbd
        createdOn:<PHONE_NUMBER>002
        lastModifiedBy: 935935fa-66b8-4e94-85e4-95e0a53b893d
        lastModifiedOn:<PHONE_NUMBER>183
    DataClassWithCodeSetRuleUpdated:
      summary: Update a Data Class containing a rule that references a code set
      value:
        name: Country
        status: ENABLED
        rules:
          - type: CODE_SET
            codeSet:
              id: f914145f-4356-4e5d-9fe9-b2d666d5db73
              valueCount: 3
            columnNameFilters: []
            columnTypeFilters: []
            allowNullValues: false
            allowEmptyValues: false
            confidenceThreshold: 50
            examples:
              - IT
              - Poland
              - Belgium,BE
        createdBy: 078c598b-229b-4cd1-9802-5a5f2ee68dbd
        createdOn:<PHONE_NUMBER>002
        lastModifiedBy: 935935fa-66b8-4e94-85e4-95e0a53b893d
        lastModifiedOn:<PHONE_NUMBER>183
    DefaultInvalidRequest:
      summary: Default invalid request
      value:
        statusCode: 400
        titleMessage: 'Invalid Request'
        helpMessage: 'Check the application logs for more information.'
        userMessage: 'The request is not valid.'
        errorCode: 'invalidRequest'
    RuleWithValuesInvalidRequest:
      summary: Rule with values invalid request
      value:
        statusCode: 400
        titleMessage: 'Max number of inline values exceeded'
        helpMessage: 'The total number of inline values exceeds the maximum allowed number of 1,000. To create a rule with more than 1,000 values, upload a CSV file through the dedicated REST API.'
        userMessage: 'The request contains a rule with more than the maximum allowed number of values.'
        errorCode: 'invalidRequest'
    TooManyValuesResponse:
      summary: Too many values in `List Of Value`
      value:
        statusCode: 400
        titleMessage: 'Max number of values exceeded'
        helpMessage: 'The total number of values in the list of values exceeds the maximum allowed number of 1,000. To create a rule with more than 1,000 values, upload a file through dedicated REST API.'
        userMessage: 'The number of values exceeds the maximum allowed number of 1,000.'
        errorCode: 'tooManyValues'
    ListOfValuesCreationRequest:
      summary: Request to create a List Of Values
      value:
        - Value 1
        - Value 2
        - Value 3
        - Value 4
        - Value 5
    ListOfValues:
      summary: List Of Values
      value:
        id: f914145f-4356-4e5d-9fe9-b2d666d5db73
        valueCount: 5
        firstValues:
          - Value 1
          - Value 2
          - Value 3
          - Value 4
          - Value 5
    ListOfValuesInUseResponse:
      summary: The `List Of Values` cannot be deleted since it is used in a `Classification Rule`
      value:
        statusCode: 400
        titleMessage: 'List of Value in use'
        helpMessage: 'The list of value cannot be deleted since it is used by a classification rule.'
        errorCode: 'listOfValueInUse'
  securitySchemes:
    basicAuth:
      description: The APIs require Basic HTTP authentication.
      type: http
      scheme: basic

@mrlubos do you have everything you need from this spec to replicate the issue?

Totally @costa-collibra, just didn't get around to it. Are you able to use any of the previous versions or is this a problem everywhere?

@mrlubos what I can do is leave this client using the old library if its going to take a while to fix I will do this.
If you have plans to fix in the next couple of days i will hold onto my pr a little longer and merge it with the updated library fix.
It really doesn't matter to me, its whatever you've are comfortable doing and where it lies

Can't currently promise this will be fixed this week, but will try

@mrlubos absolutely fine, on that basis I will keep this client using the old library, and when i see this bug is fixed Il create a new pr to migrate the last client over to the new.

@costa-collibra How does the previous package work? Does it override types?

@mrlubos great question, im not sure, is there anything i can send you from the generated code created by of the old library for this client?

No need, I could replicate it myself, but didn't want to bother haha. I think it used to simply override types when it was generating one file per export, just curious

@mrlubos ok, well if you need any files I already have them ready to go should you change your mind :)

@costa-collibra only if you can have a look and confirm whether types are correctly generated in previous package or simply overrode and one of them is thus incorrect

@mrlubos
export type { DataClass } from './models/DataClass';
export type { DataClassContainsRules } from './models/DataClassContainsRules';
export type { DataClassDescription } from './models/DataClassDescription';
export type { DataClassDescription } from './models/DataClassDescription';
export type { DataClassGroup } from './models/DataClassGroup';
export type { DataClassGroupId } from './models/DataClassGroupId';
export type { DataClassGroupId } from './models/DataClassGroupId';
export type { DataClassGroupIdInPath } from './models/DataClassGroupIdInPath';
export type { DataClassGroupName } from './models/DataClassGroupName';
export type { DataClassGroupName } from './models/DataClassGroupName';
export type { DataClassGroupPagedResponse } from './models/DataClassGroupPagedResponse';
export type { DataClassId } from './models/DataClassId';
export type { DataClassIdInPath } from './models/DataClassIdInPath';
export type { DataClassIds } from './models/DataClassIds';
export type { DataClassName } from './models/DataClassName';
export type { DataClassName } from './models/DataClassName';
export type { DataClassPagedResponse } from './models/DataClassPagedResponse';
export type { DataClassStatus } from './models/DataClassStatus';
export type { DataClassStatus } from './models/DataClassStatus';
export type { DataClassView } from './models/DataClassView';
export type { EditableClassificationRule } from './models/EditableClassificationRule';
export type { EditableClassificationRules } from './models/EditableClassificationRules';
export type { Examples } from './models/Examples';
export type { FirstValues } from './models/FirstValues';

i can duplicates here but it doesnt cause any issues running the code, this is in the index.ts

@costa-collibra I am going to have this fixed for you in the next release. I tested it with the spec file you provided and it passes. I applied a quick and dirty hack to prefix parameter names under the assumption that people commonly don't import these types directly in their applications and therefore won't be breaking their code. Ideal solution would be to properly deduplicate exported types, but that's a way bigger architectural change that would need to happen


Update follow_me_example to use MAVSDK v2

Changes

Replace direction = Config.FollowDirection.BEHIND with follow_angle_deg = 0 in follow_me_example.py
Add new required args to follow_me Config()

History

[2020-08-16] MAVSDK-Python - follow_me_example.py added (commit)
[2022-06-30] MAVSDK-Proto - FollowDirection enum and arg removed (https://github.com/mavlink/MAVSDK-Proto/pull/287#issuecomment-1132930474)
[2024-01-27] MAVSDK-Python - Config.FollowDirection enum removed (commit)

Thanks a lot! Can you check CI?

Thanks for the quick review! CI should pass now. I haven't actually gotten this new "follow angle" working yet in my SITL sim (I'm setting TargetLocation periodically based on the latest position of a leader node) but the updated example here should now include valid API calls.


[core-http] Add more support for proxy configurations

We currently support basic authentication as one form of proxy auth.
Other config options such as cert/key, etc. can be supported as well.
Current PR addresses changes required for this.

Please hold off on merging this PR until we release the current version of core-http next week

This enhancement can be merged in after the Atom API feature is in, as this likely requires more testing.

@xirzec core v2 node https client is using HttpsProxyAgent which has different settings. I wonder whether we should merge this into core-http.

@xirzec core v2 node https client is using HttpsProxyAgent which has different settings. I wonder whether we should merge this into core-http.

IIRC moving to https-proxy-agent was pretty straightforward. I don't think it'd take you much to swap out tunnel

my original concern was that the new options we added would not be available in https-proxy-agent but it turns out not to be the case. They are supported in HttpsProxyAgentOptions.
It looks that localAddress should be available via the inheritance: HttpsProxyAgentOptions -> net.NetConnectOpts -> TcpNetConnectOpts -> TcpSocketConnectOpts.  However I am getting an error
Type '{ host: string; port: number; headers: RawHttpHeaders; ca: Buffer[] | undefined; cert: Buffer | undefined; key: Buffer | undefined; servername: string | undefined; localAddress: string | undefined; }' is not assignable to type 'HttpsProxyAgentOptions'.
  Object literal may only specify known properties, and 'localAddress' does not exist in type 'HttpsProxyAgentOptions'.

will dig deeper

We should probably remove localAddress from core-http too since it is not going to be in core v2. thoughts? @xirzec @ramya-rao-a

It looks that localAddress should be available via the inheritance: HttpsProxyAgentOptions -> net.NetConnectOpts -> TcpNetConnectOpts -> TcpSocketConnectOpts. However I am getting an error

it's not available in IpcSocketConnectOpts, which is one of the two union types that HttpsProxyAgentOptions extends.

@jeremymeng Let's log a new issue with your findings and close this PR. We can revisit the issue in this semester.

This is almost ready if we decide to remove localAddress.  Logged #13945.

Closing for now until we decide on what to do in #13945


opentelekomcloud.cloud.vpc_peering is not working with router names

Hello,
according to the doc the module should work with router names (local and remote):
- local_router
        Name or ID of the local router.
        [Default: (null)]
        type: str

Also in the example a router name is used
- opentelekomcloud.cloud.vpc_peering:
    name: "peering1"
    local_router: "local-router"
    local_project_id: "959db9b6017d4a1fa1c6fd17b6820f55"
    remote_router: "peer-router"
    remote_project_id: "959db9b6017d4a1fa1c6fd17b6820f55"

But if you use a router  name you get the following error:
    },
    "msg": "Invalid input for accept_vpc_info. Reason: 'kunde1-VPC' is not a valid UUID.: Client Error for url: https://vpc.eu-ch2.sc.otc.t-systems.com/v2.0/vpc/peerings, Invalid input for accept_vpc_info. Reason: 'kunde1-VPC' is not a valid UUID."
}

Regards
Uli

hi! problem was caused by some changes in opensatack, now it is fixed


Use conjugate priors in Normal to simplify hyperparameter inference and reduce the grid dimensionality

Naive question: isn't the Normal already in conjugate, Gaussian inverse Gamma form?

Srinivas had an idea for specifying the Normal model differently so that it's still conjugate, but we only have to infer 3 hyperparameters in transition_hyperparameters instead of 4. @srvasude could you summarize what it was?

Currently the hyperprior isn't conjugate. I'm considering (will need to work out the math for this) of using a partially conjugate hyperprior to the prior parameters: the mean and variance for the mean prior and for the scale parameter of the variance prior. The shape parameter of the inverse gamma/gamma would still need to be a grid prior, so the thought would be maybe you only need to grid on that, and can sample exactly from everything else.


[release-1.14] [tf] Consistent namespace creation

Manual cherrypick required.
#38969 failed to apply on top of branch "release-1.14":
Applying: Consistent namespace creation
Using index info to reconstruct a base tree...
M	pkg/test/framework/components/namespace/kube.go
Falling back to patching base and 3-way merge...
Auto-merging pkg/test/framework/components/namespace/kube.go
CONFLICT (content): Merge conflict in pkg/test/framework/components/namespace/kube.go
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Consistent namespace creation
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

resolved by https://github.com/istio/istio/pull/40526


Update NLTK to patch CVE-2024-39705

/cherrypick release

/cherrypick release

CI has been failing since this was merged:
#12 86.80
#12 86.80   RuntimeError
#12 86.80
#12 86.80   Unable to find installation candidates for nltk (3.8.2)
#12 86.80
#12 86.80   at /usr/local/lib/python3.11/site-packages/poetry/installation/chooser.py:74 in choose_for
#12 86.81        70│
#12 86.81        71│             links.append(link)
#12 86.81        72│
#12 86.81        73│         if not links:
#12 86.81     →  74│             raise RuntimeError(f"Unable to find installation candidates for {package}")
#12 86.81        75│
#12 86.81        76│         # Get the best link
#12 86.81        77│         chosen = max(links, key=lambda link: self._sort_key(package, link))
#12 86.81        78│
#12 86.81
#12 86.81 Cannot install nltk.

This is due to nltk 3.8.2 being deleted from pypi:
https://pypi.org/project/nltk/#history
See https://github.com/nltk/nltk/issues/3301 for more context
and https://github.com/opendatahub-io/caikit-tgis-serving/pull/346 for a fix


toggle the logging from command line

toggle logging with debugging flags

See AL_Core/#79 for more discussion on this idea.