Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit bb6a6518
authored
Mar 07, 2024
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
penambahan object pada result views
1 parent
b58ade88
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
229 additions
and
104 deletions
opensipkd/base/__init__.py
opensipkd/base/static/js/form/departemen_form.js
opensipkd/base/views/base_views.py
opensipkd/base/views/departemen.py
opensipkd/detable/detable.py
opensipkd/detable/templates/detable.pt
opensipkd/models/departemen.py
setup.py
opensipkd/base/__init__.py
View file @
bb6a651
...
...
@@ -150,6 +150,11 @@ def add_global(event):
event
[
'get_params'
]
=
get_params
event
[
'get_urls'
]
=
get_urls
event
[
'get_csrf_token'
]
=
get_csrf_token
event
[
'get_params'
]
=
get_params
def
get_params
(
request
,
params
,
alternate
=
None
,
settings
=
None
):
return
get_params
(
params
,
alternate
,
settings
)
def
get_params
(
params
,
alternate
=
None
,
settings
=
None
):
...
...
@@ -162,7 +167,6 @@ def get_params(params, alternate=None, settings=None):
contoh penggunaan:
get_params('devel', False)
"""
if
not
settings
:
settings
=
get_settings
()
result
=
settings
and
params
in
settings
and
\
...
...
@@ -175,6 +179,10 @@ def get_params(params, alternate=None, settings=None):
def
get_ini
(
request
,
var
):
return
get_ini
(
var
)
def
get_ini
(
var
):
settings
=
get_settings
()
if
var
in
settings
and
settings
[
var
]:
return
settings
[
var
]
...
...
@@ -497,6 +505,7 @@ def main(global_config, **settings):
config
.
add_request_method
(
disable_responsive
,
'disable_responsive'
,
reify
=
True
)
config
.
add_request_method
(
get_ini
,
'get_ini'
,
reify
=
True
)
config
.
add_request_method
(
get_params
,
'get_params'
,
reify
=
True
)
config
.
add_request_method
(
get_csrf_token
,
'get_csrf_token'
,
reify
=
True
)
# config.add_translation_dirs('opensipkd.base:locale/')
...
...
opensipkd/base/static/js/form/departemen_form.js
0 → 100644
View file @
bb6a651
$
(
document
).
ready
(
function
()
{
$
(
'#departemen_nm'
).
bind
(
'typeahead:selected'
,
function
(
obj
,
datum
,
name
)
{
$
(
'#departemen_id'
).
val
(
datum
.
id
);
$
(
'#departemen_kd'
).
val
(
datum
.
kode
);
console
.
log
(
datum
.
kode
);
});
$
(
'#departemen_nm'
).
on
(
'input'
,
function
(
e
)
{
let
val
=
$
(
'#departemen_nm'
).
val
();
if
(
val
===
null
||
val
===
""
)
{
$
(
'#departemen_id'
).
val
(
""
);
$
(
'#departemen_kd'
).
val
(
""
);
}
});
});
\ No newline at end of file
opensipkd/base/views/base_views.py
View file @
bb6a651
...
...
@@ -220,6 +220,8 @@ class BaseView(object):
if
self
.
list_schema
:
allow_edit
=
kwargs
.
get
(
"allow_edit"
,
True
)
allow_delete
=
kwargs
.
get
(
"allow_delete"
,
True
)
allow_post
=
kwargs
.
get
(
"allow_delete"
,
False
)
allow_unpost
=
kwargs
.
get
(
"allow_delete"
,
False
)
state_save
=
kwargs
.
get
(
"state_save"
,
False
)
schema
=
self
.
list_schema
()
schema
=
schema
.
bind
(
request
=
self
.
req
)
...
...
@@ -233,7 +235,10 @@ class BaseView(object):
request
=
self
.
req
,
allow_edit
=
allow_edit
,
allow_delete
=
allow_delete
,
state_save
=
state_save
)
allow_post
=
allow_post
,
allow_unpost
=
allow_unpost
,
state_save
=
state_save
,
)
resources
=
table
.
get_widget_resources
()
# resources=dict(css="", js="")
return
dict
(
form
=
table
.
render
(),
scripts
=
""
,
css
=
resources
[
"css"
],
...
...
@@ -251,9 +256,9 @@ class BaseView(object):
return
self
.
route_list
()
def
next_edit
(
self
,
form
,
**
kwargs
):
return
self
.
route_list
()
return
self
.
route_list
(
**
kwargs
)
def
view_view
(
self
):
# row = query_id(request).first()
def
view_view
(
self
,
**
kwargs
):
# row = query_id(request).first()
request
=
self
.
req
row
=
self
.
query_id
()
.
first
()
if
not
row
:
...
...
@@ -273,11 +278,22 @@ class BaseView(object):
form
.
set_appstruct
(
values
)
table
=
self
.
get_item_table
(
row
)
resources
=
form
.
get_widget_resources
()
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
if
is_object
:
return
dict
(
form
=
form
,
readonly
=
True
,
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
],
**
kwargs
)
return
dict
(
form
=
form
.
render
(
readonly
=
True
),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
]
js
=
resources
[
"js"
],
**
kwargs
)
def
view_upload
(
self
,
exts
=
(
'.png'
,
'.ico'
)):
...
...
@@ -349,10 +365,9 @@ class BaseView(object):
def
next_act
(
self
):
url_dict
=
self
.
req
.
matchdict
raise
HTTPNotFound
def
jasper
_response
(
self
,
**
kwargs
):
def
pdf
_response
(
self
,
**
kwargs
):
from
opensipkd.base.tools.report
import
jasper_export
filename
=
jasper_export
(
self
.
report_file
)
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
...
...
@@ -375,35 +390,33 @@ class BaseView(object):
def
list_filter
(
self
,
query
):
return
query
def
view_act
(
self
,
**
kwargs
):
url_dict
=
self
.
req
.
matchdict
if
url_dict
[
'act'
]
==
'grid'
:
url
=
[]
if
not
self
.
columns
:
columns
=
[]
for
d
in
self
.
list_schema
():
global_search
=
True
if
hasattr
(
d
,
"searchable"
):
if
d
.
searchable
==
False
:
global_search
=
False
if
hasattr
(
d
,
"field"
):
if
type
(
d
.
field
)
==
str
:
columns
.
append
(
ColumnDT
(
getattr
(
self
.
table
,
d
.
field
),
mData
=
d
.
name
,
global_search
=
global_search
))
else
:
columns
.
append
(
ColumnDT
(
d
.
field
,
mData
=
d
.
name
,
global_search
=
global_search
))
else
:
def
get_list
(
self
):
url
=
[]
if
not
self
.
columns
:
columns
=
[]
for
d
in
self
.
list_schema
():
global_search
=
True
if
hasattr
(
d
,
"searchable"
):
if
d
.
searchable
==
False
:
global_search
=
False
if
hasattr
(
d
,
"field"
):
if
type
(
d
.
field
)
==
str
:
columns
.
append
(
ColumnDT
(
getattr
(
self
.
table
,
d
.
name
),
mData
=
d
.
name
,
ColumnDT
(
getattr
(
self
.
table
,
d
.
field
),
mData
=
d
.
name
,
global_search
=
global_search
))
if
hasattr
(
d
,
"url"
):
url
.
append
(
d
.
name
)
else
:
columns
.
append
(
ColumnDT
(
d
.
field
,
mData
=
d
.
name
,
global_search
=
global_search
))
else
:
columns
.
append
(
ColumnDT
(
getattr
(
self
.
table
,
d
.
name
),
mData
=
d
.
name
,
global_search
=
global_search
))
if
hasattr
(
d
,
"url"
):
url
.
append
(
d
.
name
)
else
:
columns
=
self
.
columns
...
...
@@ -416,18 +429,22 @@ class BaseView(object):
query
=
self
.
list_filter
(
query
)
row_table
=
DataTables
(
self
.
req
.
GET
,
query
,
columns
)
result
=
row_table
.
output_result
()
# for d in result["data"]:
# for k, v in d.items():
# if k in url and v:
# link = "/".join([self.home, nik_url, v])
# d[k] =f'<a href="{link}" target="_blank">View</a>'
return
result
def
view_act
(
self
,
**
kwargs
):
url_dict
=
self
.
req
.
matchdict
if
url_dict
[
'act'
]
==
'grid'
:
return
self
.
get_list
()
elif
url_dict
[
'act'
]
==
'csv'
:
return
self
.
csv_response
()
elif
url_dict
[
'act'
]
==
'pdf'
:
return
self
.
jasper
_response
()
return
self
.
pdf
_response
()
else
:
return
self
.
next_act
()
...
...
@@ -437,6 +454,7 @@ class BaseView(object):
form
=
self
.
get_form
(
self
.
add_schema
,
**
kwargs
)
table
=
self
.
get_item_table
(
**
kwargs
)
resources
=
form
.
get_widget_resources
()
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
if
self
.
req
.
POST
:
if
'save'
in
self
.
req
.
POST
:
controls
=
self
.
req
.
POST
.
items
()
...
...
@@ -458,11 +476,21 @@ class BaseView(object):
# log.debug(hasattr(e.field, k))
# if isinstance(f, colander.Date):
# e.cstruct[f] = date_from_str(e.cstruct[f])
if
is_object
:
return
dict
(
form
=
form
,
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
],
**
kwargs
)
return
dict
(
form
=
form
.
render
(
e
.
cstruct
),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
js
=
resources
[
"js"
],
**
kwargs
)
values
=
dict
(
c
)
row
=
self
.
save_request
(
values
)
return
self
.
after_add
(
row
=
row
,
**
kwargs
)
...
...
@@ -474,12 +502,21 @@ class BaseView(object):
return
self
.
route_list
(
**
kwargs
)
values
=
self
.
before_add
()
form
.
set_appstruct
(
values
)
if
is_object
:
return
dict
(
form
=
form
,
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
],
**
kwargs
)
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
def
save
(
self
,
values
,
user
,
row
=
None
):
log
.
debug
(
"Save"
)
log
.
info
(
"Save"
)
log
.
debug
(
values
)
values
.
pop
(
"id"
,
None
)
self
.
ses
[
"old_email"
]
=
user
and
user
.
email
or
None
...
...
@@ -534,6 +571,8 @@ class BaseView(object):
def
view_edit
(
self
,
**
kwargs
):
request
=
self
.
req
row
=
self
.
query_id
()
.
first
()
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
if
not
row
:
return
self
.
id_not_found
(
**
kwargs
)
if
not
self
.
bindings
:
...
...
@@ -553,9 +592,17 @@ class BaseView(object):
try
:
controls
=
form
.
validate
(
controls
)
except
ValidationFailure
as
e
:
# log.debug
(f"Edit Error: {str(e.error)}")
log
.
error
(
f
"Edit Error: {str(e.error)}"
)
# log.debug(f"Edit Data: {e.cstruct}")
form
.
set_appstruct
(
e
.
cstruct
)
if
is_object
:
return
dict
(
form
=
form
,
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
],
**
kwargs
)
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
...
...
@@ -569,6 +616,14 @@ class BaseView(object):
values
=
self
.
get_values
(
row
)
form
.
set_appstruct
(
values
)
form
=
self
.
before_edit
(
form
)
if
is_object
:
return
dict
(
form
=
form
,
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
],
**
kwargs
)
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
...
...
@@ -576,10 +631,12 @@ class BaseView(object):
def
before_delete
(
self
,
row
):
pass
def
view_delete
(
self
):
def
view_delete
(
self
,
**
kwargs
):
request
=
self
.
req
q
=
self
.
query_id
()
row
=
q
.
first
()
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
if
not
row
:
return
self
.
id_not_found
()
if
not
self
.
bindings
:
...
...
@@ -587,7 +644,12 @@ class BaseView(object):
if
request
.
POST
:
if
'delete'
in
request
.
POST
:
msg
=
self
.
delete_msg
(
row
)
self
.
before_delete
(
row
)
try
:
self
.
before_delete
(
row
)
except
Exception
as
e
:
self
.
ses
.
flash
(
e
,
"error"
)
return
self
.
route_list
()
q
.
delete
()
self
.
db_session
.
flush
()
request
.
session
.
flash
(
msg
)
...
...
@@ -597,6 +659,15 @@ class BaseView(object):
table
=
self
.
get_item_table
(
row
)
resources
=
form
.
get_widget_resources
()
form
.
set_appstruct
(
self
.
get_values
(
row
))
if
is_object
:
return
dict
(
form
=
form
,
readonly
=
True
,
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
],
**
kwargs
)
return
dict
(
form
=
form
.
render
(
readonly
=
True
),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
...
...
opensipkd/base/views/departemen.py
View file @
bb6a651
...
...
@@ -35,6 +35,14 @@ def departemen_widget(node, kw):
return
widget
.
Select2Widget
(
values
=
values
)
def
departemen_widget_form
():
return
widget
.
AutocompleteInputWidget
(
size
=
60
,
min_length
=
3
,
requirements
=
((
"typeahead"
,
None
),
(
"deform"
,
None
),
{
"js"
:
"opensipkd.base:static/js/form/departemen_form.js"
}),
)
class
AddSchema
(
colander
.
Schema
):
parent_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
...
...
opensipkd/detable/detable.py
View file @
bb6a651
...
...
@@ -114,6 +114,8 @@ class DeTable(field.Field):
allow_edit
=
True
,
allow_delete
=
True
,
allow_view
=
True
,
allow_post
=
False
,
allow_unpost
=
False
,
**
kw
):
# field.Field.__init__(self, schema, **kw)
...
...
@@ -165,6 +167,8 @@ class DeTable(field.Field):
self
.
allow_edit
=
json
.
dumps
(
allow_edit
)
self
.
allow_delete
=
json
.
dumps
(
allow_delete
)
self
.
allow_view
=
json
.
dumps
(
allow_view
)
self
.
allow_post
=
json
.
dumps
(
allow_post
)
self
.
allow_unpost
=
json
.
dumps
(
allow_unpost
)
table_widget
=
getattr
(
schema
,
"widget"
,
None
)
if
table_widget
is
None
:
table_widget
=
widget
.
TableWidget
()
...
...
opensipkd/detable/templates/detable.pt
View file @
bb6a651
...
...
@@ -19,6 +19,8 @@
allow_edit allow_edit|field.allow_edit;
allow_delete allow_delete|field.allow_delete;
allow_view allow_view|field.allow_view;
allow_post allow_post|field.allow_post;
allow_unpost allow_unpost|field.allow_unpost;
state_save state_save|field.state_save;
"
tal:attributes="style style; class css_class; attributes|field.widget.attributes|{};"
...
...
@@ -97,13 +99,19 @@
${tableid}Columns[co].render = function (id) {
let result = ""
if (${allow_view}) {
result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true"></i></a> ';
result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true"
title="View"
></i></a> ';
}
if (${allow_edit}) {
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true"></i></a> '
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true"
title="Edit"
></i></a> '
}
if (${allow_delete}) {
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true"></i></a>';
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true" title="Delete"></i></a>';
}
if (${allow_post}) {
result += '<a href="${url}/' + id + '/post"><i class="fas fa-signs-post" aria-hidden="true" title="Post"></i></a>';
}
if (${allow_unpost}) {
result += '<a href="${url}/' + id + '/unpost"><i class="fas fa-delete-left" aria-hidden="true" title="Unpost"></i></a>';
}
return result;
}
...
...
opensipkd/models/departemen.py
View file @
bb6a651
...
...
@@ -10,10 +10,11 @@ from sqlalchemy.orm import (
backref
)
from
.
import
ResCompany
from
.
import
ResCompany
,
DefaultModel
,
User
from
..models
import
DBSession
,
Base
from
..models
import
(
NamaModel
,
TABLE_ARGS
)
from
..models
import
(
NamaModel
,
TABLE_ARGS
)
class
Departemen
(
Base
,
NamaModel
):
...
...
@@ -57,59 +58,64 @@ class Departemen(Base, NamaModel):
def
get_list
(
cls
):
return
DBSession
.
query
(
cls
.
id
,
cls
.
nama
)
.
order_by
(
cls
.
nama
)
.
all
()
# class DepartemenUser(Base, DefaultModel):
# __tablename__ = 'departemen_user'
# user_id = Column(Integer, ForeignKey(User.id), unique=True)
# departemen_id = Column(Integer, ForeignKey(Departemen.id))
# sub_departemen = Column(SmallInteger, nullable=True)
# departemen = relationship("Departemen", backref="user_departemen")
# user = relationship("User", backref="user_departemen")
# __table_args__ = TABLE_ARGS
#
# @classmethod
# def query_user_id(cls, user_id):
# return DBSession.query(cls).filter_by(user_id=user_id)
#
# @classmethod
# def get_kode(cls, user_id):
# row = cls.query_user_id(user_id).first()
# return row and row.departemen.kode or None
#
# @classmethod
# def ids(cls, user_id):
# r = ()
# departemens = DBSession.query(cls.departemen_id, cls.sub_departemen, Departemen.kode
# ).join(Departemen).filter(cls.departemen_id == Departemen.id,
# cls.user_id == user_id).all()
# for departemen in departemens:
# if departemen.sub_departemen:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode.ilike('%s%%' % departemen.kode)).all()
# else:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode == departemen.kode).all()
# for i in range(len(rows)):
# r = r + (rows[i])
# return r
#
# @classmethod
# def departemen_granted(cls, user_id, departemen_id):
# departemens = DBSession.query(cls.departemen_id, cls.sub_departemen, Departemen.kode
# ).join(Departemen).filter(cls.departemen_id == Departemen.id,
# cls.user_id == user_id).all()
# for departemen in departemens:
# if departemen.sub_departemen:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode.ilike('%s%%' % departemen.kode)).all()
# else:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode == departemen.kode).all()
# for i in range(len(rows)):
# if int(rows[i][0]) == int(departemen_id):
# return True
# return False
#
# @classmethod
# def get_filtered(cls, request):
# filter = "'%s' LIKE public.departemens.kode||'%%'" % request.session['departemen_kd']
# q1 = DBSession.query(Departemen.kode, UserDepartemen.sub_departemen).join(UserDepartemen). \
# filter(UserDepartemen.user_id == request.user.id,
# UserDepartemen.departemen_id == Departemen.id,
# text(filter))
# return q1.first()
class
DepartemenUser
(
Base
,
DefaultModel
):
__tablename__
=
'departemen_user'
user_id
=
Column
(
Integer
,
ForeignKey
(
User
.
id
),
unique
=
True
)
departemen_id
=
Column
(
Integer
,
ForeignKey
(
Departemen
.
id
))
sub_departemen
=
Column
(
SmallInteger
,
nullable
=
True
)
departemen
=
relationship
(
"Departemen"
,
backref
=
"user_departemen"
)
user
=
relationship
(
"User"
,
backref
=
"user_departemen"
)
__table_args__
=
TABLE_ARGS
@classmethod
def
query_user_id
(
cls
,
user_id
):
return
DBSession
.
query
(
cls
)
.
filter_by
(
user_id
=
user_id
)
@classmethod
def
get_kode
(
cls
,
user_id
):
row
=
cls
.
query_user_id
(
user_id
)
.
first
()
return
row
and
row
.
departemen
.
kode
or
None
@classmethod
def
ids
(
cls
,
user_id
):
r
=
()
departemens
=
DBSession
.
query
(
cls
.
departemen_id
,
cls
.
sub_departemen
,
Departemen
.
kode
)
.
join
(
Departemen
)
.
filter
(
cls
.
departemen_id
==
Departemen
.
id
,
cls
.
user_id
==
user_id
)
.
all
()
for
departemen
in
departemens
:
if
departemen
.
sub_departemen
:
rows
=
DBSession
.
query
(
Departemen
.
id
)
.
filter
(
Departemen
.
kode
.
ilike
(
'
%
s
%%
'
%
departemen
.
kode
))
.
all
()
else
:
rows
=
DBSession
.
query
(
Departemen
.
id
)
.
filter
(
Departemen
.
kode
==
departemen
.
kode
)
.
all
()
for
i
in
range
(
len
(
rows
)):
r
=
r
+
(
rows
[
i
])
return
r
@classmethod
def
departemen_granted
(
cls
,
user_id
,
departemen_id
):
departemens
=
DBSession
.
query
(
cls
.
departemen_id
,
cls
.
sub_departemen
,
Departemen
.
kode
)
.
join
(
Departemen
)
.
filter
(
cls
.
departemen_id
==
Departemen
.
id
,
cls
.
user_id
==
user_id
)
.
all
()
for
departemen
in
departemens
:
if
departemen
.
sub_departemen
:
rows
=
DBSession
.
query
(
Departemen
.
id
)
.
filter
(
Departemen
.
kode
.
ilike
(
'
%
s
%%
'
%
departemen
.
kode
))
.
all
()
else
:
rows
=
DBSession
.
query
(
Departemen
.
id
)
.
filter
(
Departemen
.
kode
==
departemen
.
kode
)
.
all
()
for
i
in
range
(
len
(
rows
)):
if
int
(
rows
[
i
][
0
])
==
int
(
departemen_id
):
return
True
return
False
# @classmethod
# def get_filtered(cls, request):
# filter = "'%s' LIKE public.departemens.kode||'%%'" % request.session['departemen_kd']
# q1 = DBSession.query(Departemen.kode, UserDepartemen.sub_departemen).join(UserDepartemen). \
# filter(UserDepartemen.user_id == request.user.id,
# UserDepartemen.departemen_id == Departemen.id,
# text(filter))
# return q1.first()
setup.py
View file @
bb6a651
import
os
from
setuptools
import
setup
,
find_packages
here
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
...
...
@@ -15,6 +16,8 @@ requires = [
'colander==1.8.3'
,
'pyramid'
,
'pyramid_tm'
,
"pyramid_beaker"
,
"pyramid_mailer"
,
'SQLAlchemy'
,
'transaction'
,
'waitress'
,
...
...
@@ -74,7 +77,7 @@ setup(
'base/alembic/versions/*.*'
,
'base/views/*.tpl'
,
'base/locale/*.*'
,
],
},
data_files
=
[(
'etc'
,
[
'etc/live_opensipkd.tpl'
,
'etc/test_opensipkd.tpl'
,
])],
...
...
Write
Preview
Markdown
is supported
Attach a file
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 post a comment