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
145
Issues
145
List
Board
Labels
Milestones
Merge Requests
6
Merge Requests
6
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
f05e7b07
Commit
f05e7b07
authored
Aug 31, 2021
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[FIX] list heritage (into NodeStory)
parent
6019e088
Pipeline
#1749
passed with stage
in 31 minutes and 42 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
36 deletions
+64
-36
Ngrams.hs
src/Gargantext/API/Ngrams.hs
+4
-4
Tools.hs
src/Gargantext/API/Ngrams/Tools.hs
+12
-24
NodeStory.hs
src/Gargantext/Core/NodeStory.hs
+47
-7
List.hs
src/Gargantext/Database/Action/Flow/List.hs
+1
-1
No files found.
src/Gargantext/API/Ngrams.hs
View file @
f05e7b07
...
...
@@ -249,7 +249,7 @@ setListNgrams :: HasNodeStory env err m
setListNgrams
listId
ngramsType
ns
=
do
printDebug
"[setListNgrams]"
(
listId
,
ngramsType
)
getter
<-
view
hasNodeStory
var
<-
liftBase
$
(
getter
^.
nse_getter
)
listId
var
<-
liftBase
$
(
getter
^.
nse_getter
)
[
listId
]
liftBase
$
modifyMVar_
var
$
pure
.
(
unNodeStory
.
at
listId
.
_Just
...
...
@@ -286,7 +286,7 @@ commitStatePatch :: HasNodeStory env err m
->
m
(
Versioned
NgramsStatePatch'
)
commitStatePatch
listId
(
Versioned
p_version
p
)
=
do
printDebug
"[commitStatePatch]"
listId
var
<-
getRepoVar
listId
var
<-
getRepoVar
[
listId
]
vq'
<-
liftBase
$
modifyMVar
var
$
\
ns
->
do
let
a
=
ns
^.
unNodeStory
.
at
listId
.
_Just
...
...
@@ -328,7 +328,7 @@ tableNgramsPull :: HasNodeStory env err m
->
m
(
Versioned
NgramsTablePatch
)
tableNgramsPull
listId
ngramsType
p_version
=
do
printDebug
"[tableNgramsPull]"
(
listId
,
ngramsType
)
var
<-
getRepoVar
listId
var
<-
getRepoVar
[
listId
]
r
<-
liftBase
$
readMVar
var
let
...
...
@@ -467,7 +467,7 @@ getNgramsTableMap :: HasNodeStory env err m
->
TableNgrams
.
NgramsType
->
m
(
Versioned
NgramsTableMap
)
getNgramsTableMap
nodeId
ngramsType
=
do
v
<-
getRepoVar
nodeId
v
<-
getRepoVar
[
nodeId
]
repo
<-
liftBase
$
readMVar
v
pure
$
Versioned
(
repo
^.
unNodeStory
.
at
nodeId
.
_Just
.
a_version
)
(
repo
^.
unNodeStory
.
at
nodeId
.
_Just
.
a_state
.
at
ngramsType
.
_Just
)
...
...
src/Gargantext/API/Ngrams/Tools.hs
View file @
f05e7b07
...
...
@@ -28,7 +28,6 @@ import Gargantext.Prelude
import
qualified
Data.HashMap.Strict
as
HM
import
qualified
Data.Map.Strict
as
Map
import
qualified
Data.Set
as
Set
import
qualified
Data.List
as
List
import
Gargantext.Core.NodeStory
mergeNgramsElement
::
NgramsRepoElement
->
NgramsRepoElement
->
NgramsRepoElement
...
...
@@ -46,43 +45,32 @@ getRepo = do
getRepo'
::
HasNodeStory
env
err
m
=>
[
ListId
]
->
m
NodeListStory
getRepo'
listIds
=
do
maybeNodeListStory
<-
head
<$>
List
.
reverse
<$>
mapM
getNodeListStory''
listIds
case
maybeNodeListStory
of
Nothing
->
panic
"[G.A.N.Tools.getRepo']"
Just
nls
->
pure
nls
f
<-
getNodeListStory
v
<-
liftBase
$
f
listIds
v'
<-
liftBase
$
readMVar
v
pure
$
v'
getRepoVar
::
HasNodeStory
env
err
m
=>
ListId
->
m
(
MVar
NodeListStory
)
=>
[
ListId
]
->
m
(
MVar
NodeListStory
)
getRepoVar
l
=
do
f
<-
getNodeListStory
v
<-
liftBase
$
f
l
pure
v
getNodeListStory
::
HasNodeStory
env
err
m
=>
m
(
NodeId
->
IO
(
MVar
NodeListStory
))
=>
m
(
[
NodeId
]
->
IO
(
MVar
NodeListStory
))
getNodeListStory
=
do
env
<-
view
hasNodeStory
pure
$
view
nse_getter
env
getNodeListStory'
::
HasNodeStory
env
err
m
=>
NodeId
->
m
(
IO
NodeListStory
)
getNodeListStory'
n
=
do
f
<-
getNodeListStory
v
<-
liftBase
$
f
n
pure
$
readMVar
v
getNodeListStory''
::
HasNodeStory
env
err
m
=>
NodeId
->
m
NodeListStory
getNodeListStory''
n
=
do
f
<-
getNodeListStory
v
<-
liftBase
$
f
n
v'
<-
liftBase
$
readMVar
v
pure
$
v'
listNgramsFromRepo
::
[
ListId
]
->
NgramsType
->
NodeListStory
->
HashMap
NgramsTerm
NgramsRepoElement
listNgramsFromRepo
::
[
ListId
]
->
NgramsType
->
NodeListStory
->
HashMap
NgramsTerm
NgramsRepoElement
listNgramsFromRepo
nodeIds
ngramsType
repo
=
HM
.
fromList
$
Map
.
toList
$
Map
.
unionsWith
mergeNgramsElement
ngrams
...
...
src/Gargantext/Core/NodeStory.hs
View file @
f05e7b07
...
...
@@ -7,6 +7,10 @@ Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
TODO:
- remove
- filter
- charger les listes
-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
...
...
@@ -35,7 +39,7 @@ import Gargantext.Core.Utils.Prefix (unPrefix)
import
Gargantext.Database.Prelude
(
CmdM
'
,
HasConnectionPool
,
HasConfig
)
import
Gargantext.Database.Query.Table.Node.Error
(
HasNodeError
())
import
Gargantext.Prelude
import
System.Directory
(
renameFile
,
createDirectoryIfMissing
,
doesFileExist
)
import
System.Directory
(
renameFile
,
createDirectoryIfMissing
,
doesFileExist
,
removeFile
)
import
System.IO
(
FilePath
,
hClose
)
import
System.IO.Temp
(
withTempFile
)
import
qualified
Data.ByteString.Lazy
as
DBL
...
...
@@ -48,7 +52,7 @@ import qualified Gargantext.Database.Query.Table.Ngrams as TableNgrams
data
NodeStoryEnv
=
NodeStoryEnv
{
_nse_var
::
!
(
MVar
NodeListStory
)
,
_nse_saver
::
!
(
IO
()
)
,
_nse_getter
::
NodeId
->
IO
(
MVar
NodeListStory
)
,
_nse_getter
::
[
NodeId
]
->
IO
(
MVar
NodeListStory
)
--, _nse_cleaner :: !(IO ()) -- every 12 hours: cleans the repos of unused NodeStories
-- , _nse_lock :: !FileLock -- TODO (it depends on the option: if with database or file only)
}
...
...
@@ -68,7 +72,7 @@ class (HasNodeStoryVar env, HasNodeStorySaver env)
hasNodeStory
::
Getter
env
NodeStoryEnv
class
HasNodeStoryVar
env
where
hasNodeStoryVar
::
Getter
env
(
NodeId
->
IO
(
MVar
NodeListStory
))
hasNodeStoryVar
::
Getter
env
(
[
NodeId
]
->
IO
(
MVar
NodeListStory
))
class
HasNodeStorySaver
env
where
hasNodeStorySaver
::
Getter
env
(
IO
()
)
...
...
@@ -76,7 +80,7 @@ class HasNodeStorySaver env where
------------------------------------------------------------------------
readNodeStoryEnv
::
NodeStoryDir
->
IO
NodeStoryEnv
readNodeStoryEnv
nsd
=
do
mvar
<-
nodeStoryVar
nsd
Nothing
0
mvar
<-
nodeStoryVar
nsd
Nothing
[
0
]
saver
<-
mkNodeStorySaver
nsd
mvar
pure
$
NodeStoryEnv
mvar
saver
(
nodeStoryVar
nsd
(
Just
mvar
))
...
...
@@ -94,11 +98,11 @@ mkNodeStorySaver nsd mvns = mkDebounce settings
nodeStoryVar
::
NodeStoryDir
->
Maybe
(
MVar
NodeListStory
)
->
NodeId
->
[
NodeId
]
->
IO
(
MVar
NodeListStory
)
nodeStoryVar
nsd
Nothing
ni
=
nodeStoryInc
nsd
Nothing
ni
>>=
newMVar
nodeStoryVar
nsd
Nothing
ni
=
nodeStoryInc
s
nsd
Nothing
ni
>>=
newMVar
nodeStoryVar
nsd
(
Just
mv
)
ni
=
do
_
<-
modifyMVar_
mv
$
\
mv'
->
(
nodeStoryInc
nsd
(
Just
mv'
)
ni
)
_
<-
modifyMVar_
mv
$
\
mv'
->
(
nodeStoryInc
s
nsd
(
Just
mv'
)
ni
)
pure
mv
...
...
@@ -112,6 +116,32 @@ nodeStoryInc nsd (Just ns@(NodeStory nls)) ni = do
nodeStoryInc
nsd
Nothing
ni
=
nodeStoryRead
nsd
ni
nodeStoryIncs
::
NodeStoryDir
->
Maybe
NodeListStory
->
[
NodeId
]
->
IO
NodeListStory
nodeStoryIncs
_
Nothing
[]
=
panic
"nodeStoryIncs: Empty"
nodeStoryIncs
nsd
(
Just
nls
)
ns
=
foldM
(
\
m
n
->
nodeStoryInc
nsd
(
Just
m
)
n
)
nls
ns
nodeStoryIncs
nsd
Nothing
(
ni
:
ns
)
=
do
m
<-
nodeStoryRead
nsd
ni
nodeStoryIncs
nsd
(
Just
m
)
ns
nodeStoryDec
::
NodeStoryDir
->
NodeListStory
->
NodeId
->
IO
NodeListStory
nodeStoryDec
nsd
ns
@
(
NodeStory
nls
)
ni
=
do
case
Map
.
lookup
ni
nls
of
Nothing
->
do
-- we make sure the corresponding file repo is really removed
_
<-
nodeStoryRemove
nsd
ni
pure
ns
Just
_
->
do
let
ns'
=
Map
.
filterWithKey
(
\
k
_v
->
k
/=
ni
)
nls
_
<-
nodeStoryRemove
nsd
ni
pure
$
NodeStory
ns'
-- | TODO lock
nodeStoryRead
::
NodeStoryDir
->
NodeId
->
IO
NodeListStory
nodeStoryRead
nsd
ni
=
do
...
...
@@ -122,6 +152,16 @@ nodeStoryRead nsd ni = do
then
deserialise
<$>
DBL
.
readFile
nsp
else
pure
(
initNodeStory
ni
)
nodeStoryRemove
::
NodeStoryDir
->
NodeId
->
IO
()
nodeStoryRemove
nsd
ni
=
do
let
nsp
=
nodeStoryPath
nsd
ni
exists
<-
doesFileExist
nsp
if
exists
then
removeFile
nsp
else
pure
()
nodeStoryRead_test
::
NodeStoryDir
->
NodeId
->
IO
(
Maybe
[
TableNgrams
.
NgramsType
])
nodeStoryRead_test
nsd
ni
=
nodeStoryRead
nsd
ni
>>=
\
n
->
pure
$
fmap
Map
.
keys
...
...
src/Gargantext/Database/Action/Flow/List.hs
View file @
f05e7b07
...
...
@@ -178,7 +178,7 @@ putListNgrams' listId ngramsType ns = do
-- The modifyMVar_ would test the patch with applicable first.
-- If valid the rest would be atomic and no merge is required.
-}
var
<-
getRepoVar
listId
var
<-
getRepoVar
[
listId
]
liftBase
$
modifyMVar_
var
$
\
r
->
do
pure
$
r
&
unNodeStory
.
at
listId
.
_Just
.
a_version
+~
1
&
unNodeStory
.
at
listId
.
_Just
.
a_history
%~
(
p
:
)
...
...
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