Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
199
Issues
199
List
Board
Labels
Milestones
Merge Requests
12
Merge Requests
12
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
25de8907
Verified
Commit
25de8907
authored
Oct 21, 2025
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[tsv] tsv v4 endpoint
parent
b47bbd5f
Pipeline
#7989
passed with stages
in 51 minutes and 35 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
31 deletions
+46
-31
Export.hs
src/Gargantext/API/Node/Document/Export.hs
+24
-7
Document.hs
src/Gargantext/API/Routes/Named/Document.hs
+2
-0
TSVv3.hs
src/Gargantext/Core/Text/Corpus/Parsers/TSV/TSVv3.hs
+0
-2
TSVv4.hs
src/Gargantext/Core/Text/Corpus/Parsers/TSV/TSVv4.hs
+20
-22
No files found.
src/Gargantext/API/Node/Document/Export.hs
View file @
25de8907
...
@@ -25,6 +25,7 @@ import Gargantext.API.Prelude (IsGargServer)
...
@@ -25,6 +25,7 @@ import Gargantext.API.Prelude (IsGargServer)
import
Gargantext.API.Routes.Named.Document
qualified
as
Named
import
Gargantext.API.Routes.Named.Document
qualified
as
Named
import
Gargantext.Core
(
toDBid
)
import
Gargantext.Core
(
toDBid
)
import
Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv3
qualified
as
TSVv3
import
Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv3
qualified
as
TSVv3
import
Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv4
qualified
as
TSVv4
import
Gargantext.Core.Text.Corpus.Parsers.TSV.Utils
(
writeDocs2TsvOrdered
)
import
Gargantext.Core.Text.Corpus.Parsers.TSV.Utils
(
writeDocs2TsvOrdered
)
import
Gargantext.Database.Admin.Types.Node
(
DocId
,
NodeId
,
NodeType
(
..
))
import
Gargantext.Database.Admin.Types.Node
(
DocId
,
NodeId
,
NodeType
(
..
))
import
Gargantext.Database.Prelude
import
Gargantext.Database.Prelude
...
@@ -45,7 +46,8 @@ documentExportAPI :: IsGargServer env err m
...
@@ -45,7 +46,8 @@ documentExportAPI :: IsGargServer env err m
documentExportAPI
userNodeId
dId
=
Named
.
DocumentExportAPI
$
Named
.
DocumentExportEndpoints
documentExportAPI
userNodeId
dId
=
Named
.
DocumentExportAPI
$
Named
.
DocumentExportEndpoints
{
exportJSONEp
=
getDocumentsJSON
userNodeId
dId
{
exportJSONEp
=
getDocumentsJSON
userNodeId
dId
,
exportJSONZipEp
=
getDocumentsJSONZip
userNodeId
dId
,
exportJSONZipEp
=
getDocumentsJSONZip
userNodeId
dId
,
exportTSVEp
=
getDocumentsTSV
userNodeId
dId
,
exportTSVEp
=
getDocumentsTSVv3
userNodeId
dId
,
exportTSVv4Ep
=
getDocumentsTSVv4
userNodeId
dId
}
}
--------------------------------------------------
--------------------------------------------------
...
@@ -80,12 +82,12 @@ getDocumentsJSONZip userNodeId pId = do
...
@@ -80,12 +82,12 @@ getDocumentsJSONZip userNodeId pId = do
,
dezFileName
dexpz
,
dezFileName
dexpz
,
".zip"
])
dexpz
,
".zip"
])
dexpz
getDocumentsTSV
::
IsGargServer
err
env
m
getDocumentsTSV
v3
::
IsGargServer
err
env
m
=>
NodeId
=>
NodeId
-- ^ The Node ID of the target user
-- ^ The Node ID of the target user
->
DocId
->
DocId
->
m
(
Headers
'[
H
eader
"Content-Disposition"
T
.
Text
]
T
.
Text
)
-- [Document]
->
m
(
Headers
'[
H
eader
"Content-Disposition"
T
.
Text
]
T
.
Text
)
-- [Document]
getDocumentsTSV
userNodeId
pId
=
do
getDocumentsTSV
v3
userNodeId
pId
=
do
dexp
<-
getDocumentExport
userNodeId
pId
dexp
<-
getDocumentExport
userNodeId
pId
let
ret
=
writeDocs2TsvOrdered
TSVv3
.
doc2tsv
(
deHyperdata
dexp
)
let
ret
=
writeDocs2TsvOrdered
TSVv3
.
doc2tsv
(
deHyperdata
dexp
)
...
@@ -95,6 +97,21 @@ getDocumentsTSV userNodeId pId = do
...
@@ -95,6 +97,21 @@ getDocumentsTSV userNodeId pId = do
ret
ret
getDocumentsTSVv4
::
IsGargServer
err
env
m
=>
NodeId
-- ^ The Node ID of the target user
->
DocId
->
m
(
Headers
'[
H
eader
"Content-Disposition"
T
.
Text
]
T
.
Text
)
-- [Document]
getDocumentsTSVv4
userNodeId
pId
=
do
dexp
<-
getDocumentExport
userNodeId
pId
let
ret
=
writeDocs2TsvOrdered
TSVv4
.
doc2tsv
(
deHyperdata
dexp
)
pure
$
addHeader
(
T
.
concat
[
"attachment; filename=GarganText_DocsList-"
,
T
.
pack
$
show
pId
,
".tsv"
])
ret
...
...
src/Gargantext/API/Routes/Named/Document.hs
View file @
25de8907
...
@@ -43,6 +43,8 @@ data DocumentExportEndpoints mode = DocumentExportEndpoints
...
@@ -43,6 +43,8 @@ data DocumentExportEndpoints mode = DocumentExportEndpoints
:>
Get
'[
Z
IP
]
(
Headers
'[
S
ervant
.
Header
"Content-Disposition"
Text
]
DocumentExportZIP
)
:>
Get
'[
Z
IP
]
(
Headers
'[
S
ervant
.
Header
"Content-Disposition"
Text
]
DocumentExportZIP
)
,
exportTSVEp
::
mode
:-
"tsv"
,
exportTSVEp
::
mode
:-
"tsv"
:>
Get
'[
P
lainText
]
(
Headers
'[
S
ervant
.
Header
"Content-Disposition"
Text
]
Text
)
:>
Get
'[
P
lainText
]
(
Headers
'[
S
ervant
.
Header
"Content-Disposition"
Text
]
Text
)
,
exportTSVv4Ep
::
mode
:-
"tsvv4"
:>
Get
'[
P
lainText
]
(
Headers
'[
S
ervant
.
Header
"Content-Disposition"
Text
]
Text
)
}
deriving
Generic
}
deriving
Generic
newtype
DocumentsFromWriteNodesAPI
mode
=
DocumentsFromWriteNodesAPI
newtype
DocumentsFromWriteNodesAPI
mode
=
DocumentsFromWriteNodesAPI
...
...
src/Gargantext/Core/Text/Corpus/Parsers/TSV/TSVv3.hs
View file @
25de8907
...
@@ -130,6 +130,4 @@ validators =
...
@@ -130,6 +130,4 @@ validators =
,
(
"Title"
,
validTextField
)
,
(
"Title"
,
validTextField
)
,
(
"Source"
,
validTextField
)
,
(
"Source"
,
validTextField
)
,
(
"Abstract"
,
validTextField
)
,
(
"Abstract"
,
validTextField
)
-- TODO validDateField
-- , ("Publication Date", validTextField)
]
]
src/Gargantext/Core/Text/Corpus/Parsers/TSV/TSVv4.hs
View file @
25de8907
...
@@ -12,21 +12,12 @@ Portability : POSIX
...
@@ -12,21 +12,12 @@ Portability : POSIX
module
Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv4
where
module
Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv4
where
import
Data.Csv
import
Data.Csv
-- import Gargantext.Core.Utils.DateUtils qualified as DateUtils
-- import Gargantext.Core.Text.Corpus.Parsers.TSV.IntOrDec
-- import Gargantext.Core.Text.Corpus.Parsers.TSV.IntOrDec
import
Gargantext.Database.Admin.Types.Hyperdata.Document
(
HyperdataDocument
(
..
)
)
import
Gargantext.Database.Admin.Types.Hyperdata.Document
(
HyperdataDocument
(
..
)
)
import
Gargantext.Prelude
import
Gargantext.Prelude
headerTsvGargV4
::
Header
headerTsvGargV4
=
header
[
"title"
,
"source"
,
"publication_year"
,
"publication_month"
,
"publication_day"
,
"abstract"
,
"authors"
]
data
TsvGargV4
=
TsvGargV4
data
TsvGargV4
=
TsvGargV4
{
d_docId
::
!
Int
{
d_docId
::
!
Int
...
@@ -53,25 +44,32 @@ data TsvDoc = TsvDoc
...
@@ -53,25 +44,32 @@ data TsvDoc = TsvDoc
instance
FromNamedRecord
TsvDoc
where
instance
FromNamedRecord
TsvDoc
where
parseNamedRecord
r
=
do
parseNamedRecord
r
=
do
tsv_title
<-
r
.:
"
title"
<|>
r
.:
"
Title"
tsv_title
<-
r
.:
"Title"
tsv_source
<-
r
.:
"
source"
<|>
r
.:
"
Source"
tsv_source
<-
r
.:
"Source"
tsv_publication_date
<-
r
.:
"
publication_date"
<|>
r
.:
"
Publication Date"
tsv_publication_date
<-
r
.:
"Publication Date"
tsv_abstract
<-
r
.:
"
abstract"
<|>
r
.:
"
Abstract"
tsv_abstract
<-
r
.:
"Abstract"
tsv_authors
<-
r
.:
"
authors"
<|>
r
.:
"
Authors"
tsv_authors
<-
r
.:
"Authors"
pure
$
TsvDoc
{
..
}
pure
$
TsvDoc
{
..
}
instance
DefaultOrdered
TsvDoc
where
headerOrder
_
=
header
[
"Publication Date"
,
"Authors"
,
"Title"
,
"Source"
,
"Abstract"
]
instance
ToNamedRecord
TsvDoc
where
instance
ToNamedRecord
TsvDoc
where
toNamedRecord
(
TsvDoc
{
..
})
=
toNamedRecord
(
TsvDoc
{
..
})
=
namedRecord
[
"
t
itle"
.=
tsv_title
namedRecord
[
"
T
itle"
.=
tsv_title
,
"
s
ource"
.=
tsv_source
,
"
S
ource"
.=
tsv_source
,
"
publication_d
ate"
.=
tsv_publication_date
,
"
Publication D
ate"
.=
tsv_publication_date
,
"
a
bstract"
.=
tsv_abstract
,
"
A
bstract"
.=
tsv_abstract
,
"
a
uthors"
.=
tsv_authors
,
"
A
uthors"
.=
tsv_authors
]
]
hyperdataDocument2tsvDoc
::
HyperdataDocument
->
TsvDoc
doc2tsv
::
HyperdataDocument
->
TsvDoc
hyperdataDocument2tsvDoc
h
=
TsvDoc
{
tsv_title
=
m
$
_hd_title
h
doc2tsv
h
=
TsvDoc
{
tsv_title
=
m
$
_hd_title
h
,
tsv_source
=
m
$
_hd_source
h
,
tsv_source
=
m
$
_hd_source
h
,
tsv_publication_date
=
m
$
_hd_publication_date
h
,
tsv_publication_date
=
m
$
_hd_publication_date
h
,
tsv_abstract
=
m
$
_hd_abstract
h
,
tsv_abstract
=
m
$
_hd_abstract
h
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment