Skip to content

Commit

Permalink
feat: support for fields (#151)
Browse files Browse the repository at this point in the history
Signed-off-by: OmAxiani0 <[email protected]>
  • Loading branch information
OmAximani0 authored Mar 7, 2024
1 parent 627bcb6 commit 09d8f49
Show file tree
Hide file tree
Showing 8 changed files with 452 additions and 0 deletions.
2 changes: 2 additions & 0 deletions crowdin_api/api_resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from .bundles.resource import BundlesResource
from .dictionaries.resource import DictionariesResource
from .distributions.resource import DistributionsResource
from .fields.resource import FieldsResource
from .glossaries.resource import GlossariesResource
from .groups.resource import GroupsResource
from .labels.resource import LabelsResource
Expand Down Expand Up @@ -31,6 +32,7 @@
"BundlesResource",
"DictionariesResource",
"DistributionsResource",
"FieldsResource",
"GlossariesResource",
"GroupsResource",
"LabelsResource",
Expand Down
1 change: 1 addition & 0 deletions crowdin_api/api_resources/fields/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__pdoc__ = {'tests': False}
50 changes: 50 additions & 0 deletions crowdin_api/api_resources/fields/enums.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from enum import Enum


class FieldEntity(Enum):
PROJECT = "project"
USER = "user"
TASK = "task"
FILE = "file"
TRANSLATION = "translation"
STRING = "string"


class FieldType(Enum):
CHECKBOX = "checkbox"
RADIOBUTTONS = "radiobuttons"
DATE = "date"
DATETIME = "datetime"
NUMBER = "number"
LABELS = "labels"
SELECT = "select"
MULTISELECT = "multiselect"
TEXT = "text"
TEXTAREA = "textarea"
URL = "url"


class FieldPlace(Enum):
PROJECT_CREATE_MODAL = "projectCreateModal"
PROJECT_HEADER = "projectHeader"
PROJECT_DETAILS = "projectDetails"
PROJECT_CROWDSOURCE_DETAILS = "projectCrowdsourceDetails"
PROJECT_SETTINGS = "projectSettings"
PROJECT_TASK_EDIT_CREATE = "projectTaskEditCreate"
PROJECT_TASK_DETAILS = "projectTaskDetails"
FILE_DETAILS = "fileDetails"
FILE_SETTINGS = "fileSettings"
USER_EDIT_MODAL = "userEditModal"
USER_DETAILS = "userDetails"
USER_POPOVER = "userPopover"
STRING_EDIT_MODAL = "stringEditModal"
STRING_DETAILS = "stringDetails"
TRANSLATION_UNDER_CONTENT = "translationUnderContent"


class FieldOperations(Enum):
REPLACE = "replace"


class FieldsPatchPath(Enum):
NAME = "/name"
113 changes: 113 additions & 0 deletions crowdin_api/api_resources/fields/resource.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
from typing import Optional, Iterable, Union

from crowdin_api.api_resources.abstract.resources import BaseResource
from crowdin_api.api_resources.fields.enums import FieldEntity, FieldType
from crowdin_api.api_resources.fields.types import (
ListFieldConfig,
NumberFieldConfig,
OtherFieldConfig,
FieldPatchRequest,
)


class FieldsResource(BaseResource):
"""
Resource for Fields.
Link to documentation:
https://developer.crowdin.com/enterprise/api/v2/#tag/Fields
"""

def get_fields_path(self, fieldId: Optional[int] = None):
if fieldId is None:
return "fields"
return f"fields/{fieldId}"

def list_fields(
self,
search: Optional[str] = None,
entity: Optional[FieldEntity] = None,
type: Optional[FieldType] = None,
limit: Optional[int] = None,
offset: Optional[int] = None,
):
"""
List Fields
Link to documentation:
https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.getMany
"""
params = {"search": search, "entity": entity, "type": type}
params.update(self.get_page_params(limit=limit, offset=offset))

return self._get_entire_data(
method="get", path=self.get_fields_path(), params=params
)

def add_field(
self,
name: str,
slug: str,
type: FieldType,
entities: Iterable[FieldEntity],
description: Optional[str] = None,
config: Optional[
Union[ListFieldConfig, NumberFieldConfig, OtherFieldConfig]
] = None,
):
"""
Add Field
Link to documentation:
https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.post
"""
data = {
"name": name,
"slug": slug,
"type": type,
"entities": entities,
"description": description,
"config": config,
}

return self.requester.request(
method="post", path=self.get_fields_path(), request_data=data
)

def get_field(self, fieldId: int):
"""
Get Field
Link to documentaion:
https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.get
"""

return self.requester.request(
method="get", path=self.get_fields_path(fieldId=fieldId)
)

def delete_field(self, fieldId: int):
"""
Delete Field
Link to documetation:
https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.delete
"""

return self.requester.request(
method="delete", path=self.get_fields_path(fieldId=fieldId)
)

def edit_field(self, fieldId: int, data: Iterable[FieldPatchRequest]):
"""
Edit Field
Link to documentation:
https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.patch
"""

return self.requester.request(
method="patch",
path=self.get_fields_path(fieldId=fieldId),
request_data=data,
)
Loading

0 comments on commit 09d8f49

Please sign in to comment.