nidus-sync/label-studio/import_tasks.go

79 lines
2.1 KiB
Go
Raw Normal View History

package labelstudio
import (
"encoding/json"
"fmt"
"net/http"
)
// TaskImportResponse represents the response from the import tasks endpoint
type TaskImportResponse struct {
// Common fields that might be returned
TaskCount int `json:"task_count,omitempty"`
Annotation map[string]interface{} `json:"annotation,omitempty"`
Task map[string]interface{} `json:"task,omitempty"`
// For handling any other fields in the response
AdditionalProperties map[string]interface{} `json:"-"`
}
// UnmarshalJSON custom unmarshaler for TaskImportResponse to capture all fields
func (r *TaskImportResponse) UnmarshalJSON(data []byte) error {
// First unmarshal the known fields
type Alias TaskImportResponse
aux := &struct {
*Alias
}{
Alias: (*Alias)(r),
}
if err := json.Unmarshal(data, &aux); err != nil {
return err
}
// Then capture any additional fields
var rawMap map[string]interface{}
if err := json.Unmarshal(data, &rawMap); err != nil {
return err
}
r.AdditionalProperties = make(map[string]interface{})
for k, v := range rawMap {
// Skip fields we already processed
if k != "task_count" && k != "annotation" && k != "task" {
r.AdditionalProperties[k] = v
}
}
return nil
}
// ImportTasks imports tasks into a Label Studio project
// tasks parameter can be any data structure that can be marshalled to JSON
func (c *Client) ImportTasks(projectID int, tasks interface{}) (*TaskImportResponse, error) {
// Marshal the tasks to JSON
taskJSON, err := json.Marshal(tasks)
if err != nil {
return nil, fmt.Errorf("failed to marshal tasks: %w", err)
}
path := fmt.Sprintf("/api/projects/%d/import", projectID)
resp, err := c.makeRequest("POST", path, taskJSON)
if err != nil {
return nil, fmt.Errorf("Failed to POST %s: %v", path, err)
}
defer resp.Body.Close()
// Check for successful response
if resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusOK {
}
// Parse response
var response TaskImportResponse
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
return nil, fmt.Errorf("failed to parse response: %w", err)
}
return &response, nil
}