Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Register
Sign in
Toggle navigation
Menu
UPSMF
knowledge-platform
Commits
a2ec327a
Commit
a2ec327a
authored
3 years ago
by
Jayaprakash n
Browse files
Options
Download
Patches
Plain Diff
Issue #SB-22862 feat: Collection CSV Hierarchy feature - config file changes based code update
parent
0486720d
s-debug
4.1.0_fixes
AmiableAnil-patch-1
Gcloud_copy
Gcloud_fix
Remove_unwantedCode_Gcloud_fix
actors-test
bulk-upload-comptenecy-mapping
bulk-upload-excelsheet
bulk-upload-test_excel
bulk_upload
csp-migration
dependabot/maven/platform-core/platform-telemetry/ch.qos.logback-logback-core-1.2.9
dependabot/maven/search-api/search-core/org.apache.httpcomponents-httpclient-4.5.13
knowlg-friday
knowlg-oneclick
local-setup-fix
local-setup-kube
m-4.2.0
master
patch-1
patch-2
patch-3
poc_bulk_upload
qs-schema
rahul_bulk_upload_postgres
release-4.1.0
release-4.10.0
release-4.10.1
release-4.2.0
release-4.3.0
release-4.4.0
release-4.5.0
release-4.6.0
release-4.7.0
release-4.7.0-debug
release-4.8.0
release-4.8.0-debug
release-4.9.0
release-4.9.1
release-5.0.0
release-5.0.1
release-5.1.0
release-5.1.0-content
release-5.2.0
release-5.3.0
revert-718-visiblity-private-api
revert-719-assessment-private-read-api
revert-720-visiblity-public-search-api
revert-721-visiblity-private-search-api
review-4.1.0
release-5.2.0_RC2
release-5.2.0_RC1
release-5.1.0_RC1
release-5.0.0_RC2
release-5.0.0_RC1
release-4.10.0_RC2
release-4.10.0_RC1
release-4.9.1_RC1
release-4.9.0_RC8
release-4.9.0_RC7
release-4.9.0_RC6
release-4.9.0_RC5
release-4.9.0_RC4
release-4.9.0_RC3
release-4.9.0_RC2
release-4.9.0_RC1
release-4.8.0_RC5
release-4.8.0_RC4
release-4.8.0_RC3
release-4.8.0_RC2
release-4.8.0_RC1
release-4.7.0_RC6
release-4.7.0_RC5
release-4.7.0_RC4
release-4.7.0_RC3
release-4.7.0_RC2
release-4.7.0_RC1
release-4.6.0_RC2
release-4.6.0_RC1
release-4.5.0_RC2
release-4.5.0_RC1
release-4.4.0_RC6
release-4.4.0_RC5
release-4.4.0_RC4
release-4.4.0_RC3
release-4.4.0_RC2
release-4.4.0_RC1
release-4.3.0_RC10
release-4.3.0_RC9
release-4.3.0_RC8
release-4.3.0_RC7
release-4.3.0_RC6
release-4.3.0_RC5
release-4.3.0_RC4
release-4.3.0_RC3
release-4.3.0_RC2
release-4.3.0_RC1
release-4.2.0_RC13
release-4.2.0_RC12
release-4.2.0_RC11
release-4.2.0_RC10
release-4.2.0_RC9
release-4.2.0_RC8
release-4.2.0_RC7
release-4.2.0_RC6
release-4.2.0_RC5
release-4.2.0_RC4
release-4.2.0_RC3
release-4.2.0_RC2
release-4.2.0_RC1
release-4.1.0_RC13
release-4.1.0_RC12
release-4.1.0_RC11
release-4.1.0_RC10
release-4.1.0_RC9
release-4.1.0_RC8
release-4.1.0_RC7
release-4.1.0_RC6
release-4.1.0_RC5
release-4.1.0_RC4
release-4.1.0_RC3
release-4.1.0_RC2
release-4.1.0_RC1
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
content-api/collection-csv-actors/src/main/scala/org.sunbird/collectioncsv/util/CollectionTOCConstants.scala
+17
-20
...g.sunbird/collectioncsv/util/CollectionTOCConstants.scala
content-api/collection-csv-actors/src/main/scala/org.sunbird/collectioncsv/util/CollectionTOCUtil.scala
+8
-9
...la/org.sunbird/collectioncsv/util/CollectionTOCUtil.scala
content-api/collection-csv-actors/src/test/resources/application.conf
+32
-31
...collection-csv-actors/src/test/resources/application.conf
content-api/collection-csv-actors/src/test/scala/org/sunbird/collectioncsv/TestCollectionCSVActor.scala
+3
-4
...la/org/sunbird/collectioncsv/TestCollectionCSVActor.scala
content-api/content-service/conf/application.conf
+46
-41
content-api/content-service/conf/application.conf
with
106 additions
and
105 deletions
+106
-105
content-api/collection-csv-actors/src/main/scala/org.sunbird/collectioncsv/util/CollectionTOCConstants.scala
+
17
−
20
View file @
a2ec327a
...
...
@@ -6,28 +6,28 @@ object CollectionTOCConstants {
val
COLLECTION_EXPORT
=
"exportCollection"
val
COLLECTION
=
"collection"
val
COLLECTION_TOC_ALLOWED_MIMETYPE
=
"application/vnd.ekstep.content-collection"
val
COLLECTION_TOC_ALLOWED_CONTENT_TYPES
=
"collection
_toc_
allowed
_c
ontent
_t
ypes"
val
COLLECTION_TOC_MAX_CSV_ROWS
=
"collection
_toc_max_csv_r
ows"
val
COLLECTION_CREATION_CSV_TOC_HEADERS
=
"collection
_create_csv_toc_headers
"
val
COLLECTION_CSV_IDENTIFIER_HEADER
=
"c
sv_
folder
_i
dentifier
_col_header
"
val
COLLECTION_UPDATE_CSV_TOC_HEADERS
=
"collection
_update_csv_toc_headers
"
val
COLLECTION_TOC_CREATE_CSV_MANDATORY_FIELDS
=
"collection
_toc_create_
csv
_
mandatory
_fields
"
val
COLLECTION_TOC_UPDATE_CSV_MANDATORY_FIELDS
=
"collection
_toc_update_
csv
_
mandatory
_fields
"
val
FOLDER_HIERARCHY_COLUMNS
=
"collection
_
csv
_
hierarchy
_headers
"
val
COLLECTION_CSV_QR_COLUMNS
=
"collection
_
csv
_qr_
headers"
val
COLLECTION_CSV_LINKED_CONTENT_FIELDS
=
"collection
_
csv
_
linked
_c
ontent
_field
s"
val
COLLECTION_CSV_LINKED_CONTENT_SEQ
=
"collection
_
csv
_
linked
_c
ontent
_seq
"
val
COLLECTION_TOC_ALLOWED_CONTENT_TYPES
=
"collection
.csv.
allowed
C
ontent
T
ypes"
val
COLLECTION_TOC_MAX_CSV_ROWS
=
"collection
.csv.maxR
ows"
val
COLLECTION_CREATION_CSV_TOC_HEADERS
=
"collection
.csv.headers.sequence.create
"
val
COLLECTION_CSV_IDENTIFIER_HEADER
=
"c
ollection.csv.headers.
folder
I
dentifier"
val
COLLECTION_UPDATE_CSV_TOC_HEADERS
=
"collection
.csv.headers.sequence.update
"
val
COLLECTION_TOC_CREATE_CSV_MANDATORY_FIELDS
=
"collection
.
csv
.
mandatory
.create
"
val
COLLECTION_TOC_UPDATE_CSV_MANDATORY_FIELDS
=
"collection
.
csv
.
mandatory
.update
"
val
FOLDER_HIERARCHY_COLUMNS
=
"collection
.
csv
.headers.
hierarchy"
val
COLLECTION_CSV_QR_COLUMNS
=
"collection
.
csv
.
headers
.QR
"
val
COLLECTION_CSV_LINKED_CONTENT_FIELDS
=
"collection
.
csv
.headers.
linked
C
ontents"
val
COLLECTION_CSV_LINKED_CONTENT_SEQ
=
"collection
.
csv
.headers.sequence.
linked
C
ontent
s
"
val
COMMA_SEPARATOR
=
", "
val
X_CHANNEL_ID
=
"X-Channel-Id"
val
DIALCODE
=
"dialcode"
val
MAPPED_TOPICS_HEADER
=
"collection
_
csv
_mapped_topics_header
"
val
CSV_COLLECTION_NAME_HEADER
=
"collection
_
csv
_
collection
_n
ame"
val
MAPPED_TOPICS_HEADER
=
"collection
.
csv
.headers.topics
"
val
CSV_COLLECTION_NAME_HEADER
=
"collection
.
csv
.headers.
collection
N
ame"
val
COLLECTION_CSV_FILE_EXTENSION
=
".csv"
val
COLLECTION_TYPE_TO_UNIT_TYPE
=
"collection
_
content
_t
ype
_u
nit
_t
ype"
val
COLLECTION_TYPE_TO_UNIT_TYPE
=
"collection
.csv.
content
T
ype
ToU
nit
T
ype"
val
CHILD_NODES
=
"childNodes"
val
DEPTH
=
"depth"
val
LEVEL
=
"level"
val
COLLECTION_OUTPUT_TOC_HEADERS
=
"collection
_output_toc_headers
"
val
COLLECTION_OUTPUT_TOC_HEADERS
=
"collection
.csv.headers.output
"
val
CHILDREN
=
"children"
val
UPDATE
=
"UPDATE"
val
CREATE
=
"CREATE"
...
...
@@ -38,7 +38,6 @@ object CollectionTOCConstants {
val
QR_CODE_REQUIRED
=
"QR Code Required?"
val
QR_CODE
=
"QR Code"
val
KEYWORDS
=
"keywords"
val
MAX_ALLOWED_CONTENT_SIZE
=
"max_allowed_content_size"
val
TOPIC
=
"topic"
val
CONTENT_TYPE
=
"contentType"
val
IDENTIFIER
=
"identifier"
...
...
@@ -50,9 +49,8 @@ object CollectionTOCConstants {
val
CONTENT
=
"content"
val
FRAMEWORK
=
"framework"
val
VERSION_KEY
=
"versionKey"
val
SUNBIRD_TOC_MAX_FIRST_LEVEL_UNITS
=
"
sunbird_toc_
max
_f
irst
_l
evel
_u
nits"
val
SUNBIRD_TOC_MAX_FIRST_LEVEL_UNITS
=
"
collection.csv.
max
F
irst
L
evel
U
nits"
val
INDEX
=
"index"
val
SUNBIRD_CONTENT_GET_HIERARCHY_API
=
"sunbird_get_hierarchy_api"
val
RESULT
=
"result"
val
CONTENT_TYPE_HEADER
=
"Content-Type"
val
BEARER
=
"Bearer "
...
...
@@ -70,14 +68,13 @@ object CollectionTOCConstants {
val
TOC_URL
=
"tocUrl"
val
TTL
=
"ttl"
val
EKSTEP_BASE_URL
=
"ekstep_api_base_url"
val
LEARNING_SERVICE_BASE_URL
=
"learning_service.api.base_url"
val
SUNBIRD_AUTHORIZATION
=
"learning_service.api.auth_key"
val
SUNBIRD_CS_BASE_URL
=
"sunbird_cs_base_url"
val
FRAMEWORK_READ_API_URL
=
"framework_read_api_url"
val
SUNBIRD_DIALCODE_SEARCH_API
=
"sunbird_dialcode_search_api"
val
SUNBIRD_CONTENT_SEARCH_URL
=
"
sunbird_content_
search
_
url"
val
SUNBIRD_CONTENT_SEARCH_URL
=
"
composite.
search
.
url"
val
UPDATE_HIERARCHY_API
=
"sunbird_update_hierarchy_api"
val
LINK_DIAL_CODE_API
=
"sunbird_link_dial_code_api"
...
...
This diff is collapsed.
Click to expand it.
content-api/collection-csv-actors/src/main/scala/org.sunbird/collectioncsv/util/CollectionTOCUtil.scala
+
8
−
9
View file @
a2ec327a
...
...
@@ -23,15 +23,14 @@ object CollectionTOCUtil {
try
{
val
headers
=
new
util
.
HashMap
[
String
,
String
]()
{
put
(
CollectionTOCConstants
.
CONTENT_TYPE_HEADER
,
CollectionTOCConstants
.
APPLICATION_JSON
)
put
(
AUTHORIZATION
,
CollectionTOCConstants
.
BEARER
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_AUTHORIZATION
))
}
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
LEARNING_SERVICE_BASE_URL
)
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
FRAMEWORK_READ_API_URL
)
+
"/"
+
frameworkId
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
FRAMEWORK_READ_API_URL
)
+
"/"
+
frameworkId
TelemetryManager
.
log
(
"CollectionTOCUtil --> getRelatedFrameworkById --> requestUrl: "
+
requestUrl
)
TelemetryManager
.
log
(
"CollectionTOCUtil --> getRelatedFrameworkById --> headers: "
+
headers
)
val
httpResponse
=
oec
.
httpUtil
.
get
(
requestUrl
,
"categories=topic"
,
headers
)
TelemetryManager
.
log
(
"CollectionTOCUtil --> getRelatedFrameworkById --> httpResponse.getResponseCode: "
+
httpResponse
.
getResponseCode
)
if
(
null
==
httpResponse
||
httpResponse
.
getResponseCode
.
code
()
!=
ResponseCode
.
OK
.
code
())
throw
new
ServerException
(
"SERVER_ERROR"
,
"Error while fetching content data."
)
...
...
@@ -53,8 +52,8 @@ object CollectionTOCUtil {
})
}
val
headerParam
=
HashMap
[
String
,
String
](
CollectionTOCConstants
.
X_CHANNEL_ID
->
channelId
,
AUTHORIZATION
->
(
CollectionTOCConstants
.
BEARER
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_AUTHORIZATION
)),
"Content-Type"
->
"application/json"
)
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_CS_BASE_URL
)
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_DIALCODE_SEARCH_API
)
val
headerParam
=
HashMap
[
String
,
String
](
CollectionTOCConstants
.
X_CHANNEL_ID
->
channelId
,
"Content-Type"
->
"application/json"
)
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_DIALCODE_SEARCH_API
)
val
searchResponse
=
oec
.
httpUtil
.
post
(
requestUrl
,
reqMap
,
headerParam
)
if
(
null
==
searchResponse
||
searchResponse
.
getResponseCode
.
code
()
!=
ResponseCode
.
OK
.
code
())
...
...
@@ -86,8 +85,8 @@ object CollectionTOCUtil {
})
}
val
headerParam
=
HashMap
[
String
,
String
](
AUTHORIZATION
->
(
BEARER
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_AUTHORIZATION
)),
"Content-Type"
->
"application/json"
)
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_CS_BASE_URL
)
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_CONTENT_SEARCH_URL
)
val
headerParam
=
HashMap
[
String
,
String
](
"Content-Type"
->
"application/json"
)
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_CONTENT_SEARCH_URL
)
val
searchResponse
=
oec
.
httpUtil
.
post
(
requestUrl
,
reqMap
,
headerParam
)
...
...
@@ -110,8 +109,8 @@ object CollectionTOCUtil {
})
}
val
headerParam
=
HashMap
[
String
,
String
](
CollectionTOCConstants
.
X_CHANNEL_ID
->
channelId
,
AUTHORIZATION
->
(
BEARER
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
SUNBIRD_AUTHORIZATION
)),
"Content-Type"
->
"application/json"
)
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
LEARNING_SERVICE_BASE_URL
)
+
Platform
.
config
.
getString
(
CollectionTOCConstants
.
LINK_DIAL_CODE_API
)
+
"/"
+
collectionID
val
headerParam
=
HashMap
[
String
,
String
](
CollectionTOCConstants
.
X_CHANNEL_ID
->
channelId
,
"Content-Type"
->
"application/json"
)
val
requestUrl
=
Platform
.
config
.
getString
(
CollectionTOCConstants
.
LINK_DIAL_CODE_API
)
+
"/"
+
collectionID
val
linkResponse
=
oec
.
httpUtil
.
post
(
requestUrl
,
reqMap
,
headerParam
)
...
...
This diff is collapsed.
Click to expand it.
content-api/collection-csv-actors/src/test/resources/application.conf
+
32
−
31
View file @
a2ec327a
schema
.
base_path
=
".
./..
/schemas/"
schema
.
base_path
=
"./schemas/"
# Configuration
graph
.
dir
=/
data
/
testingGraphDB
...
...
@@ -82,34 +82,35 @@ mimeTypeToPrimaryCategory {
# Collection CSV Hierarchy API
csv_folder_identifier_col_header
= [
"Folder Identifier"
]
collection_create_csv_toc_headers
= {
"Level 1 Folder"
:
0
,
"Level 2 Folder"
:
1
,
"Level 3 Folder"
:
2
,
"Level 4 Folder"
:
3
,
"Description"
:
4
}
collection_update_csv_toc_headers
= {
"Collection Name"
:
0
,
"Folder Identifier"
:
1
,
"Level 1 Folder"
:
2
,
"Level 2 Folder"
:
3
,
"Level 3 Folder"
:
4
,
"Level 4 Folder"
:
5
,
"Description"
:
6
,
"Mapped Topics"
:
7
,
"Keywords"
:
8
,
"QR Code Required?"
:
9
,
"QR Code"
:
10
,
"Linked Content 1"
:
11
,
"Linked Content 2"
:
12
,
"Linked Content 3"
:
13
,
"Linked Content 4"
:
14
,
"Linked Content 5"
:
15
,
"Linked Content 6"
:
16
,
"Linked Content 7"
:
17
,
"Linked Content 8"
:
18
,
"Linked Content 9"
:
19
,
"Linked Content 10"
:
20
,
"Linked Content 11"
:
21
,
"Linked Content 12"
:
22
,
"Linked Content 13"
:
23
,
"Linked Content 14"
:
24
,
"Linked Content 15"
:
25
,
"Linked Content 16"
:
26
,
"Linked Content 17"
:
27
,
"Linked Content 18"
:
28
,
"Linked Content 19"
:
29
,
"Linked Content 20"
:
30
,
"Linked Content 21"
:
31
,
"Linked Content 22"
:
32
,
"Linked Content 23"
:
33
,
"Linked Content 24"
:
34
,
"Linked Content 25"
:
35
,
"Linked Content 26"
:
36
,
"Linked Content 27"
:
37
,
"Linked Content 28"
:
38
,
"Linked Content 29"
:
39
,
"Linked Content 30"
:
40
}
collection_toc_create_csv_mandatory_fields
=[
"Level 1 Folder"
]
collection_toc_update_csv_mandatory_fields
=[
"Collection Name"
,
"Folder Identifier"
]
collection_csv_hierarchy_headers
= [
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
]
collection_csv_qr_headers
= [
"QR Code Required?"
,
"QR Code"
]
collection_csv_linked_content_fields
= [
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30"
]
collection_csv_linked_content_seq
= {
"Linked Content 1"
:
0
,
"Linked Content 2"
:
1
,
"Linked Content 3"
:
2
,
"Linked Content 4"
:
3
,
"Linked Content 5"
:
4
,
"Linked Content 6"
:
5
,
"Linked Content 7"
:
6
,
"Linked Content 8"
:
7
,
"Linked Content 9"
:
8
,
"Linked Content 10"
:
9
,
"Linked Content 11"
:
10
,
"Linked Content 12"
:
11
,
"Linked Content 13"
:
12
,
"Linked Content 14"
:
13
,
"Linked Content 15"
:
14
,
"Linked Content 16"
:
15
,
"Linked Content 17"
:
16
,
"Linked Content 18"
:
17
,
"Linked Content 19"
:
18
,
"Linked Content 20"
:
19
,
"Linked Content 21"
:
20
,
"Linked Content 22"
:
21
,
"Linked Content 23"
:
22
,
"Linked Content 24"
:
23
,
"Linked Content 25"
:
24
,
"Linked Content 26"
:
25
,
"Linked Content 27"
:
26
,
"Linked Content 28"
:
27
,
"Linked Content 29"
:
28
,
"Linked Content 30"
:
29
}
collection_csv_mapped_topics_header
= [
"Mapped Topics"
]
collection_csv_collection_name
= [
"Collection Name"
]
collection_toc_max_csv_rows
=
6500
collection_toc_allowed_content_types
=[
"TextBook"
,
"Collection"
,
"LessonPlan"
,
"Resource"
]
collection_content_type_unit_type
= {
"TextBook"
:
"TextBookUnit"
,
"Course"
:
"CourseUnit"
,
"Collection"
:
"CollectionUnit"
}
collection_output_toc_headers
= [
"Collection Name"
,
"Folder Identifier"
,
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
,
"Description"
,
"Mapped Topics"
,
"Keywords"
,
"QR Code Required?"
,
"QR Code"
,
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30"
]
sunbird_collection_toc_csv_ttl
=
86400
sunbird_toc_max_first_level_units
=
30
framework_read_api_url
=/
framework
/
v1
/
read
sunbird_dialcode_search_api
=/
dialcode
/
v1
/
list
sunbird_content_search_url
=/
content
/
v1
/
search
sunbird_link_dial_code_api
=/
collection
/
v3
/
dialcode
/
link
sunbird_cs_base_url
=
"https://dev.sunbirded.org/api"
learning_service
{
api
{
base_url
:
""
auth_key
:
""
}
collection
{
csv
{
maxRows
=
6500
allowedContentTypes
= [
"TextBook"
,
"Collection"
,
"LessonPlan"
,
"Resource"
]
maxFirstLevelUnits
=
30
ttl
=
86400
contentTypeToUnitType
= {
"TextBook"
:
"TextBookUnit"
,
"Course"
:
"CourseUnit"
,
"Collection"
:
"CollectionUnit"
}
headers
{
folderIdentifier
= [
"Folder Identifier"
]
hierarchy
= [
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
]
QR
= [
"QR Code Required?"
,
"QR Code"
]
topics
= [
"Mapped Topics"
]
collectionName
= [
"Collection Name"
]
linkedContents
= [
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30"
]
output
= [
"Collection Name"
,
"Folder Identifier"
,
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
,
"Description"
,
"Mapped Topics"
,
"Keywords"
,
"QR Code Required?"
,
"QR Code"
,
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30"
]
sequence
{
create
= {
"Level 1 Folder"
:
0
,
"Level 2 Folder"
:
1
,
"Level 3 Folder"
:
2
,
"Level 4 Folder"
:
3
,
"Description"
:
4
}
update
= {
"Collection Name"
:
0
,
"Folder Identifier"
:
1
,
"Level 1 Folder"
:
2
,
"Level 2 Folder"
:
3
,
"Level 3 Folder"
:
4
,
"Level 4 Folder"
:
5
,
"Description"
:
6
,
"Mapped Topics"
:
7
,
"Keywords"
:
8
,
"QR Code Required?"
:
9
,
"QR Code"
:
10
,
"Linked Content 1"
:
11
,
"Linked Content 2"
:
12
,
"Linked Content 3"
:
13
,
"Linked Content 4"
:
14
,
"Linked Content 5"
:
15
,
"Linked Content 6"
:
16
,
"Linked Content 7"
:
17
,
"Linked Content 8"
:
18
,
"Linked Content 9"
:
19
,
"Linked Content 10"
:
20
,
"Linked Content 11"
:
21
,
"Linked Content 12"
:
22
,
"Linked Content 13"
:
23
,
"Linked Content 14"
:
24
,
"Linked Content 15"
:
25
,
"Linked Content 16"
:
26
,
"Linked Content 17"
:
27
,
"Linked Content 18"
:
28
,
"Linked Content 19"
:
29
,
"Linked Content 20"
:
30
,
"Linked Content 21"
:
31
,
"Linked Content 22"
:
32
,
"Linked Content 23"
:
33
,
"Linked Content 24"
:
34
,
"Linked Content 25"
:
35
,
"Linked Content 26"
:
36
,
"Linked Content 27"
:
37
,
"Linked Content 28"
:
38
,
"Linked Content 29"
:
39
,
"Linked Content 30"
:
40
}
linkedContents
= {
"Linked Content 1"
:
0
,
"Linked Content 2"
:
1
,
"Linked Content 3"
:
2
,
"Linked Content 4"
:
3
,
"Linked Content 5"
:
4
,
"Linked Content 6"
:
5
,
"Linked Content 7"
:
6
,
"Linked Content 8"
:
7
,
"Linked Content 9"
:
8
,
"Linked Content 10"
:
9
,
"Linked Content 11"
:
10
,
"Linked Content 12"
:
11
,
"Linked Content 13"
:
12
,
"Linked Content 14"
:
13
,
"Linked Content 15"
:
14
,
"Linked Content 16"
:
15
,
"Linked Content 17"
:
16
,
"Linked Content 18"
:
17
,
"Linked Content 19"
:
18
,
"Linked Content 20"
:
19
,
"Linked Content 21"
:
20
,
"Linked Content 22"
:
21
,
"Linked Content 23"
:
22
,
"Linked Content 24"
:
23
,
"Linked Content 25"
:
24
,
"Linked Content 26"
:
25
,
"Linked Content 27"
:
26
,
"Linked Content 28"
:
27
,
"Linked Content 29"
:
28
,
"Linked Content 30"
:
29
}
}
}
mandatory
{
create
= [
"Level 1 Folder"
]
update
= [
"Collection Name"
,
"Folder Identifier"
]
}
}
}
composite
.
search
.
url
=
"https://dev.sunbirded.org/action/composite/v3/search"
framework_read_api_url
=
"https://dev.sunbirded.org/api/framework/v1/read"
sunbird_dialcode_search_api
=
"https://dev.sunbirded.org/api/dialcode/v1/list"
sunbird_link_dial_code_api
=
"https://dev.sunbirded.org/api/collection/v3/dialcode/link"
This diff is collapsed.
Click to expand it.
content-api/collection-csv-actors/src/test/scala/org/sunbird/collectioncsv/TestCollectionCSVActor.scala
+
3
−
4
View file @
a2ec327a
...
...
@@ -369,11 +369,11 @@ class TestCollectionCSVActor extends FlatSpec with Matchers with MockFactory {
(
graphDB
.
readExternalProps
(
_:
Request
,
_:
List
[
String
])).
expects
(*,
*).
returns
(
Future
(
getCassandraHierarchy
())).
anyNumberOfTimes
()
(
oec
.
httpUtil
_
).
expects
().
returns
(
httpUtil
)
(
httpUtil
.
post
(
_:
String
,
_:
java.util.Map
[
String
,
AnyRef
],
_:
java.util.Map
[
String
,
String
])).
expects
(
"https://dev.sunbirded.org/api
"
+
"
/dialcode/v1/list"
,
*,
*).
returns
(
getDIALSearchResponse
()).
anyNumberOfTimes
()
(
httpUtil
.
post
(
_:
String
,
_:
java.util.Map
[
String
,
AnyRef
],
_:
java.util.Map
[
String
,
String
])).
expects
(
"https://dev.sunbirded.org/api/dialcode/v1/list"
,
*,
*).
returns
(
getDIALSearchResponse
()).
anyNumberOfTimes
()
(
oec
.
httpUtil
_
).
expects
().
returns
(
httpUtil
)
(
httpUtil
.
post
(
_:
String
,
_:
java.util.Map
[
String
,
AnyRef
],
_:
java.util.Map
[
String
,
String
])).
expects
(
"https://dev.sunbirded.org/a
pi"
+
"/content
/v
1
/search"
,
*,
*).
returns
(
searchLinkedContentsResponse
()).
anyNumberOfTimes
()
(
httpUtil
.
post
(
_:
String
,
_:
java.util.Map
[
String
,
AnyRef
],
_:
java.util.Map
[
String
,
String
])).
expects
(
"https://dev.sunbirded.org/a
ction/composite
/v
3
/search"
,
*,
*).
returns
(
searchLinkedContentsResponse
()).
anyNumberOfTimes
()
(
oec
.
httpUtil
_
).
expects
().
returns
(
httpUtil
)
(
httpUtil
.
post
(
_:
String
,
_:
java.util.Map
[
String
,
AnyRef
],
_:
java.util.Map
[
String
,
String
])).
expects
(
"
"
+
"
/collection/v3/dialcode/link"
+
"/"
+
collectionID
,
*,
*).
returns
(
linkDIALCodesResponse
()).
anyNumberOfTimes
()
(
httpUtil
.
post
(
_:
String
,
_:
java.util.Map
[
String
,
AnyRef
],
_:
java.util.Map
[
String
,
String
])).
expects
(
"
https://dev.sunbirded.org/api
/collection/v3/dialcode/link"
+
"/"
+
collectionID
,
*,
*).
returns
(
linkDIALCodesResponse
()).
anyNumberOfTimes
()
val
response
=
uploadFileToActor
(
collectionID
,
resourceDirectory
+
"UpdateTOC.csv"
)
assert
(
response
!=
null
)
...
...
@@ -390,7 +390,6 @@ class TestCollectionCSVActor extends FlatSpec with Matchers with MockFactory {
(
graphDB
.
readExternalProps
(
_:
Request
,
_:
List
[
String
])).
expects
(*,
*).
returns
(
Future
(
getEmptyCassandraHierarchy
())).
anyNumberOfTimes
()
(
graphDB
.
updateExternalProps
(
_:
Request
)).
expects
(*).
returns
(
Future
(
getCassandraHierarchy
())).
anyNumberOfTimes
()
val
collectionID
=
"do_113293355858984960134"
val
response
=
uploadFileToActor
(
collectionID
,
resourceDirectory
+
"CreateTOC.csv"
)
assert
(
response
!=
null
)
...
...
This diff is collapsed.
Click to expand it.
content-api/content-service/conf/application.conf
+
46
−
41
View file @
a2ec327a
...
...
@@ -373,18 +373,18 @@ languageCode {
platform
.
language
.
codes
=[
"as"
,
"bn"
,
"en"
,
"gu"
,
"hi"
,
"hoc"
,
"jun"
,
"ka"
,
"mai"
,
"mr"
,
"unx"
,
"or"
,
"san"
,
"sat"
,
"ta"
,
"te"
,
"urd"
]
collection
.
keyspace
=
"hierarchy_store"
content
.
keyspace
=
"content_store"
collection
.
keyspace
=
"
dev_
hierarchy_store"
content
.
keyspace
=
"
dev_
content_store"
# Learning-Service Configuration
content
.
metadata
.
visibility
.
parent
=[
"textbookunit"
,
"courseunit"
,
"lessonplanunit"
,
"event"
]
# Cassandra Configuration
//
content
.
keyspace
.
name
=
content_store
//
content
.
keyspace
.
name
=
dev_
content_store
//
content
.
keyspace
.
table
=
content_data
#TODO: Add Configuration for assessment. e.g: question_data
orchestrator
.
keyspace
.
name
=
script
_store
orchestrator
.
keyspace
.
table
=
script
_data
orchestrator
.
keyspace
.
name
=
dev_question
_store
orchestrator
.
keyspace
.
table
=
question
_data
cassandra
.
lp
.
connection
=
"127.0.0.1:9042"
cassandra
.
lpa
.
connection
=
"127.0.0.1:9042"
...
...
@@ -471,16 +471,16 @@ MAX_ITERATION_COUNT_FOR_SAMZA_JOB=2
# DIAL Code Configuration
dialcode
.
keyspace
.
name
=
"dialcode_store"
dialcode
.
keyspace
.
name
=
"
sunbirddev_
dialcode_store"
dialcode
.
keyspace
.
table
=
"dial_code"
dialcode
.
max_count
=
1000
# System Configuration
system
.
config
.
keyspace
.
name
=
"dialcode_store"
system
.
config
.
keyspace
.
name
=
"
sunbirddev_
dialcode_store"
system
.
config
.
table
=
"system_config"
#Publisher Configuration
publisher
.
keyspace
.
name
=
"dialcode_store"
publisher
.
keyspace
.
name
=
"
sunbirddev_
dialcode_store"
publisher
.
keyspace
.
table
=
"publisher"
#DIAL Code Generator Configuration
...
...
@@ -545,10 +545,15 @@ learning.service_provider=["youtube"]
stream
.
mime
.
type
=
video
/
mp4
compositesearch
.
index
.
name
=
"compositesearch"
hierarchy
.
keyspace
.
name
=
hierarchy_store
hierarchy
.
keyspace
.
name
=
dev_
hierarchy_store
content
.
hierarchy
.
table
=
content_hierarchy
framework
.
hierarchy
.
table
=
framework_hierarchy
objectcategorydefinition
.
keyspace
=
category_store
objectcategorydefinition
.
keyspace
=
dev_category_store
cloud_storage_type
:
"azure"
azure_storage_key
:
"sunbirddev"
azure_storage_secret
:
"XcRoJsGkl8Gq5LpMm9Hnm0AEd3GpCHi7ck1qcdovIcN2VMWIvKiYtOEHHALeIq/5GJ9wrs6DUPszF9mV6tB9Qg=="
azure_storage_container
:
"sunbird-content-dev"
# Kafka topic for definition update event.
kafka
.
topic
.
system
.
command
=
"dev.system.command"
...
...
@@ -703,35 +708,35 @@ objecttype.as.content.enabled=true
# master Category Cache Properties
master
.
category
.
cache
.
ttl
=
86400
# Collection CSV
Hierarchy API
csv_folder_identifier_col_header
= [
"Folder Identifier"
]
collection_create_csv_toc_headers
= {
"Level 1 Folder"
:
0
,
"Level 2 Folder"
:
1
,
"Level 3 Folder"
:
2
,
"Level 4 Folder"
:
3
,
"Description"
:
4
}
collection_update_csv_toc_headers
= {
"Collection Name"
:
0
,
"Folder Identifier"
:
1
,
"Level 1 Folder"
:
2
,
"Level 2 Folder"
:
3
,
"Level 3 Folder"
:
4
,
"Level 4 Folder"
:
5
,
"Description"
:
6
,
"Mapped Topics"
:
7
,
"Keywords"
:
8
,
"QR Code Required?"
:
9
,
"QR Code"
:
10
,
"Linked Content 1"
:
11
,
"Linked Content 2"
:
12
,
"Linked Content 3"
:
13
,
"Linked Content 4"
:
14
,
"Linked Content 5"
:
15
,
"Linked Content 6"
:
16
,
"Linked Content 7"
:
17
,
"Linked Content 8"
:
18
,
"Linked Content 9"
:
19
,
"Linked Content 10"
:
20
,
"Linked Content 11"
:
21
,
"Linked Content 12"
:
22
,
"Linked Content 13"
:
23
,
"Linked Content 14"
:
24
,
"Linked Content 15"
:
25
,
"Linked Content 16"
:
26
,
"Linked Content 17"
:
27
,
"Linked Content 18"
:
28
,
"Linked Content 19"
:
29
,
"Linked Content 20"
:
30
,
"Linked Content 21"
:
31
,
"Linked Content 22"
:
32
,
"Linked Content 23"
:
33
,
"Linked Content 24"
:
34
,
"Linked Content 25"
:
35
,
"Linked Content 26"
:
36
,
"Linked Content 27"
:
37
,
"Linked Content 28"
:
38
,
"Linked Content 29"
:
39
,
"Linked Content 30"
:
40
}
collection_toc_create_csv_mandatory_fields
=[
"Level 1 Folder"
]
collection
_toc_update_csv_mandatory_fields
=[
"Collection Name"
,
"Folder Identifier"
]
collection_csv_hierarchy_headers
= [
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
]
collection_csv_qr_headers
= [
"QR Code Required?"
,
"QR Code"
]
collection_csv_linked_content_fields
= [
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30
"
]
collection_csv_linked_content_seq
= {
"Linked Content 1"
:
0
,
"Linked Content 2"
:
1
,
"Linked Content 3"
:
2
,
"Linked Content 4"
:
3
,
"Linked Content 5"
:
4
,
"Linked Content 6"
:
5
,
"Linked Content 7"
:
6
,
"Linked Content 8"
:
7
,
"Linked Content 9"
:
8
,
"Linked Content 10"
:
9
,
"Linked Content 11"
:
10
,
"Linked Content 12"
:
11
,
"Linked Content 13"
:
12
,
"Linked Content 14"
:
13
,
"Linked Content 15"
:
14
,
"Linked Content 16"
:
15
,
"Linked Content 17"
:
16
,
"Linked Content 18"
:
17
,
"Linked Content 19"
:
18
,
"Linked Content 20"
:
19
,
"Linked Content 21"
:
20
,
"Linked Content 22"
:
21
,
"Linked Content 23"
:
22
,
"Linked Content 24"
:
23
,
"Linked Content 25"
:
24
,
"Linked Content 26"
:
25
,
"Linked Content 27"
:
26
,
"Linked Content 28"
:
27
,
"Linked Content 29"
:
28
,
"Linked Content 30"
:
29
}
collection_csv_mapped_topics_header
= [
"Mapped Topics"
]
collection_csv_collection_name
= [
"Collection
Name"
]
collection_toc_max_csv_rows
=
6500
collection_toc_allowed_content_types
=[
"TextBook"
,
"Collection"
,
"LessonPlan"
,
"Resource
"
]
collection_content_type_unit_type
= {
"TextBook"
:
"TextBookUnit"
,
"Course"
:
"CourseUnit"
,
"Collection"
:
"CollectionUnit"
}
collection_output_toc_headers
= [
"Collection Name"
,
"Folder Identifier"
,
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
,
"Description"
,
"Mapped Topics"
,
"Keywords"
,
"QR Code Required?"
,
"QR Code"
,
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30
"
]
sunbird_collection_toc_csv_ttl
=
86400
sunbird_toc_max_first_level_units
=
30
framework_read_api_url
=/
framework
/
v1
/
read
sunbird_dialcode_search_api
=/
dialcode
/
v1
/
list
sunbird_content_search_url
=/
content
/
v1
/
search
sunbird_link_dial_code_api
=/
collection
/
v3
/
dialcode
/
link
sunbird_cs_base_url
=
"https://dev.sunbirded.org/api"
learning_service
{
api
{
base_url
:
""
auth_key
:
""
}
# Collection CSV
sunbird_dialcode_search_api
=
"http://dial-service.{{namespace}}.svc.cluster.local:9000/dialcode/v3/list"
framework_read_api_url
=
"{{ sunbird_content_repo_api_base_url }}/framework/v3/read"
sunbird_link_dial_code_api
=
"{{ sunbird_content_repo_api_base_url }}/collection/v3/dialcode/link"
collection
{
csv
{
maxRows
=
6500
allowedContentTypes
= [
"TextBook"
,
"Collection"
,
"LessonPlan"
,
"Resource
"
]
maxFirstLevelUnits
=
30
ttl
=
86400
contentTypeToUnitType
= {
"TextBook"
:
"TextBookUnit"
,
"Course"
:
"CourseUnit"
,
"Collection"
:
"Collection
Unit"
}
headers
{
folderIdentifier
= [
"Folder Identifier
"
]
hierarchy
= [
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
]
QR
= [
"QR Code Required?"
,
"QR Code
"
]
topics
= [
"Mapped Topics"
]
collectionName
= [
"Collection Name"
]
linkedContents
= [
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30"
]
output
= [
"Collection Name"
,
"Folder Identifier"
,
"Level 1 Folder"
,
"Level 2 Folder"
,
"Level 3 Folder"
,
"Level 4 Folder"
,
"Description"
,
"Mapped Topics"
,
"Keywords"
,
"QR Code Required?"
,
"QR Code"
,
"Linked Content 1"
,
"Linked Content 2"
,
"Linked Content 3"
,
"Linked Content 4"
,
"Linked Content 5"
,
"Linked Content 6"
,
"Linked Content 7"
,
"Linked Content 8"
,
"Linked Content 9"
,
"Linked Content 10"
,
"Linked Content 11"
,
"Linked Content 12"
,
"Linked Content 13"
,
"Linked Content 14"
,
"Linked Content 15"
,
"Linked Content 16"
,
"Linked Content 17"
,
"Linked Content 18"
,
"Linked Content 19"
,
"Linked Content 20"
,
"Linked Content 21"
,
"Linked Content 22"
,
"Linked Content 23"
,
"Linked Content 24"
,
"Linked Content 25"
,
"Linked Content 26"
,
"Linked Content 27"
,
"Linked Content 28"
,
"Linked Content 29"
,
"Linked Content 30"
]
sequence
{
create
= {
"Level 1 Folder"
:
0
,
"Level 2 Folder"
:
1
,
"Level 3 Folder"
:
2
,
"Level 4 Folder"
:
3
,
"Description"
:
4
}
update
= {
"Collection Name"
:
0
,
"Folder Identifier"
:
1
,
"Level 1 Folder"
:
2
,
"Level 2 Folder"
:
3
,
"Level 3 Folder"
:
4
,
"Level 4 Folder"
:
5
,
"Description"
:
6
,
"Mapped Topics"
:
7
,
"Keywords"
:
8
,
"QR Code Required?"
:
9
,
"QR Code"
:
10
,
"Linked Content 1"
:
11
,
"Linked Content 2"
:
12
,
"Linked Content 3"
:
13
,
"Linked Content 4"
:
14
,
"Linked Content 5"
:
15
,
"Linked Content 6"
:
16
,
"Linked Content 7"
:
17
,
"Linked Content 8"
:
18
,
"Linked Content 9"
:
19
,
"Linked Content 10"
:
20
,
"Linked Content 11"
:
21
,
"Linked Content 12"
:
22
,
"Linked Content 13"
:
23
,
"Linked Content 14"
:
24
,
"Linked Content 15"
:
25
,
"Linked Content 16"
:
26
,
"Linked Content 17"
:
27
,
"Linked Content 18"
:
28
,
"Linked Content 19"
:
29
,
"Linked Content 20"
:
30
,
"Linked Content 21"
:
31
,
"Linked Content 22"
:
32
,
"Linked Content 23"
:
33
,
"Linked Content 24"
:
34
,
"Linked Content 25"
:
35
,
"Linked Content 26"
:
36
,
"Linked Content 27"
:
37
,
"Linked Content 28"
:
38
,
"Linked Content 29"
:
39
,
"Linked Content 30"
:
40
}
linkedContents
= {
"Linked Content 1"
:
0
,
"Linked Content 2"
:
1
,
"Linked Content 3"
:
2
,
"Linked Content 4"
:
3
,
"Linked Content 5"
:
4
,
"Linked Content 6"
:
5
,
"Linked Content 7"
:
6
,
"Linked Content 8"
:
7
,
"Linked Content 9"
:
8
,
"Linked Content 10"
:
9
,
"Linked Content 11"
:
10
,
"Linked Content 12"
:
11
,
"Linked Content 13"
:
12
,
"Linked Content 14"
:
13
,
"Linked Content 15"
:
14
,
"Linked Content 16"
:
15
,
"Linked Content 17"
:
16
,
"Linked Content 18"
:
17
,
"Linked Content 19"
:
18
,
"Linked Content 20"
:
19
,
"Linked Content 21"
:
20
,
"Linked Content 22"
:
21
,
"Linked Content 23"
:
22
,
"Linked Content 24"
:
23
,
"Linked Content 25"
:
24
,
"Linked Content 26"
:
25
,
"Linked Content 27"
:
26
,
"Linked Content 28"
:
27
,
"Linked Content 29"
:
28
,
"Linked Content 30"
:
29
}
}
}
mandatory
{
create
= [
"Level 1 Folder"
]
update
= [
"Collection Name"
,
"Folder Identifier"
]
}
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets