Commit b21a9830 by aa.gusti

penambahan mehod after_save

1 parent 2b0d4a71
###
# app configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
###
[app:main] [app:main]
;[app:opensipkd_base]
use = egg:opensipkd_base use = egg:opensipkd_base
reload_templates = true reload_templates = true
devel = true pyramid.debug_all = true
debug_authorization = false pyramid.debug_authorization = false
debug_notfound = false pyramid.debug_notfound = true
debug_routematch = false pyramid.debug_routematch = true
debug_templates = true pyramid.debug_templates = true
default_locale_name = en default_locale_name = id
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
sqlalchemy.url = postgresql://user:pass@localhost/db ;pbb.url = oracle+oracledb://pbb:A@10.8.50.62:1521/simpbb
sqlalchemy.echo = true pbb.url = oracle://pbb:A@10.8.50.62:1521/simpbb
lib_dir = C:\app\instantclient_11_2
temp_dir = C:\tmp
pbb_pemda = 32.79
allow_register = true
pyramid.includes = pyramid.includes =
pyramid_tm pyramid_tm
pyramid_beaker pyramid_beaker
pyramid_chameleon pyramid_chameleon
pyramid_debugtoolbar
pyramid_rpc.jsonrpc pyramid_rpc.jsonrpc
opensipkd.tools
opensipkd.pjdl.models
opensipkd.pjdl.apps
opensipkd.bphtb.models
opensipkd.bphtb.apps
pjdl_invoice_sspd=99
pjdl_invoice_sptpd=1
pjdl_invoice_stpd=False
pjdl_report_files=False #Isikan daftar file-report jika bukan default
devel = true
session.type = ext:database session.type = ext:database
session.secret = s0s3cr3t session.secret = s0s3cr3ts
session.cookie_expires = true session.cookie_expires = true
session.key = WhatEver session.key = WhatEver
session.url = postgresql://user:pass@localhost/db session.url = postgresql://aagusti:a@localhost:5433/magelang
session.timeout = 3000 session.timeout = 3000
session.lock_dir = %(here)s/tmp session.lock_dir = %(here)s/tmp
;login_tpl = opensipkd.samsat.jabar.views:templates/login.pt
timezone = Asia/Jakarta timezone = Asia/Jakarta
localization = id_ID.UTF-8 ;localization = id_ID.UTF-8
#localization = Indonesian_indonesia.1252 #localization = Indonesian_indonesia.1252
#localization = English_Australia.1252 localization = English_Australia.1252
static_files = %(here)s/../files ;static_files = %(here)s/../files
captcha_files = %(here)s/tmp/captcha ;captcha_files = /tmp/captcha
company = Opensipkd ;company = Opensipkd
ibukota = Bekasi ;ibukota = Bekasi
departement = IT ;departement = IT
address_1 = Jalan.... ;address_1 = Jalan....
address_2 = Bekasi ... ;address_2 = Bekasi ...
;
center.phone = 021123456789 ;center.phone = 021123456789
center.mobile = 081311045668 ;center.mobile = 081311045668
center.email = aa.gustiana@gmail.com ;center.email = aa.gustiana@gmail.com
center.email_password = ;center.email_password =
center.smtp_server = ;center.smtp_server =
;
_host = ;#_host = http://localhost:5433/demo2
;
unoconv_py = C:\Program Files\LibreOffice 5\program\python.exe unoconv_py = C:\Program Files\LibreOffice\program\python.exe
unoconv_bin = C:\project\toko\env\Scripts\unoconv unoconv_bin = C:\product\venv-lates\Scripts\unoconv
;
modules = ;modules =
menus = menus = login:Login
pjdl:PJDL
app_name = Base Opensipkd.com bphtb:BPHTB
allow_register = False five:Five
;app_name = GAJI ASN
change_unit = False
departemen_chg_id = 3 ;change_unit = False
;departemen_chg_id = 3
# Registrasi User
captcha_files = /tmp/captcha
reg_captcha = 0
;reg_idcard = 1
reg_verify = 1
reg_form =
;login_tpl =
# digunakan jika akan menggunakan form registrasi sendiri
; PROXY
;trusted_proxy_headers = "forwarded x-forwarded-for x-forwarded-host x-forwarded-proto x-forwarded-port"
;url_prefix='/wsgi'
;
;[composite:main]
;use = egg:rutter#urlmap
;/ = opensipkd_base
;/wsgi/ = opensipkd_base
;[filter:proxy-prefix]
;use = egg:PasteDeploy#prefix
;prefix = /wsgi
;
;[pipeline:main]
;pipeline =
; proxy-prefix
; opensipkd_base
[server:main] [server:main]
...@@ -70,23 +122,25 @@ port = 6543 ...@@ -70,23 +122,25 @@ port = 6543
keys = root, opensipkd, sqlalchemy keys = root, opensipkd, sqlalchemy
[handlers] [handlers]
keys = console, filelog, tabel keys = console
#, filelog, tabel
[formatters] [formatters]
keys = generic keys = generic
[logger_root] [logger_root]
level = INFO level = WARN
handlers = console, filelog, tabel handlers = console
#, filelog, tabel
[logger_opensipkd] [logger_opensipkd]
level = INFO level = DEBUG
handlers = handlers =
qualname = opensipkd qualname = opensipkd
[logger_sqlalchemy] [logger_sqlalchemy]
level = WARN level = WARN
handlers = handlers =
qualname = sqlalchemy.engine qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries. # "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results. # "level = DEBUG" logs SQL queries and results.
...@@ -94,10 +148,11 @@ qualname = sqlalchemy.engine ...@@ -94,10 +148,11 @@ qualname = sqlalchemy.engine
[handler_filelog] [handler_filelog]
class = FileHandler class = FileHandler
args = ('/home/aagusti/log/web.log','a') args = ('log_file_location','a')
level = INFO level = INFO
formatter = generic formatter = generic
[handler_console] [handler_console]
class = StreamHandler class = StreamHandler
args = (sys.stderr,) args = (sys.stderr,)
...@@ -113,5 +168,28 @@ formatter = generic ...@@ -113,5 +168,28 @@ formatter = generic
[formatter_generic] [formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
[alembic_ziggurat]
script_location = ziggurat_foundations:migrations
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
# End logging configuration
[alembic_base] [alembic_base]
script_location = opensipkd.base:alembic script_location = opensipkd.base:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
[alembic_models]
script_location = opensipkd.models:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
[alembic_pjdl]
script_location = opensipkd.pjdl.models:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
[pytest]
filterwarnings =
error
ignore::UserWarning
ignore:function ham\(\) is deprecated:DeprecationWarning
\ No newline at end of file \ No newline at end of file
...@@ -18,7 +18,8 @@ from pyramid.events import subscriber ...@@ -18,7 +18,8 @@ from pyramid.events import subscriber
from pyramid.events import BeforeRender from pyramid.events import BeforeRender
from pyramid.renderers import JSON from pyramid.renderers import JSON
from pyramid_mailer import mailer_factory_from_settings from pyramid_mailer import mailer_factory_from_settings
import datetime, decimal import datetime
import decimal
from sqlalchemy import engine_from_config, or_ from sqlalchemy import engine_from_config, or_
from .security import ( from .security import (
group_finder, group_finder,
...@@ -182,7 +183,7 @@ def get_params(params, alternate=None, settings=None): ...@@ -182,7 +183,7 @@ def get_params(params, alternate=None, settings=None):
if not settings: if not settings:
settings = get_settings() settings = get_settings()
result = settings and params in settings and \ result = settings and params in settings and \
settings[params].strip() or None settings[params].strip() or None
if not result: if not result:
row = Parameter.query_kode(params).first() row = Parameter.query_kode(params).first()
result = row and row.value or None result = row and row.value or None
...@@ -393,7 +394,8 @@ def format_datetime(v): ...@@ -393,7 +394,8 @@ def format_datetime(v):
def json_renderer(): def json_renderer():
json_r = JSON() json_r = JSON()
json_r.add_adapter(datetime.datetime, lambda v, request: format_datetime(v)) json_r.add_adapter(datetime.datetime, lambda v,
request: format_datetime(v))
json_r.add_adapter(datetime.date, lambda v, request: dmy(v)) json_r.add_adapter(datetime.date, lambda v, request: dmy(v))
json_r.add_adapter(decimal.Decimal, lambda v, request: str(v)) json_r.add_adapter(decimal.Decimal, lambda v, request: str(v))
return json_r return json_r
...@@ -436,7 +438,8 @@ def get_home(request): ...@@ -436,7 +438,8 @@ def get_home(request):
def _set_routes1(config, app_id): def _set_routes1(config, app_id):
q = DBSession.query(Route).filter(Route.path != None, Route.module == None, Route.status == 1) q = DBSession.query(Route).filter(Route.path != None,
Route.module == None, Route.status == 1)
if not app_id: if not app_id:
q.filter(or_(Route.app_id == 0, None == Route.app_id)) q.filter(or_(Route.app_id == 0, None == Route.app_id))
else: else:
...@@ -453,14 +456,16 @@ def _set_routes1(config, app_id): ...@@ -453,14 +456,16 @@ def _set_routes1(config, app_id):
def _set_routes2(config, module="base"): def _set_routes2(config, module="base"):
q = DBSession.query(Route).filter(Route.module == module, Route.status == 1) q = DBSession.query(Route).filter(
Route.module == module, Route.status == 1)
for route in q: for route in q:
if route.type == 0: if route.type == 0:
config.add_route(route.kode, route.path) config.add_route(route.kode, route.path)
if route.nama: if route.nama:
titles[route.kode] = route.nama titles[route.kode] = route.nama
elif route.type == 1: elif route.type == 1:
config.add_jsonrpc_endpoint(route.kode, route.path, default_renderer="json_rpc") config.add_jsonrpc_endpoint(
route.kode, route.path, default_renderer="json_rpc")
return q return q
...@@ -471,7 +476,8 @@ def add_view_config(config, module, view_name): ...@@ -471,7 +476,8 @@ def add_view_config(config, module, view_name):
module: application module module: application module
views: class or file tobe imported views: class or file tobe imported
""" """
q = DBSession.query(Route).filter(Route.module == module, Route.status == 1) q = DBSession.query(Route).filter(
Route.module == module, Route.status == 1)
for row in q.all(): for row in q.all():
if row.type == 0: if row.type == 0:
config.add_route(row.kode, row.path) config.add_route(row.kode, row.path)
...@@ -549,45 +555,12 @@ def get_module_submenus(parent_id): ...@@ -549,45 +555,12 @@ def get_module_submenus(parent_id):
partner_idcard_url = 'partner/idcard' partner_idcard_url = 'partner/idcard'
def main(global_config, **settings): def get_config(settings):
""" This function returns a Pyramid WSGI application.
"""
default_resource_registry.registry['jquery.maskMoney'] = {
None: {"js": "opensipkd.base:static/jquery/jquery.maskMoney.min.js"}}
engine = engine_from_config(
settings, 'sqlalchemy.', client_encoding='utf8',
max_identifier_length=30) # , convert_unicode=True
DBSession.configure(bind=engine)
LogDBSession.configure(bind=engine)
Base.metadata.bind = engine
init_model()
session_factory = session_factory_from_settings(settings) session_factory = session_factory_from_settings(settings)
if 'localization' not in settings:
settings['localization'] = 'id_ID.UTF-8'
locale.setlocale(locale.LC_ALL, settings['localization'])
if 'timezone' not in settings:
settings['timezone'] = DefaultTimeZone
config = Configurator(settings=settings, config = Configurator(settings=settings,
root_factory='opensipkd.models.RootFactory', root_factory='opensipkd.models.RootFactory',
session_factory=session_factory) session_factory=session_factory)
config.set_default_csrf_options(require_csrf=False) config.set_default_csrf_options(require_csrf=False)
modules = get_modules(settings)
from importlib import import_module
for module in modules:
# compatibility
if module == 'admin':
continue
module = module.replace('/', '.')
mfile = module
m = import_module(mfile)
cfg = m.main(config, **settings)
if cfg:
config = cfg
config.set_security_policy(MySecurityPolicy(settings["session.secret"])) config.set_security_policy(MySecurityPolicy(settings["session.secret"]))
config.add_subscriber(add_cors_headers_response_callback, NewRequest) config.add_subscriber(add_cors_headers_response_callback, NewRequest)
...@@ -651,10 +624,47 @@ def main(global_config, **settings): ...@@ -651,10 +624,47 @@ def main(global_config, **settings):
config.registry['mailer'] = mailer_factory_from_settings(settings) config.registry['mailer'] = mailer_factory_from_settings(settings)
config.scan() config.scan()
for m in modules: # for m in modules:
config.scan(m) # config.scan(m)
return config
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
default_resource_registry.registry['jquery.maskMoney'] = {
None: {"js": "opensipkd.base:static/jquery/jquery.maskMoney.min.js"}}
engine = engine_from_config(
settings, 'sqlalchemy.', client_encoding='utf8',
max_identifier_length=30) # , convert_unicode=True
DBSession.configure(bind=engine)
LogDBSession.configure(bind=engine)
Base.metadata.bind = engine
init_model()
if 'localization' not in settings:
settings['localization'] = 'id_ID.UTF-8'
locale.setlocale(locale.LC_ALL, settings['localization'])
if 'timezone' not in settings:
settings['timezone'] = DefaultTimeZone
# modules = get_modules(settings)
# from importlib import import_module
# for module in modules:
# # compatibility
# if module == 'admin':
# continue
# module = module.replace('/', '.')
# mfile = module
# m = import_module(mfile)
# cfg = m.main(config, **settings)
# if cfg:
# config = cfg
return config.make_wsgi_app() return get_config(settings=settings).make_wsgi_app()
def routes_by_array(config, routs=routes): def routes_by_array(config, routs=routes):
...@@ -665,4 +675,4 @@ def routes_by_array(config, routs=routes): ...@@ -665,4 +675,4 @@ def routes_by_array(config, routs=routes):
route[0], route[1], default_renderer="json_rpc") route[0], route[1], default_renderer="json_rpc")
else: else:
config.add_route(route[0], route[1]) config.add_route(route[0], route[1])
titles[route[0]] = route[2]
\ No newline at end of file \ No newline at end of file
titles[route[0]] = route[2]
...@@ -424,7 +424,7 @@ class BaseView(object): ...@@ -424,7 +424,7 @@ class BaseView(object):
# log.debug(str(qry)) # log.debug(str(qry))
row_table = DataTables(self.req.GET, query, columns) row_table = DataTables(self.req.GET, query, columns)
result = row_table.output_result() result = row_table.output_result()
data = result and "data" in result and result["data"] or {} data = result and result.get("data") or {}
for res in data: for res in data:
for k in res: for k in res:
if k in select_list.keys(): if k in select_list.keys():
...@@ -708,10 +708,19 @@ class BaseView(object): ...@@ -708,10 +708,19 @@ class BaseView(object):
# log.debug(status) # log.debug(status)
# row.status = status # row.status = status
self.db_session.add(row) self.db_session.add(row)
self.db_session.flush() self.after_save(values, row)
return row return row
def after_save(self, values, row):
"""Digunakan apabila ada prosess setelah melakukan penyimpanan data
sebelum di flush ke database biasanya digunakan untuk master detail
Args:
values dict: _description_
row table: _description_
"""
self.db_session.flush()
def save_request(self, values, row=None): def save_request(self, values, row=None):
for k, v in self.req.GET.items(): for k, v in self.req.GET.items():
if k not in values: if k not in values:
......
...@@ -64,12 +64,16 @@ class EditSchema(colander.Schema): ...@@ -64,12 +64,16 @@ class EditSchema(colander.Schema):
permission = colander.SchemaNode( permission = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop, missing=colander.drop,
description="Nama permission untuk menentukan hak akses" description="Nama permission untuk menentukan hak akses",
default="",
) )
class_view = colander.SchemaNode( class_view = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop, missing=colander.drop,
description="Nama file tanpa extension yang berisi class Views") description="Nama file tanpa extension yang berisi class Views",
default=""
),
def_func = colander.SchemaNode( def_func = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop, missing=colander.drop,
...@@ -211,13 +215,15 @@ class Views(BaseView): ...@@ -211,13 +215,15 @@ class Views(BaseView):
def err_nama(): def err_nama():
raise colander.Invalid( raise colander.Invalid(
form, form,
'Nama %s sudah digunakan oleh ID %s' % (values['nama'], found.id) 'Nama %s sudah digunakan oleh ID %s' % (
values['nama'], found.id)
) )
def err_kode(): def err_kode():
raise colander.Invalid( raise colander.Invalid(
form, form,
'Kode %s sudah digunakan oleh ID %s' % (values['kode'], found.id) 'Kode %s sudah digunakan oleh ID %s' % (
values['kode'], found.id)
) )
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
...@@ -246,6 +252,8 @@ class Views(BaseView): ...@@ -246,6 +252,8 @@ class Views(BaseView):
err_kode() err_kode()
elif found: elif found:
err_kode() err_kode()
if "permission" not in values:
values["permission"] = ""
@view_config( @view_config(
route_name='routes-act', renderer='json', permission='edit-title') route_name='routes-act', renderer='json', permission='edit-title')
...@@ -292,4 +300,4 @@ class Views(BaseView): ...@@ -292,4 +300,4 @@ class Views(BaseView):
return values return values
def list_join(self, query, **kwargs): def list_join(self, query, **kwargs):
return query.outerjoin(alias, Route.parent_id == alias.id)
\ No newline at end of file \ No newline at end of file
return query.outerjoin(alias, Route.parent_id == alias.id)
...@@ -6,7 +6,7 @@ import logging ...@@ -6,7 +6,7 @@ import logging
from colander import SchemaNode, null, Mapping, Invalid # , string_types from colander import SchemaNode, null, Mapping, Invalid # , string_types
# from colander import compat # tidak ada di colander 2.0 # from colander import compat # tidak ada di colander 2.0
from deform import widget from deform import widget
from deform.compat import sequence_types, text_type from deform.compat import sequence_types, text_type, text_
from deform.form import Button from deform.form import Button
from deform.i18n import _ from deform.i18n import _
from deform.widget import ( from deform.widget import (
...@@ -260,11 +260,19 @@ class AutocompleteMsInputWidget(AutocompleteInputWidget): ...@@ -260,11 +260,19 @@ class AutocompleteMsInputWidget(AutocompleteInputWidget):
if isinstance(self.values, string_types): if isinstance(self.values, string_types):
options["remote"] = "%s?term=%%QUERY" % self.values options["remote"] = "%s?term=%%QUERY" % self.values
else: else:
# vals = []
# for v in self.values:
# if not isinstance(v, string_types):
# vals.append(v[1])
# if not vals:
# vals = self.values
options["local"] = self.values options["local"] = self.values
options["minLength"] = kw.pop("min_length", self.min_length) options["minLength"] = kw.pop("min_length", self.min_length)
options["limit"] = kw.pop("items", self.items) options["limit"] = kw.pop("items", self.items)
kw["options"] = json.dumps(options) kw["options"] = json.dumps(options)
kw["data"] = self.values
template = readonly and self.readonly_template or self.template template = readonly and self.readonly_template or self.template
tmpl_values = self.get_template_values(field, cstruct, kw) tmpl_values = self.get_template_values(field, cstruct, kw)
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
deform.addCallback( deform.addCallback(
'${oid}', '${oid}',
function (oid) { function (oid) {
$('#' + oid + '-auto_value').typeahead(${ structure: options }); $('#' + oid + '-auto_value').typeahead(${structure: options});
if ("${autofocus}" == "autofocus") { if ("${autofocus}" == "autofocus") {
$('#' + oid + '-auto_value').focus(); $('#' + oid + '-auto_value').focus();
} }
......
[build-system] [build-system]
requires = ['setuptools >= 64'] requires = ['setuptools >= 64', 'wheel']
build-backend = 'setuptools.build_meta'
#requires = ["hatchling"]
#build-backend = "hatchling.build"
[tool.setuptools]
py-modules = ["opensipkd"]
[project] [project]
name = 'opensipkd-base' name = 'opensipkd-base'
version = '4.2' version = '4.2B'
dependencies = [ dependencies = [
'sqlalchemy', 'sqlalchemy',
'colander', 'colander',
...@@ -32,20 +38,32 @@ dependencies = [ ...@@ -32,20 +38,32 @@ dependencies = [
'google', 'google',
'pyjwt', 'pyjwt',
] ]
requires-python = '>= 3.9' requires-python = '>= 3.8'
authors = [ authors = [
{name='Agus Gustiana', email='aa.gustiana@gmail.com'}, {name='Agus Gustiana', email='aa.gustiana@gmail.com'},
] { email = "opensipkd@gmail.com" },]
description = 'Basis Aplikasi openSIPKD'
maintainers = [
{ name = "Ari", email = "ariagungprasetiyo@gmail.com" }]
description = 'Framwork Aplikasi openSIPKD'
readme = 'README.rst' readme = 'README.rst'
license = {text='Apache Software License'} license = {text='Apache Software License'}
keywords = ["openSIPKD"]
classifiers = [ classifiers = [
'Programming Language :: Python :: 3', #'Development Status :: 4 - Beta",
'Operating System :: OS Independent', #'Programming Language :: Python :: 3',
'Framework :: Pylons', #'Operating System :: OS Independent',
'Topic :: Internet :: WWW/HTTP', #'Framework :: Pylons',
'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', #'Topic :: Internet :: WWW/HTTP',
] #'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
]
[project.optional-dependencies]
dev = [
'pyramid_debugtoolbar',
'pytest', 'webtest']
[project.entry-points."paste.app_factory"] [project.entry-points."paste.app_factory"]
main = 'opensipkd.base:main' main = 'opensipkd.base:main'
......
import unittest
from pyramid import testing
from pyramid.paster import get_appsettings
from webtest import TestApp
class MyTest(unittest.TestCase):
def setUp(self):
settings = get_appsettings('test.ini', name='main')
from opensipkd.base import main
self.app = TestApp(main(global_config = None, **settings))
self.config = testing.setUp()
def tearDown(self):
testing.tearDown()
class TestHome(MyTest):
def _callFUT(self, context, request):
from opensipkd.base.views import Home
home=Home(request)
return home.view_home()
def test_home(self):
page = testing.DummyResource()
page['IDoExist'] = testing.DummyResource()
context = testing.DummyResource()
context.__parent__ = page
context.__name__ = 'home'
request = testing.DummyRequest()
info = self._callFUT(context, request)
assert info['page'] == context
print(info["page_text"])
\ No newline at end of file \ No newline at end of file
import unittest
from pyramid import testing
from pyramid.paster import get_appsettings
from webtest import TestApp
class BaseFunctionalTests(unittest.TestCase):
def setUp(self):
settings = get_appsettings('..\magelang.ini', name='main')
from opensipkd.base import main
app = main(global_config=None, **settings)
self.testapp = TestApp(app)
# self.config = testing.setUp()
class HomeFunctionalTests(BaseFunctionalTests):
def test_root(self):
res = self.testapp.get('/', status=200)
self.assertIn(
b'<h1>ABOUT <span class="bold">OPENSIPKD</span></h1>', res.body)
def test_login(self):
from pyramid.csrf import new_csrf_token
# request = testing.DummyRequest()
# Bagaimana masukin registry disini???
request = self.testapp.RequestClass.blank("/login")
request.registry = None
csrf_token = new_csrf_token(request)
params = (("user_name", "sa"), ("password", "12345"),
("csrf_token", csrf_token)
)
res = self.testapp.post('/login', params=params, status=200)
print(res)
import unittest
from pyramid import testing
from pyramid.paster import get_appsettings
class MyTest(unittest.TestCase):
def setUp(self):
settings = get_appsettings('../test.ini', name='main')
from opensipkd.base import main
self.app = TestApp(main(global_config = None, **settings))
self.config = testing.setUp()
def tearDown(self):
testing.tearDown()
def test_view_fn_query_table(self):
from pyramid.httpexceptions import HTTPForbidden
from opensipkd.models import query_table
res = query_table('routes', ['id'])
print(res.first())
# , [('id', '=', 1)]
# self.config.testing_securitypolicy(userid='hank',
# permissive=False)
# request = testing.DummyRequest()
# request.context = testing.DummyResource()
# self.assertRaises(HTTPForbidden, view_fn, request)
# def test_view_fn_allowed(self):
# from my.package import view_fn
# self.config.testing_securitypolicy(userid='hank',
# permissive=True)
# request = testing.DummyRequest()
# request.context = testing.DummyResource()
# response = view_fn(request)
# self.assertEqual(response, {'greeting':'hello'})
import unittest
from pyramid import testing
from pyramid.paster import get_appsettings
class BaseViewTests(unittest.TestCase):
def setUp(self):
settings = get_appsettings('..\magelang.ini', name='main')
from opensipkd.base import get_config, main
app = main(global_config=None, **settings)
# self.testapp = TestApp(self.app)
# self.config = testing.setUp(settings=settings)
self.config = get_config(settings)
def tearDown(self):
testing.tearDown()
class HomeViewTest(BaseViewTests):
def test_home(self):
request = testing.DummyRequest()
request._host = ""
request.menus = ""
from opensipkd.base.views import Home
inst = Home(request)
response = inst.view_home()
print(response)
self.assertEqual("static/img/logo.png", response["logo"])
def test_login_get(self):
request = testing.DummyRequest()
request._host = ""
request.menus = ""
request.referrer = ""
from opensipkd.base.views.user_login import ViewLogin
inst = ViewLogin(request)
response = inst.view_login()
self.assertEqual("Login", response["form"])
def test_login_post(self):
from pyramid.csrf import new_csrf_token
request = testing.DummyRequest(post=True)
request._host = ""
request.menus = ""
request.referrer = ""
from opensipkd.base.views.user_login import ViewLogin
inst = ViewLogin(request)
csrf_token = new_csrf_token(request)
params = (("user_name", "sa"), ("password", "12345"),
("csrf_token", csrf_token))
response = inst.view_login()
self.assertEqual("Login", response["form"])
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!