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
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
Grégoire Locqueville
haskell-gargantext
Commits
aebaa330
Commit
aebaa330
authored
Jan 31, 2019
by
Nicolas Pouillard
Committed by
Alexandre Delanoë
Jan 31, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NgramsPatches: overall structure, missing many instances
parent
cfbbf557
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
194 additions
and
27 deletions
+194
-27
package.yaml
package.yaml
+1
-0
Ngrams.hs
src/Gargantext/API/Ngrams.hs
+180
-23
Node.hs
src/Gargantext/API/Node.hs
+3
-2
Settings.hs
src/Gargantext/API/Settings.hs
+8
-0
Utils.hs
src/Gargantext/Database/Utils.hs
+1
-1
stack.yaml
stack.yaml
+1
-1
No files found.
package.yaml
View file @
aebaa330
...
@@ -165,6 +165,7 @@ library:
...
@@ -165,6 +165,7 @@ library:
-
transformers-base
-
transformers-base
-
unordered-containers
-
unordered-containers
-
uuid
-
uuid
-
validity
-
vector
-
vector
-
wai
-
wai
-
wai-cors
-
wai-cors
...
...
src/Gargantext/API/Ngrams.hs
View file @
aebaa330
...
@@ -15,6 +15,7 @@ add get
...
@@ -15,6 +15,7 @@ add get
-}
-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE NoImplicitPrelude #-}
...
@@ -24,17 +25,19 @@ add get
...
@@ -24,17 +25,19 @@ add get
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS -fno-warn-orphans #-}
{-# OPTIONS -fno-warn-orphans #-}
module
Gargantext.API.Ngrams
module
Gargantext.API.Ngrams
where
where
import
Prelude
(
round
)
import
Prelude
(
Enum
,
Bounded
,
Semigroup
(
..
),
minBound
,
maxBound
,
round
)
-- import Gargantext.Database.Schema.User (UserId)
-- import Gargantext.Database.Schema.User (UserId)
import
Data.Functor
((
$>
))
import
Data.Functor
((
$>
))
import
Data.Patch.Class
(
Replace
,
replace
,
new
)
import
Data.Patch.Class
(
Replace
,
replace
,
Action
(
act
),
Applicable
(
..
),
Composable
(
..
),
Group
(
..
),
Transformable
(
..
),
PairPatch
(
..
),
Patched
,
ConflictResolution
)
--
import qualified Data.Map.Strict.Patch as PM
import
qualified
Data.Map.Strict.Patch
as
PM
import
Data.Monoid
import
Data.Monoid
--import Data.Semigroup
--import Data.Semigroup
import
Data.Set
(
Set
)
import
Data.Set
(
Set
)
...
@@ -44,9 +47,11 @@ import Data.Tuple.Extra (first)
...
@@ -44,9 +47,11 @@ import Data.Tuple.Extra (first)
-- import qualified Data.Map.Strict as DM
-- import qualified Data.Map.Strict as DM
import
Data.Map.Strict
(
Map
,
mapKeys
,
fromListWith
)
import
Data.Map.Strict
(
Map
,
mapKeys
,
fromListWith
)
--import qualified Data.Set as Set
--import qualified Data.Set as Set
import
Control.Lens
(
makeLenses
,
Prism
'
,
prism'
,
(
^..
),
(
.~
),
(
#
),
to
,
withIndex
,
folded
,
ifolded
)
import
Control.Concurrent
import
Control.Lens
(
makeLenses
,
makePrisms
,
Getter
,
Lens
'
,
Prism
'
,
prism'
,
Iso
'
,
iso
,
(
^..
),
(
.~
),
(
#
),
{-to, withIndex, folded, ifolded,-}
view
,
(
^.
),
(
+~
),
(
%~
),
at
,
_Just
,
Each
(
..
),
dropping
,
taking
)
import
Control.Monad
(
guard
)
import
Control.Monad
(
guard
)
import
Control.Monad.Error.Class
(
MonadError
,
throwError
)
import
Control.Monad.Error.Class
(
MonadError
,
throwError
)
import
Control.Monad.Reader
import
Data.Aeson
import
Data.Aeson
import
Data.Aeson.TH
(
deriveJSON
)
import
Data.Aeson.TH
(
deriveJSON
)
import
Data.Either
(
Either
(
Left
))
import
Data.Either
(
Either
(
Left
))
...
@@ -54,17 +59,18 @@ import Data.Map (lookup)
...
@@ -54,17 +59,18 @@ import Data.Map (lookup)
import
qualified
Data.HashMap.Strict.InsOrd
as
InsOrdHashMap
import
qualified
Data.HashMap.Strict.InsOrd
as
InsOrdHashMap
import
Data.Swagger
hiding
(
version
,
patch
)
import
Data.Swagger
hiding
(
version
,
patch
)
import
Data.Text
(
Text
)
import
Data.Text
(
Text
)
import
Data.Validity
import
GHC.Generics
(
Generic
)
import
GHC.Generics
(
Generic
)
import
Gargantext.Core.Utils.Prefix
(
unPrefix
)
import
Gargantext.Core.Utils.Prefix
(
unPrefix
)
import
Gargantext.Database.Types.Node
(
NodeType
(
..
))
import
Gargantext.Database.Schema.Node
(
defaultList
,
HasNodeError
)
import
Gargantext.Database.Schema.Node
(
defaultList
,
HasNodeError
)
import
Gargantext.Database.Schema.Ngrams
(
NgramsType
,
NgramsTypeId
,
ngramsTypeId
,
NgramsTableData
(
..
))
-- import Gargantext.Database.Schema.Ngrams (NgramsTypeId, ngramsTypeId)
import
Gargantext.Database.Schema.Ngrams
(
NgramsType
,
NgramsTableData
(
..
))
import
qualified
Gargantext.Database.Schema.Ngrams
as
Ngrams
import
qualified
Gargantext.Database.Schema.Ngrams
as
Ngrams
import
Gargantext.Database.Schema.NodeNgram
-- import Gargantext.Database.Schema.NodeNgram hiding (Action)
import
Gargantext.Database.Utils
(
Cmd
)
import
Gargantext.Database.Utils
(
Cmd
M
)
import
Gargantext.Prelude
import
Gargantext.Prelude
import
Gargantext.Core.Types
(
ListType
(
..
),
ListTypeId
,
ListId
,
CorpusId
,
Limit
,
Offset
,
listTypeId
)
-- import Gargantext.Core.Types (ListTypeId
, listTypeId)
import
Prelude
(
Enum
,
Bounded
,
minBound
,
maxBound
)
import
Gargantext.Core.Types
(
ListType
(
..
),
ListId
,
CorpusId
,
Limit
,
Offset
)
import
Servant
hiding
(
Patch
)
import
Servant
hiding
(
Patch
)
import
Test.QuickCheck
(
elements
)
import
Test.QuickCheck
(
elements
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
...
@@ -116,9 +122,15 @@ instance Arbitrary NgramsElement where
...
@@ -116,9 +122,15 @@ instance Arbitrary NgramsElement where
arbitrary
=
elements
[
NgramsElement
"sport"
GraphList
1
Nothing
mempty
]
arbitrary
=
elements
[
NgramsElement
"sport"
GraphList
1
Nothing
mempty
]
------------------------------------------------------------------------
------------------------------------------------------------------------
newtype
NgramsTable
=
NgramsTable
{
_ngramsTable
::
[
NgramsElement
]
}
newtype
NgramsTable
=
NgramsTable
[
NgramsElement
]
deriving
(
Ord
,
Eq
,
Generic
,
ToJSON
,
FromJSON
,
Show
)
deriving
(
Ord
,
Eq
,
Generic
,
ToJSON
,
FromJSON
,
Show
)
makePrisms
''
N
gramsTable
instance
Each
NgramsTable
NgramsTable
NgramsElement
NgramsElement
where
each
=
_NgramsTable
.
each
-- TODO discuss
-- | TODO Check N and Weight
-- | TODO Check N and Weight
toNgramsElement
::
[
NgramsTableData
]
->
[
NgramsElement
]
toNgramsElement
::
[
NgramsTableData
]
->
[
NgramsElement
]
toNgramsElement
ns
=
map
toNgramsElement'
ns
toNgramsElement
ns
=
map
toNgramsElement'
ns
...
@@ -173,9 +185,45 @@ data PatchSet a = PatchSet
...
@@ -173,9 +185,45 @@ data PatchSet a = PatchSet
}
}
deriving
(
Eq
,
Ord
,
Show
,
Generic
)
deriving
(
Eq
,
Ord
,
Show
,
Generic
)
makeLenses
''
P
atchSet
instance
(
Ord
a
,
Arbitrary
a
)
=>
Arbitrary
(
PatchSet
a
)
where
instance
(
Ord
a
,
Arbitrary
a
)
=>
Arbitrary
(
PatchSet
a
)
where
arbitrary
=
PatchSet
<$>
arbitrary
<*>
arbitrary
arbitrary
=
PatchSet
<$>
arbitrary
<*>
arbitrary
type
instance
ConflictResolution
(
PatchSet
a
)
=
PatchSet
a
->
PatchSet
a
->
PatchSet
a
instance
Ord
a
=>
Semigroup
(
PatchSet
a
)
where
p
<>
q
=
PatchSet
{
_rem
=
(
q
^.
rem
)
`
Set
.
difference
`
(
p
^.
add
)
<>
p
^.
rem
,
_add
=
(
q
^.
add
)
`
Set
.
difference
`
(
p
^.
rem
)
<>
p
^.
add
}
-- TODO Review
instance
Ord
a
=>
Monoid
(
PatchSet
a
)
where
mempty
=
PatchSet
mempty
mempty
instance
Ord
a
=>
Group
(
PatchSet
a
)
where
invert
(
PatchSet
r
a
)
=
PatchSet
a
r
instance
Ord
a
=>
Composable
(
PatchSet
a
)
where
composable
_
_
=
mempty
instance
Ord
a
=>
Action
(
PatchSet
a
)
(
Set
a
)
where
act
p
source
=
(
source
`
Set
.
difference
`
(
p
^.
rem
))
<>
p
^.
add
instance
Applicable
(
PatchSet
a
)
(
Set
a
)
where
applicable
_
_
=
mempty
type
instance
Patched
(
PatchSet
a
)
=
Set
a
instance
Ord
a
=>
Validity
(
PatchSet
a
)
where
validate
p
=
check
(
Set
.
disjoint
(
p
^.
rem
)
(
p
^.
add
))
"_rem and _add should be dijoint"
instance
Ord
a
=>
Transformable
(
PatchSet
a
)
where
transformable
=
undefined
conflicts
_p
_q
=
undefined
transformWith
=
undefined
instance
ToJSON
a
=>
ToJSON
(
PatchSet
a
)
where
instance
ToJSON
a
=>
ToJSON
(
PatchSet
a
)
where
toJSON
=
genericToJSON
$
unPrefix
"_"
toJSON
=
genericToJSON
$
unPrefix
"_"
toEncoding
=
genericToEncoding
$
unPrefix
"_"
toEncoding
=
genericToEncoding
$
unPrefix
"_"
...
@@ -203,26 +251,50 @@ data NgramsPatch =
...
@@ -203,26 +251,50 @@ data NgramsPatch =
,
_patch_list
::
Replace
ListType
-- TODO Map UserId ListType
,
_patch_list
::
Replace
ListType
-- TODO Map UserId ListType
}
}
deriving
(
Ord
,
Eq
,
Show
,
Generic
)
deriving
(
Ord
,
Eq
,
Show
,
Generic
)
deriveJSON
(
unPrefix
"_"
)
''
N
gramsPatch
deriveJSON
(
unPrefix
"_"
)
''
N
gramsPatch
makeLenses
''
N
gramsPatch
makeLenses
''
N
gramsPatch
-- instance Semigroup NgramsPatch where
instance
ToSchema
NgramsPatch
instance
ToSchema
NgramsPatch
instance
Arbitrary
NgramsPatch
where
instance
Arbitrary
NgramsPatch
where
arbitrary
=
NgramsPatch
<$>
arbitrary
<*>
(
replace
<$>
arbitrary
<*>
arbitrary
)
arbitrary
=
NgramsPatch
<$>
arbitrary
<*>
(
replace
<$>
arbitrary
<*>
arbitrary
)
newtype
NgramsTablePatch
=
_NgramsPatch
::
Iso'
NgramsPatch
(
PairPatch
(
PatchSet
NgramsTerm
)
(
Replace
ListType
))
NgramsTablePatch
{
_ntp_ngrams_patches
::
Map
NgramsTerm
NgramsPatch
}
_NgramsPatch
=
iso
(
\
(
NgramsPatch
c
l
)
->
c
:*:
l
)
(
\
(
c
:*:
l
)
->
NgramsPatch
c
l
)
deriving
(
Ord
,
Eq
,
Show
,
Generic
,
Arbitrary
,
ToJSON
,
FromJSON
)
makeLenses
''
N
gramsTablePatch
instance
Semigroup
NgramsPatch
where
p
<>
q
=
_NgramsPatch
#
(
p
^.
_NgramsPatch
<>
q
^.
_NgramsPatch
)
instance
Monoid
NgramsPatch
where
mempty
=
_NgramsPatch
#
mempty
type
PatchMap
=
PM
.
Patch
newtype
NgramsTablePatch
=
NgramsTablePatch
(
PatchMap
NgramsTerm
NgramsPatch
)
deriving
(
Eq
,
Show
,
Generic
,
ToJSON
,
FromJSON
,
Semigroup
,
Monoid
)
makePrisms
''
N
gramsTablePatch
instance
ToSchema
(
PatchMap
NgramsTerm
NgramsPatch
)
instance
ToSchema
NgramsTablePatch
instance
ToSchema
NgramsTablePatch
instance
Arbitrary
NgramsTablePatch
where
arbitrary
=
NgramsTablePatch
<$>
PM
.
fromMap
<$>
arbitrary
instance
Validity
NgramsTablePatch
where
validate
=
undefined
ntp_ngrams_patches
::
Lens'
NgramsTablePatch
(
Map
NgramsTerm
NgramsPatch
)
ntp_ngrams_patches
=
undefined
-- TODO: replace by mempty once we have the Monoid instance
-- TODO: replace by mempty once we have the Monoid instance
emptyNgramsTablePatch
::
NgramsTablePatch
emptyNgramsTablePatch
::
NgramsTablePatch
emptyNgramsTablePatch
=
NgramsTablePatch
mempty
emptyNgramsTablePatch
=
NgramsTablePatch
mempty
instance
Transformable
NgramsTablePatch
where
transformWith
=
undefined
transformable
=
undefined
conflicts
=
undefined
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
type
Version
=
Int
type
Version
=
Int
...
@@ -289,6 +361,7 @@ instance HasNgramError ServantErr where
...
@@ -289,6 +361,7 @@ instance HasNgramError ServantErr where
ngramError
::
(
MonadError
e
m
,
HasNgramError
e
)
=>
NgramError
->
m
a
ngramError
::
(
MonadError
e
m
,
HasNgramError
e
)
=>
NgramError
->
m
a
ngramError
nne
=
throwError
$
_NgramError
#
nne
ngramError
nne
=
throwError
$
_NgramError
#
nne
{-
-- TODO: Replace.old is ignored which means that if the current list
-- TODO: Replace.old is ignored which means that if the current list
-- `GraphList` and that the patch is `Replace CandidateList StopList` then
-- `GraphList` and that the patch is `Replace CandidateList StopList` then
-- the list is going to be `StopList` while it should keep `GraphList`.
-- the list is going to be `StopList` while it should keep `GraphList`.
...
@@ -309,6 +382,7 @@ mkChildrenGroups addOrRem nt patches =
...
@@ -309,6 +382,7 @@ mkChildrenGroups addOrRem nt patches =
| (parent, patch) <- patches ^.. ntp_ngrams_patches . ifolded . withIndex
| (parent, patch) <- patches ^.. ntp_ngrams_patches . ifolded . withIndex
, child <- patch ^.. patch_children . to addOrRem . folded
, child <- patch ^.. patch_children . to addOrRem . folded
]
]
-}
ngramsTypeFromTabType
::
Maybe
TabType
->
NgramsType
ngramsTypeFromTabType
::
Maybe
TabType
->
NgramsType
ngramsTypeFromTabType
maybeTabType
=
ngramsTypeFromTabType
maybeTabType
=
...
@@ -322,20 +396,87 @@ ngramsTypeFromTabType maybeTabType =
...
@@ -322,20 +396,87 @@ ngramsTypeFromTabType maybeTabType =
Terms
->
Ngrams
.
NgramsTerms
Terms
->
Ngrams
.
NgramsTerms
_
->
panic
$
lieu
<>
"No Ngrams for this tab"
_
->
panic
$
lieu
<>
"No Ngrams for this tab"
------------------------------------------------------------------------
data
Repo
s
p
=
Repo
{
_r_version
::
Version
,
_r_state
::
s
,
_r_history
::
[
p
]
-- ^ first patch in the list is the most recent
}
makeLenses
''
R
epo
initRepo
::
Monoid
s
=>
Repo
s
p
initRepo
=
Repo
1
mempty
[]
type
NgramsState
=
Map
ListId
(
Map
NgramsType
NgramsTable
)
type
NgramsStatePatch
=
PatchMap
ListId
(
PatchMap
NgramsType
NgramsTablePatch
)
type
NgramsRepo
=
Repo
NgramsState
NgramsStatePatch
class
HasRepoVar
env
where
repoVar
::
Getter
env
(
MVar
NgramsRepo
)
instance
HasRepoVar
(
MVar
NgramsRepo
)
where
repoVar
=
identity
type
RepoCmdM
env
err
m
=
(
CmdM
env
err
m
,
HasRepoVar
env
,
HasNodeError
err
)
------------------------------------------------------------------------
ngramsStatePatchConflictResolution
::
ListId
->
NgramsType
->
ConflictResolution
NgramsTablePatch
ngramsStatePatchConflictResolution
=
undefined
-- TODO
makePrisms
''
P
M
.
Patch
class
HasInvalidError
e
where
_InvalidError
::
Prism'
e
Validation
instance
HasInvalidError
ServantErr
where
_InvalidError
=
undefined
{-prism' make match
where
err = err500 { errBody = "InvalidError" }
make _ = err
match e = guard (e == err) $> UnsupportedVersion-}
assertValid
::
(
MonadError
e
m
,
HasInvalidError
e
)
=>
Validation
->
m
()
assertValid
v
=
when
(
not
$
validationIsValid
v
)
$
throwError
$
_InvalidError
#
v
-- Apply the given patch to the DB and returns the patch to be applied on the
-- Apply the given patch to the DB and returns the patch to be applied on the
-- cilent.
-- cilent.
-- TODO:
-- TODO:
-- In this perliminary version the OT aspect is missing, therefore the version
-- In this perliminary version the OT aspect is missing, therefore the version
-- number is always 1 and the returned patch is always empty.
-- number is always 1 and the returned patch is always empty.
tableNgramsPatch
::
(
HasNgramError
err
,
HasNodeError
err
)
tableNgramsPatch
::
(
HasNgramError
err
,
HasNodeError
err
,
HasInvalidError
err
,
RepoCmdM
env
err
m
)
=>
CorpusId
->
Maybe
TabType
->
Maybe
ListId
=>
CorpusId
->
Maybe
TabType
->
Maybe
ListId
->
Versioned
NgramsTablePatch
->
Versioned
NgramsTablePatch
->
Cmd
err
(
Versioned
NgramsTablePatch
)
->
m
(
Versioned
NgramsTablePatch
)
tableNgramsPatch
corpusId
maybeTabType
maybeList
(
Versioned
version
patch
)
=
do
tableNgramsPatch
corpusId
maybeTabType
maybeList
(
Versioned
p_version
p_table
)
=
do
when
(
version
/=
1
)
$
ngramError
UnsupportedVersion
let
ngramsType
=
ngramsTypeFromTabType
maybeTabType
let
ngramsType
=
ngramsTypeFromTabType
maybeTabType
listId
<-
maybe
(
defaultList
corpusId
)
pure
maybeList
listId
<-
maybe
(
defaultList
corpusId
)
pure
maybeList
let
(
p0
,
p0_validity
)
=
PM
.
singleton
ngramsType
p_table
let
(
p
,
p_validity
)
=
PM
.
singleton
listId
p0
assertValid
p0_validity
assertValid
p_validity
var
<-
view
repoVar
liftIO
$
modifyMVar
var
$
\
r
->
let
q
=
mconcat
$
take
(
r
^.
r_version
-
p_version
)
(
r
^.
r_history
)
(
p'
,
q'
)
=
transformWith
ngramsStatePatchConflictResolution
p
q
r'
=
r
&
r_version
+~
1
&
r_state
%~
undefined
-- act p'
&
r_history
%~
(
p'
:
)
q'_table
=
q'
^.
_Patch
.
at
listId
.
_Just
.
_Patch
.
at
ngramsType
.
_Just
in
pure
(
r'
,
Versioned
(
r'
^.
r_version
)
q'_table
)
{- DB version
when (version /= 1) $ ngramError UnsupportedVersion
updateNodeNgrams $ NodeNgramsUpdate
updateNodeNgrams $ NodeNgramsUpdate
{ _nnu_user_list_id = listId
{ _nnu_user_list_id = listId
, _nnu_lists_update = mkListsUpdate ngramsType patch
, _nnu_lists_update = mkListsUpdate ngramsType patch
...
@@ -343,13 +484,17 @@ tableNgramsPatch corpusId maybeTabType maybeList (Versioned version patch) = do
...
@@ -343,13 +484,17 @@ tableNgramsPatch corpusId maybeTabType maybeList (Versioned version patch) = do
, _nnu_add_children = mkChildrenGroups _add ngramsType patch
, _nnu_add_children = mkChildrenGroups _add ngramsType patch
}
}
pure $ Versioned 1 emptyNgramsTablePatch
pure $ Versioned 1 emptyNgramsTablePatch
-}
-- | TODO Errors management
-- | TODO Errors management
-- TODO: polymorphic for Annuaire or Corpus or ...
-- TODO: polymorphic for Annuaire or Corpus or ...
getTableNgrams
::
HasNodeError
err
getTableNgrams
::
RepoCmdM
env
err
m
=>
CorpusId
->
Maybe
TabType
=>
CorpusId
->
Maybe
TabType
->
Maybe
ListId
->
Maybe
Limit
->
Maybe
Offset
->
Maybe
ListId
->
Maybe
Limit
->
Maybe
Offset
->
Cmd
err
(
Versioned
NgramsTable
)
-- -> Maybe MinSize -> Maybe MaxSize
-- -> Maybe ListType
-- -> Maybe Text -- full text search
->
m
(
Versioned
NgramsTable
)
getTableNgrams
cId
maybeTabType
maybeListId
mlimit
moffset
=
do
getTableNgrams
cId
maybeTabType
maybeListId
mlimit
moffset
=
do
let
ngramsType
=
ngramsTypeFromTabType
maybeTabType
let
ngramsType
=
ngramsTypeFromTabType
maybeTabType
listId
<-
maybe
(
defaultList
cId
)
pure
maybeListId
listId
<-
maybe
(
defaultList
cId
)
pure
maybeListId
...
@@ -359,9 +504,21 @@ getTableNgrams cId maybeTabType maybeListId mlimit moffset = do
...
@@ -359,9 +504,21 @@ getTableNgrams cId maybeTabType maybeListId mlimit moffset = do
limit_
=
maybe
defaultLimit
identity
mlimit
limit_
=
maybe
defaultLimit
identity
mlimit
offset_
=
maybe
0
identity
moffset
offset_
=
maybe
0
identity
moffset
v
<-
view
repoVar
repo
<-
liftIO
$
readMVar
v
let
ngrams
=
repo
^..
r_state
.
at
listId
.
_Just
.
at
ngramsType
.
_Just
.
taking
limit_
(
dropping
offset_
each
)
pure
$
Versioned
(
repo
^.
r_version
)
(
NgramsTable
ngrams
)
{-
ngramsTableDatas <-
ngramsTableDatas <-
Ngrams.getNgramsTableDb NodeDocument ngramsType (Ngrams.NgramsTableParam listId cId) limit_ offset_
Ngrams.getNgramsTableDb NodeDocument ngramsType (Ngrams.NgramsTableParam listId cId) limit_ offset_
-- printDebug "ngramsTableDatas" ngramsTableDatas
-- printDebug "ngramsTableDatas" ngramsTableDatas
pure $ Versioned 1 $ NgramsTable (toNgramsElement ngramsTableDatas)
pure $ Versioned 1 $ NgramsTable (toNgramsElement ngramsTableDatas)
-}
src/Gargantext/API/Node.hs
View file @
aebaa330
...
@@ -46,7 +46,7 @@ import Data.Time (UTCTime)
...
@@ -46,7 +46,7 @@ import Data.Time (UTCTime)
import
GHC.Generics
(
Generic
)
import
GHC.Generics
(
Generic
)
import
Servant
import
Servant
import
Gargantext.API.Ngrams
(
TabType
(
..
),
TableNgramsApi
,
TableNgramsApiGet
,
tableNgramsPatch
,
getTableNgrams
)
import
Gargantext.API.Ngrams
(
TabType
(
..
),
TableNgramsApi
,
TableNgramsApiGet
,
tableNgramsPatch
,
getTableNgrams
,
HasRepoVar
(
..
)
)
import
Gargantext.Prelude
import
Gargantext.Prelude
import
Gargantext.Database.Types.Node
import
Gargantext.Database.Types.Node
import
Gargantext.Database.Utils
-- (Cmd, CmdM)
import
Gargantext.Database.Utils
-- (Cmd, CmdM)
...
@@ -72,7 +72,8 @@ import Gargantext.Database.Types.Node (CorpusId, ContactId)
...
@@ -72,7 +72,8 @@ import Gargantext.Database.Types.Node (CorpusId, ContactId)
import
Test.QuickCheck
(
elements
)
import
Test.QuickCheck
(
elements
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
type
GargServer
api
=
forall
env
m
.
CmdM
env
ServantErr
m
=>
ServerT
api
m
type
GargServer
api
=
forall
env
m
.
(
CmdM
env
ServantErr
m
,
HasRepoVar
env
)
=>
ServerT
api
m
-------------------------------------------------------------------
-------------------------------------------------------------------
-- TODO-ACCESS: access by admin only.
-- TODO-ACCESS: access by admin only.
...
...
src/Gargantext/API/Settings.hs
View file @
aebaa330
...
@@ -45,10 +45,12 @@ import Web.HttpApiData (parseUrlPiece)
...
@@ -45,10 +45,12 @@ import Web.HttpApiData (parseUrlPiece)
import
qualified
Jose.Jwk
as
Jose
import
qualified
Jose.Jwk
as
Jose
import
qualified
Jose.Jwa
as
Jose
import
qualified
Jose.Jwa
as
Jose
import
Control.Concurrent
import
Control.Monad.Logger
import
Control.Monad.Logger
import
Control.Lens
import
Control.Lens
import
Gargantext.Prelude
import
Gargantext.Prelude
import
Gargantext.Database.Utils
(
databaseParameters
,
HasConnection
(
..
))
import
Gargantext.Database.Utils
(
databaseParameters
,
HasConnection
(
..
))
import
Gargantext.API.Ngrams
(
NgramsRepo
,
HasRepoVar
(
..
),
initRepo
)
import
Gargantext.API.Orchestrator.Types
import
Gargantext.API.Orchestrator.Types
type
PortNumber
=
Int
type
PortNumber
=
Int
...
@@ -128,6 +130,7 @@ data Env = Env
...
@@ -128,6 +130,7 @@ data Env = Env
{
_env_settings
::
!
Settings
{
_env_settings
::
!
Settings
,
_env_logger
::
!
LoggerSet
,
_env_logger
::
!
LoggerSet
,
_env_conn
::
!
Connection
,
_env_conn
::
!
Connection
,
_env_repo_var
::
!
(
MVar
NgramsRepo
)
,
_env_manager
::
!
Manager
,
_env_manager
::
!
Manager
,
_env_self_url
::
!
BaseUrl
,
_env_self_url
::
!
BaseUrl
,
_env_scrapers
::
!
ScrapersEnv
,
_env_scrapers
::
!
ScrapersEnv
...
@@ -139,6 +142,9 @@ makeLenses ''Env
...
@@ -139,6 +142,9 @@ makeLenses ''Env
instance
HasConnection
Env
where
instance
HasConnection
Env
where
connection
=
env_conn
connection
=
env_conn
instance
HasRepoVar
Env
where
repoVar
=
env_repo_var
data
MockEnv
=
MockEnv
data
MockEnv
=
MockEnv
{
_menv_firewall
::
!
FireWall
{
_menv_firewall
::
!
FireWall
}
}
...
@@ -155,12 +161,14 @@ newEnv port file = do
...
@@ -155,12 +161,14 @@ newEnv port file = do
self_url
<-
parseBaseUrl
$
"http://0.0.0.0:"
<>
show
port
self_url
<-
parseBaseUrl
$
"http://0.0.0.0:"
<>
show
port
param
<-
databaseParameters
file
param
<-
databaseParameters
file
conn
<-
connect
param
conn
<-
connect
param
repo_var
<-
newMVar
initRepo
scrapers_env
<-
newJobEnv
defaultSettings
manager
scrapers_env
<-
newJobEnv
defaultSettings
manager
logger
<-
newStderrLoggerSet
defaultBufSize
logger
<-
newStderrLoggerSet
defaultBufSize
pure
$
Env
pure
$
Env
{
_env_settings
=
settings
{
_env_settings
=
settings
,
_env_logger
=
logger
,
_env_logger
=
logger
,
_env_conn
=
conn
,
_env_conn
=
conn
,
_env_repo_var
=
repo_var
,
_env_manager
=
manager
,
_env_manager
=
manager
,
_env_scrapers
=
scrapers_env
,
_env_scrapers
=
scrapers_env
,
_env_self_url
=
self_url
,
_env_self_url
=
self_url
...
...
src/Gargantext/Database/Utils.hs
View file @
aebaa330
...
@@ -68,7 +68,7 @@ runCmd :: Connection -> Cmd err a -> IO (Either err a)
...
@@ -68,7 +68,7 @@ runCmd :: Connection -> Cmd err a -> IO (Either err a)
runCmd
conn
m
=
runExceptT
$
runReaderT
m
conn
runCmd
conn
m
=
runExceptT
$
runReaderT
m
conn
-- Use only for dev
-- Use only for dev
runCmdDevWith
::
FilePath
->
Cmd
ServantE
rr
a
->
IO
a
runCmdDevWith
::
Show
err
=>
FilePath
->
Cmd
e
rr
a
->
IO
a
runCmdDevWith
fp
f
=
do
runCmdDevWith
fp
f
=
do
conn
<-
connectGargandb
fp
conn
<-
connectGargandb
fp
either
(
fail
.
show
)
pure
=<<
runCmd
conn
f
either
(
fail
.
show
)
pure
=<<
runCmd
conn
f
...
...
stack.yaml
View file @
aebaa330
...
@@ -34,4 +34,4 @@ extra-deps:
...
@@ -34,4 +34,4 @@ extra-deps:
-
servant-flatten-0.2
-
servant-flatten-0.2
-
servant-multipart-0.11.2
-
servant-multipart-0.11.2
-
stemmer-0.5.2
-
stemmer-0.5.2
-
validity-0.
8
.0.0
# patches-{map,class}
-
validity-0.
9
.0.0
# patches-{map,class}
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