Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
Przemyslaw Kaminski
haskell-gargantext
Commits
ee2b59e9
Commit
ee2b59e9
authored
Sep 07, 2020
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[FLOW] preparing Hyperdata ToNode instance
parent
898dca82
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
72 additions
and
27 deletions
+72
-27
Types.hs
src/Gargantext/Core/Flow/Types.hs
+2
-1
Text.hs
src/Gargantext/Core/Text.hs
+0
-1
Flow.hs
src/Gargantext/Database/Action/Flow.hs
+34
-6
Types.hs
src/Gargantext/Database/Action/Flow/Types.hs
+1
-0
Node.hs
src/Gargantext/Database/Admin/Types/Node.hs
+6
-6
Insert.hs
src/Gargantext/Database/Query/Table/Node/Document/Insert.hs
+29
-13
No files found.
src/Gargantext/Core/Flow/Types.hs
View file @
ee2b59e9
...
...
@@ -23,10 +23,11 @@ import Gargantext.Database.Admin.Types.Hyperdata
import
Gargantext.Database.Admin.Types.Node
import
Gargantext.Database.Schema.Ngrams
(
Ngrams
,
NgramsType
)
import
Gargantext.Prelude
import
Gargantext.Prelude.Crypto.Hash
(
Hash
)
class
UniqId
a
where
uniqId
::
Lens'
a
(
Maybe
Hash
Id
)
uniqId
::
Lens'
a
(
Maybe
Hash
)
instance
UniqId
HyperdataDocument
where
...
...
src/Gargantext/Core/Text.hs
View file @
ee2b59e9
...
...
@@ -21,7 +21,6 @@ import NLP.FullStop (segment)
import
qualified
Data.Text
as
DT
-----------------------------------------------------------------
class
HasText
h
where
hasText
::
h
->
[
Text
]
...
...
src/Gargantext/Database/Action/Flow.hs
View file @
ee2b59e9
...
...
@@ -49,10 +49,11 @@ import Data.Either
import
Data.List
(
concat
)
import
qualified
Data.Map
as
Map
import
Data.Map
(
Map
,
lookup
)
import
Data.Maybe
(
Maybe
(
..
),
catMaybes
)
import
Data.Maybe
(
Maybe
(
..
),
catMaybes
,
fromMaybe
)
import
Data.Monoid
import
Data.Swagger
import
Data.Text
(
splitOn
,
intercalate
)
import
Data.Time.Segment
(
jour
)
import
Data.Traversable
(
traverse
)
import
Data.Tuple.Extra
(
first
,
second
)
import
GHC.Generics
(
Generic
)
...
...
@@ -70,7 +71,7 @@ import Gargantext.Database.Query.Table.Node
import
Gargantext.Database.Query.Table.Node.Document.Insert
-- (insertDocuments, ReturnId(..), addUniqIdsDoc, addUniqIdsContact, ToDbData(..))
import
Gargantext.Database.Query.Tree.Root
(
getOrMkRoot
,
getOrMk_RootWithCorpus
)
import
Gargantext.Database.Action.Search
(
searchDocInDatabase
)
import
Gargantext.Database.Admin.Config
(
userMaster
,
corpusMasterName
)
import
Gargantext.Database.Admin.Config
(
userMaster
,
corpusMasterName
,
nodeTypeId
)
import
Gargantext.Database.Query.Table.Node.Error
(
HasNodeError
(
..
))
import
Gargantext.Database.Admin.Types.Hyperdata
import
Gargantext.Database.Admin.Types.Node
-- (HyperdataDocument(..), NodeType(..), NodeId, UserId, ListId, CorpusId, RootId, MasterCorpusId, MasterUserId)
...
...
@@ -78,17 +79,20 @@ import Gargantext.Database.Prelude
import
Gargantext.Database.Query.Table.Ngrams
import
Gargantext.Database.Query.Table.NodeNgrams
(
listInsertDb
,
getCgramsId
)
import
Gargantext.Database.Query.Table.NodeNodeNgrams2
import
Gargantext.Database.Schema.Node
(
NodePoly
(
..
))
import
Gargantext.Core.Ext.IMT
(
toSchoolName
)
import
Gargantext.Core.Utils.Prefix
(
unPrefix
,
unPrefixSwagger
)
import
Gargantext.Core.Ext.IMTUser
(
deserialiseImtUsersFromFile
)
import
Gargantext.Core.Text
import
Gargantext.Prelude
import
Gargantext.Prelude.Crypto.Hash
(
Hash
)
import
Gargantext.Core.Text.Corpus.Parsers
(
parseFile
,
FileFormat
)
import
Gargantext.Core.Text.List
(
buildNgramsLists
,
StopSize
(
..
))
import
Gargantext.Core.Text.Terms.Mono.Stem.En
(
stemIt
)
import
Gargantext.Core.Text.Terms
import
qualified
Gargantext.Database.Query.Table.Node.Document.Add
as
Doc
(
add
)
import
qualified
Gargantext.Core.Text.Corpus.API
as
API
import
qualified
Data.Text
as
DT
------------------------------------------------------------------------
-- TODO use internal with API name (could be old data)
...
...
@@ -242,6 +246,19 @@ insertDocs uId cId hs = do
_
<-
Doc
.
add
cId
newIds'
pure
(
newIds'
,
documentsWithId
)
{-
-- TODO Maybe NodeId
toNode :: Hyperdata a => NodeType -> ParentId -> UserId -> a -> Node a
toNode NodeDocument p u h = Node 0 "" (nodeTypeId nt) u (Just p) n date h
where
n = maybe "No Title" (DT.take 255) (_hd_title h)
date = jour y m d
y = maybe 0 fromIntegral $ _hd_publication_year h
m = fromMaybe 1 $ _hd_publication_month h
d = fromMaybe 1 $ _hd_publication_day h
toNode _ _ _ _ = undefined
-}
insertMasterDocs
::
(
FlowCmdM
env
err
m
,
FlowCorpus
a
...
...
@@ -254,6 +271,7 @@ insertMasterDocs :: ( FlowCmdM env err m
insertMasterDocs
c
lang
hs
=
do
(
masterUserId
,
_
,
masterCorpusId
)
<-
getOrMk_RootWithCorpus
(
UserName
userMaster
)
(
Left
corpusMasterName
)
c
(
ids'
,
documentsWithId
)
<-
insertDocs
masterUserId
masterCorpusId
hs
-- (ids', documentsWithId) <- insertDocs masterUserId masterCorpusId (map (toNode NodeDocument masterCorpusId masterUserId ) hs )
_
<-
Doc
.
add
masterCorpusId
ids'
-- TODO
-- create a corpus with database name (CSV or PubMed)
...
...
@@ -292,20 +310,20 @@ insertMasterDocs c lang hs = do
------------------------------------------------------------------------
viewUniqId'
::
UniqId
a
=>
a
->
(
Hash
Id
,
a
)
->
(
Hash
,
a
)
viewUniqId'
d
=
maybe
err
(
\
h
->
(
h
,
d
))
(
view
uniqId
d
)
where
err
=
panic
"[ERROR] Database.Flow.toInsert"
toInserted
::
[
ReturnId
]
->
Map
Hash
Id
ReturnId
->
Map
Hash
ReturnId
toInserted
=
Map
.
fromList
.
map
(
\
r
->
(
reUniqId
r
,
r
)
)
.
filter
(
\
r
->
reInserted
r
==
True
)
mergeData
::
Map
Hash
Id
ReturnId
->
Map
Hash
Id
a
mergeData
::
Map
Hash
ReturnId
->
Map
Hash
a
->
[
DocumentWithId
a
]
mergeData
rs
=
catMaybes
.
map
toDocumentWithId
.
Map
.
toList
where
...
...
@@ -350,6 +368,16 @@ instance HasText HyperdataDocument
,
_hd_abstract
h
]
instance
HasText
(
Node
HyperdataDocument
)
where
hasText
n
=
catMaybes
[
_hd_title
h
,
_hd_abstract
h
]
where
h
=
_node_hyperdata
n
instance
ExtractNgramsT
HyperdataDocument
where
extractNgramsT
::
TermType
Lang
...
...
src/Gargantext/Database/Action/Flow/Types.hs
View file @
ee2b59e9
...
...
@@ -39,5 +39,6 @@ type FlowCorpus a = ( AddUniqId a
,
InsertDb
a
,
ExtractNgramsT
a
,
HasText
a
-- , ToNode a
)
src/Gargantext/Database/Admin/Types/Node.hs
View file @
ee2b59e9
...
...
@@ -38,6 +38,7 @@ import Servant
import
qualified
Opaleye
as
O
import
Opaleye
(
QueryRunnerColumnDefault
,
queryRunnerColumnDefault
,
PGInt4
,
PGTSVector
,
Nullable
,
fieldQueryRunnerColumn
)
import
Test.QuickCheck
(
elements
)
import
Gargantext.Prelude.Crypto.Hash
(
Hash
)
import
Test.QuickCheck.Arbitrary
import
Test.QuickCheck.Instances.Text
()
import
Test.QuickCheck.Instances.Time
()
...
...
@@ -51,10 +52,9 @@ import Gargantext.Prelude
type
UserId
=
Int
type
MasterUserId
=
UserId
type
HashId
=
Text
------------------------------------------------------------------------
-- | NodePoly indicates that Node has a Polymorphism Type
type
Node
json
=
NodePoly
NodeId
Hash
Id
NodeTypeId
UserId
(
Maybe
ParentId
)
NodeName
UTCTime
json
type
Node
json
=
NodePoly
NodeId
Hash
NodeTypeId
UserId
(
Maybe
ParentId
)
NodeName
UTCTime
json
-- | NodeSearch (queries)
-- type NodeSearch json = NodePolySearch NodeId NodeTypeId UserId (Maybe ParentId) NodeName UTCTime json (Maybe TSVector)
...
...
@@ -62,7 +62,7 @@ type Node json = NodePoly NodeId HashId NodeTypeId UserId (Maybe ParentId) Nod
------------------------------------------------------------------------
instance
(
Typeable
hyperdata
,
ToSchema
hyperdata
)
=>
ToSchema
(
NodePoly
NodeId
Hash
Id
NodeTypeId
ToSchema
(
NodePoly
NodeId
Hash
NodeTypeId
(
Maybe
UserId
)
ParentId
NodeName
UTCTime
hyperdata
...
...
@@ -70,7 +70,7 @@ instance (Typeable hyperdata, ToSchema hyperdata) =>
declareNamedSchema
=
wellNamedSchema
"_node_"
instance
(
Typeable
hyperdata
,
ToSchema
hyperdata
)
=>
ToSchema
(
NodePoly
NodeId
Hash
Id
NodeTypeId
ToSchema
(
NodePoly
NodeId
Hash
NodeTypeId
UserId
(
Maybe
ParentId
)
NodeName
UTCTime
hyperdata
...
...
@@ -93,12 +93,12 @@ instance (Typeable hyperdata, ToSchema hyperdata) =>
)
where
declareNamedSchema
=
wellNamedSchema
"_ns_"
instance
(
Arbitrary
hyperdata
,
Arbitrary
nodeId
instance
(
Arbitrary
nodeId
,
Arbitrary
hashId
,
Arbitrary
nodeTypeId
,
Arbitrary
userId
,
Arbitrary
nodeParentId
,
Arbitrary
hyperdata
)
=>
Arbitrary
(
NodePoly
nodeId
hashId
nodeTypeId
userId
nodeParentId
NodeName
UTCTime
hyperdata
)
where
--arbitrary = Node 1 1 (Just 1) 1 "name" (jour 2018 01 01) (arbitrary) (Just "")
...
...
src/Gargantext/Database/Query/Table/Node/Document/Insert.hs
View file @
ee2b59e9
...
...
@@ -57,7 +57,7 @@ module Gargantext.Database.Query.Table.Node.Document.Insert
import
Control.Lens
(
set
,
view
)
import
Control.Lens.Cons
import
Control.Lens.Prism
import
Data.Aeson
(
toJSON
{-, ToJSON-}
)
import
Data.Aeson
(
toJSON
,
encode
{-, ToJSON-}
)
import
Data.Maybe
(
maybe
)
import
Data.Text
(
Text
)
-- import Data.ByteString (ByteString)
...
...
@@ -73,22 +73,11 @@ import Gargantext.Database.Admin.Config (nodeTypeId)
import
Gargantext.Database.Admin.Types.Hyperdata
import
Gargantext.Database.Admin.Types.Node
import
Gargantext.Database.Prelude
(
Cmd
,
runPGSQuery
{-, formatPGSQuery-}
)
import
Gargantext.Database.Schema.Node
(
NodePoly
(
..
))
import
Gargantext.Prelude
import
Gargantext.Prelude.Crypto.Hash
(
hash
)
import
qualified
Data.Text
as
DT
(
pack
,
concat
,
take
)
-- TODO : the import of Document constructor below does not work
-- import Gargantext.Database.Types.Node (Document)
--import Gargantext.Database.Types.Node (docExample, hyperdataDocument, HyperdataDocument(..)
-- , hyperdataDocument_uniqId
-- , hyperdataDocument_title
-- , hyperdataDocument_abstract
-- , hyperdataDocument_source
-- , Node(..), node_typename
-- , node_userId
-- , node_parentId, node_name, node_hyperdata, hyperdataDocuments
-- , NodeTypeId
-- )
{-| To Print result query
import Data.ByteString.Internal (ByteString)
import Database.PostgreSQL.Simple (formatQuery)
...
...
@@ -134,6 +123,17 @@ instance InsertDb HyperdataContact
,
(
toField
.
toJSON
)
h
]
instance
InsertDb
(
Node
HyperdataDocument
)
where
insertDb'
_u
_p
(
Node
_nid
hashId
t
u
p
n
d
h
)
=
[
toField
hashId
,
toField
t
,
toField
u
,
toField
p
,
toField
n
,
toField
d
,
toField
h
]
-- | Debug SQL function
--
-- to print rendered query (Debug purpose) use @formatQuery@ function.
...
...
@@ -212,6 +212,22 @@ instance AddUniqId HyperdataDocument
,
\
d
->
maybeText
(
_hd_source
d
)
,
\
d
->
maybeText
(
_hd_publication_date
d
)
]
-- TODO put this elsewhere (fix bin/gargantext-init/Main.hs too)
secret
::
Text
secret
=
"Database secret to change"
instance
AddUniqId
(
Node
HyperdataDocument
)
where
addUniqId
(
Node
nid
_
t
u
p
n
d
h
)
=
Node
nid
hashId
t
u
p
n
d
h
where
hashId
=
"
\\
x"
<>
(
hash
$
DT
.
concat
params
)
params
=
[
secret
,
cs
$
show
$
nodeTypeId
NodeDocument
,
n
,
cs
$
show
p
,
cs
$
encode
h
]
---------------------------------------------------------------------------
-- * Uniqueness of document definition
...
...
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