Commit cd12e57d by aagusti

init

0 parents
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
env2/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
inventori/
bak/
wiki/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# dotenv
.env
# virtualenv
.venv
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
*.ini
logo.png
opensipkd/static/img/logo.png
.idea/
.project/
.DS_Store
config.py
.vscode/
0.0.1.0 2023-03-06
Initial Version
\ No newline at end of file \ No newline at end of file
File mode changed
#BPHTB Model dan APPS
##Konfigurasi
```
pyramid.includes =
opensipkd.bphtb.models
opensipkd.bphtb.apps
```
#Requirements
1. opensipkd.tools
2. opensipkd.base
##Migrasi
1. initialize_bphtb_db config.ini
2. initialize_opensipkd_db config.ini
3. initialize_bphtb_app config.ini
#Parameters:
- `bphtb.url`
#Permissions
1. bphtb-admin
2. bphtb-sspd
3. bphtb-peneliti
4. bphtb-approval
5. bphtb-pelayanan
6. bphtb-penerimaan
#Menus
1. Master
a. Provinsi
b. Kabupaten/Kota
c. Kecamatan
d. Kelurahan
e. PPAT
f. User-PPAT
g. Level Approval
g. User Approval
h. Alasan Pengurangan
i. Dasar Perhitungan
j. Bentuk Hukum *
k. Jenis Perolehan
l. Status Kepemilikan
m. Pejabat
n. Jabatan Pegawai
o. Keterangan Pengalihan
p. Jenis Lahan
2. SSPD
3. Penerimaan
4. Penelitian
Perubahan Proses
a. Data lama di copy ke bphtb_validasi
b. Data yang diedit adalah data sspd lama
5. Persetujuan (BPHTB Approval)
a. Penambahan field sspd_id
b. BPHTB bphtb_sk mengacu ke sspd_id
6. Pelayanan
a. Berkas masuk
b. Berkas keluar
7. Nilai Pasar
8. Laporan PPAT
# Integrasi (API)
1. Perbankan
2. BPN
3. PBB
4. Catatan Sipil (Optional)
# SSPD
1. Apabila PPAT yang input maka bisa memilih/Input Wajib Pajak
2. Apabila WP yang input maka bisa memilih PPAT
venv/bin/activate
\ No newline at end of file \ No newline at end of file
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
\ No newline at end of file \ No newline at end of file
from opensipkd.base import get_params
from opensipkd.base import titles
COBA_UPLOAD = get_params('coba_upload', '/tmp/coba/upload')
routes = [
("coba-home", "/coba/home", "Home Coba"),
("coba", "/coba", "Daftar"),
("coba-add", "/coba/add", "Tambah"),
("coba-edit", "/coba/{id}/edit", "Koreksi"),
("coba-view", "/coba/{id}/view", "Lihat"),
("coba-delete", "/coba/{id}/delete", "Hapus"),
("coba-act", "/coba/{act}/act", "Koreksi"),
]
# def init_db(config):
# settings = get_settings()
# url = 'bphtb.url' in settings and settings['bphtb.url'] and 'bphtb.' or 'sqlalchemy.'
# pool_size = 'pool_size' in settings and int(settings['pool_size']) or 5
# max_overflow = 'max_overflow' in settings and int(settings['max_overflow']) or 10
# params = dict(pool_size=pool_size, max_overflow=max_overflow)
# engine = engine_from_config(settings, url, **params)
# BphtbDBSession.configure(bind=engine)
# BphtbBase.metadata.bind = engine
def includeme(config):
for route in routes:
config.add_route(route[0], route[1])
titles[route[0]] = route[2]
config.add_static_view('coba/static', 'opensipkd.coba:static',
cache_max_age=3600)
config.add_static_view('coba/upload', COBA_UPLOAD,
cache_max_age=3600)
# config.add_static_view('static_coba',
# get_params('static_coba', '/tmp/static_coba'),
# cache_max_age=0)
config.scan('.')
from sqlalchemy.ext.declarative import declarative_base
from zope.sqlalchemy import register
from sqlalchemy import Column, ForeignKey, Integer, String, engine_from_config, func
from opensipkd.base.models import Base, CommonModel, DefaultModel, TABLE_ARGS
from opensipkd.base import get_settings
from opensipkd.models import User
from sqlalchemy.orm import (scoped_session, sessionmaker)
# session_factory = sessionmaker()
# BphtbDBSession = scoped_session(session_factory)
# BphtbBase = declarative_base()
# bphtb_schema = 'bphtb'
# register(BphtbDBSession)
# BPHTB_ARGS = {'extend_existing': True, 'schema': bphtb_schema}
class Coba(Base, DefaultModel):
__tablename__="coba"
__table_args__ = (TABLE_ARGS,)
kode = Column(String(255))
nama = Column(String(255))
file_1 = Column(String(255))
file_2 = Column(String(255))
file_3 = Column(String(255))
class CobaItems(Base, DefaultModel):
__tablename__="coba_items"
__table_args__ = (TABLE_ARGS,)
coba_id = Column(Integer, ForeignKey(Coba.id))
user_id = Column(Integer, ForeignKey(User.id))
qty = Column(Integer)
price = Column(Integer)
amount = Column(Integer)
# class BphtbModel(CommonModel):
# def save(self, session=BphtbDBSession):
# if self.id:
# session.merge(self)
# else:
# session.add(self)
# @classmethod
# def count(cls, session=BphtbDBSession):
# return session.query(func.count('id')).scalar()
# @classmethod
# def query(cls, session=BphtbDBSession):
# return session.query(cls)
# @classmethod
# def query_id(cls, id, session=BphtbDBSession):
# return cls.query().filter_by(id=id)
# @classmethod
# def delete(cls, id, session=BphtbDBSession):
# cls.query_id(id, session).delete()
# @classmethod
# def query_kode(cls, kode, session=BphtbDBSession):
# return cls.query(session).filter_by(kode=kode)
# @classmethod
# def query_kode_rek(cls, rekeningkd, session=BphtbDBSession):
# return cls.query(session).filter_by(rekeningkd=rekeningkd)
# @classmethod
# def query_nama(cls, nama, session=BphtbDBSession):
# return cls.query(session).filter_by(nama=nama)
# @classmethod
# def query_nik(cls, nik, session=BphtbDBSession):
# return cls.query(session).filter_by(nik_pemohon=nik)
# from .invoice import Invoice
# from .payment import Payment, BphtbPayment
# from .validasi import BphtbValidasi, BphtbApproval, BphtbApprovalFinal
# from .validasi import BphtbValidasiUser, BphtbValidasiLevel
# from .ref import Propinsi, Dati2, Kelurahan, Kecamatan, BphtbAlasanPengurang
# from .ref import BphtbPerhitungan, BphtbHukum, BphtbStatusHak
# from .ppat import BphtbPpat, BphtbPpatUser
import os
import transaction
import sys
from opensipkd.base.scripts.initializedb import alembic_run, restore_csv
from opensipkd.base import Base
from sqlalchemy import engine_from_config
from ..models import (Coba, CobaItems)
from pyramid.paster import (
get_appsettings,
setup_logging,
)
from opensipkd.models import DBSession
def get_file(filename):
base_dir = os.path.split(__file__)[0]
fullpath = os.path.join(base_dir, 'data', filename)
return open(fullpath)
def usage(argv):
pass
def main(argv=sys.argv):
if len(argv) != 2:
usage(argv)
config_uri = argv[1]
setup_logging(config_uri)
settings = get_appsettings(config_uri)
bin_path = os.path.split(sys.executable)[0]
# alembic_run(config_uri, 'alembic_coba')
# pjdl_engine = engine_from_config(settings, 'sqlalchemy.')
# ModuleDBSession.configure(bind=pjdl_engine)
# ModuleBase.metadata.bind = pjdl_engine
# ModuleBase.metadata.create_all()
# init_model()
# reset_sequences()
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.bind = engine
Base.metadata.create_all()
# ModuleBase.metadata.create_all()
print('>>Append Table')
# restore_csv(PjdlReklameStatus,
# 'rk_status.csv', get_file, DBSession)
# restore_csv(PjdlReklameKelasJalan,
# 'rk_kelas_jalan.csv', get_file, DBSession)
# restore_csv(PjdlReklameNilaiStrategis,
# 'nilai_strategis.csv', get_file, DBSession)
# restore_csv(PjdlReklameCahaya,
# 'rk_cahaya.csv', get_file, DBSession)
# restore_csv(PjdlReklamePasang,
# 'rk_pasang.csv', get_file, DBSession)
# restore_csv(PjdlReklameLokasi,
# 'rk_lokasi.csv', get_file, DBSession)
# restore_csv(PjdlReklameSudutPandang,
# 'rk_sp.csv', get_file, DBSession)
# restore_csv(PjdlReklameNilaiKelasJalan,
# 'rk_nilai_kj.csv', get_file, DBSession)
transaction.commit()
print('>>Appended')
print('****PJDL Models CREATED****')
def migrate(argv=sys.argv):
if len(argv) != 2:
usage(argv)
config_uri = argv[1]
setup_logging(config_uri)
alembic_run(config_uri, 'alembic_pjdl')
transaction.commit()
print('>>Migrated')
print('****PJDL Models Migrated****')
import logging
import os
from opensipkd.base.views import BaseView as MasterBaseView
from pyramid.renderers import render_to_response
from pyramid.view import view_config
import colander
from sqlalchemy import String, func
# from opensipkd.bphtb.models import bphtbReports, bphtbReportItems
import opensipkd.tools
from opensipkd.tools import dMy, date_from_str, dmy, ymd
from opensipkd.tools.report import csv_response, file_response
from opensipkd.base import get_params
from opensipkd.models import flush
from pyramid.exceptions import HTTPNotFound
_logging = logging.getLogger(__name__)
class BaseView(MasterBaseView):
pass
class HomeView(BaseView):
def __init__(self, request):
super(HomeView, self).__init__(request)
@view_config(route_name='coba-home', renderer='templates/home.pt',
permission='view')
def view_home(self):
tpl = self.get_params("coba-home-tpl")
if tpl:
return render_to_response(f'templates/{tpl}.pt', {},
request=self.req)
return dict()
# class BaseView(MasterBaseView):
# def __init__(self, request):
# super().__init__(request)
# self.path = os.path.dirname(os.path.dirname(__file__))
# def get_report_filter(self, values, pars, opts=True):
# # pars = p.split(":")
# if opts:
# if pars[1] not in values:
# raise HTTPNotFound(f"Parameter {pars[1]} belum dipilih")
# # if pars[1].find("customer")>-1:
# # raise Exception("X")
# if pars[1] in values:
# vals = values[pars[1]]
# if pars[2] == "str":
# self.params[pars[1]]=str(vals)
# if not opts:
# if self.kondisi:
# self.kondisi = f"{self.kondisi} AND {pars[0]}='{vals}'"
# else:
# self.kondisi = f"{pars[0]}='{vals}'"
# vals = f"'{vals}'"
# self.qry = self.qry.filter(
# func.CAST(bphtbReportItems.params[pars[1]], String) == f'"{vals}"')
# elif pars[2] == "int":
# self.params[pars[1]] = int(vals)
# if not opts:
# self.kondisi = f"{self.kondisi} AND {pars[0]}={vals}"
# vals = f"{vals}"
# self.qry = self.qry.filter(
# func.CAST(bphtbReportItems.params[pars[1]], String) == f'{vals}')
# elif pars[2] in ["dMy", "ymd", "dmy"]:
# vals = date_from_str(vals)
# fc = getattr(opensipkd.tools, pars[2])
# vals = f"{fc(vals)}"
# self.params[pars[1]] = vals
# self.qry = self.qry.filter(
# func.CAST(bphtbReportItems.params[pars[1]], String) == f'"{vals}"')
# if not opts:
# self.kondisi = f"{self.kondisi} AND {pars[0]}='{vals}'"
# else:
# raise Exception(f"Belum ada fungsi {pars[2]}")
# # if pars[1]!="tgl_cetak":
# def jasper_response(self, **kwargs):
# from opensipkd.base.tools.report import jasper_export
# output_formats = kwargs.get("output_formats", ["pdf"])
# path = get_params("bphtb_report_files", '/tmp/bphtb/reports')
# if not os.path.exists(path):
# os.makedirs(path)
# rpt_name = os.path.basename(self.report_file)
# row = bphtbReports.query_kode(rpt_name).first()
# if not row:
# return HTTPNotFound("File report belum terdaftar")
# self.qry = bphtbReportItems.query().filter(bphtbReportItems.report_id == row.id)
# self.params = {}
# self.kondisi = ""
# if row and row.params:
# par = row.params.split(",")
# if par:
# values = kwargs.get("values", {})
# for p in par:
# if p.startswith('['):
# # optional parameter
# p = p.strip('[').strip(']')
# pars = p.split(":")
# _logging.debug(f"pars: {pars}")
# self.get_report_filter(values, pars, False)
# else:
# pars = p.split(":")
# _logging.debug(f"pars: {pars}")
# if pars[1] not in values:
# return HTTPNotFound(f"Parameter {p} Tidak Ditemukan")
# self.get_report_filter( values, pars)
# self.params["kondisi"] = self.kondisi
# self.qry = self.qry.filter(
# func.CAST(
# bphtbReportItems.params["output_formats"], String) == f'"{output_formats}"')
# items = self.qry.first()
# force = kwargs.get("force", False)
# if items and not force:
# file_name = os.path.join(path, items.file_name)
# if not os.path.exists(os.path.join(path, file_name)):
# force = True
# else:
# force = True
# if force:
# self.params.update(default_params)
# file_name = jasper_export(
# self.report_file, path, parameters=self.params,
# output_formats=output_formats)[0]
# if not items:
# items = bphtbReportItems()
# items.report_id = row.id
# self.params["output_formats"] = output_formats
# items.params = self.params
# items.file_name = os.path.basename(file_name)
# flush(items)
# return file_response(self.req, filename=file_name)
# from opensipkd.bphtb.apps.views.kelurahan import kelurahan_widget, KelurahanFilterSchema
# from opensipkd.bphtb.apps.views.kecamatan import kecamatan_widget, KecamatanFilterSchema
<html
metal:use-macro="load: opensipkd.base:/views/templates/base3.1.pt"
tal:omit-tag=""
tal:define="
route_name request.matched_route.name;
coba ['coba','coba-add','coba-edit','coba-delete','coba-view'];
"
>
<js metal:fill-slot="js_files">
<script src="${home}/static/v3/js/plugin/datatables/jquery.dataTables.min.js"></script>
<script src="${home}/static/v3/js/plugin/datatables/dataTables.colVis.min.js"></script>
<script src="${home}/static/v3/js/plugin/datatables/dataTables.tableTools.min.js"></script>
<script src="${home}/static/v3/js/plugin/datatables/dataTables.bootstrap.min.js"></script>
<script src="${home}/static/v3/js/plugin/datatable-responsive/datatables.responsive.min.js"></script>
</js>
<span metal:fill-slot="navs" tal:omit-tag="">
<ul class="margin-top-0 padding-top-0">
<li tal:attributes="class route_name == 'coba'">
<a href="${home}/coba">
<i class="fa fa-lg fa-fw fa-home"></i>
<span class="menu-item-parent">Beranda</span>
</a>
</li>
<!-- Master -->
<!-- <li>
<a href="#">
<i class="fa fa-lg fa-fw fa-book"></i>
<span class="menu-item-parent">Master</span>
</a>
<ul> -->
<li tal:attributes="class route_name in coba and 'active'">
<a href="${home}/coba">List</a>
</li>
<li tal:attributes="class route_name == 'coba-add' and 'active'">
<a href="${home}/coba/add">Form Tambah</a>
</li>
<!-- </ul> -->
<!-- </li> -->
</span>
</html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: ./base.pt">
<div metal:fill-slot="content">
<div class="panel panel-default col-md-8 col-xm-12">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-fw fa-plus"></i>&nbsp;${request.title}</h3>
</div>
<div class="panel-body">
<div tal:content="structure form"></div>
</div>
</div>
</div>
<script metal:fill-slot="scripts">
$(document).ready(function () {
${structure:scripts}
});
</script>
</html>
<html metal:use-macro="load: ./base.pt" tal:omit-tag="">
<div metal:fill-slot="content" tal:omit-tag="">
<h1>Home BPHTB</h1>
</div>
</html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: ./base.pt">
<div metal:fill-slot="content">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-fw fa-plus"></i>&nbsp;${request.title}</h3>
</div>
<div class="panel-body">
<div tal:content="structure form"></div>
</div>
</div>
</div>
<script metal:fill-slot="scripts">
$(document).ready(function () {
${structure:scripts}
});
</script>
</html>
<html metal:use-macro="load: ./base.pt">
<div metal:fill-slot="content">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-fw fa-file"></i>&nbsp;${request.title}</h3>
</div>
<div class="panel-body">
<div tal:content="structure form"></div>
</div>
</div>
</div>
<script metal:fill-slot="scripts">
$(document).ready(function () {
$("button[name^='csv']").click(function () {
var url = "${request.route_url('pjdl-pendataan-report-act', act = 'csv')}?";
var data = $("#deform").serialize();
window.open(url + data);
});
$("button[name^='pdf']").click(function () {
var url = "${request.route_url('pjdl-pendataan-report-act', act = 'pdf')}?";
var data = $("#deform").serialize();
window.open(url + data);
});
$("button[name^='xls']").click(function () {
var url = "${request.route_url('pjdl-pendataan-report-act', act = 'xls')}?";
var data = $("#deform").serialize();
window.open(url + data);
});
});
</script>
</html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: ./base.pt" tal:omit-tag="">
<div metal:fill-slot="content" tal:omit-tag="">
<h1>Test Template</h1>
</div>
</html>
\ No newline at end of file \ No newline at end of file
import os
import colander
from deform import widget, FileData
from pyramid.view import view_config
from opensipkd.tools import mem_tmp_store, Upload
from opensipkd.base import get_urls
from opensipkd.coba.models import Coba
from . import BaseView
from opensipkd.coba import COBA_UPLOAD
# from opensipkd.base.views import widget_os
# from opensipkd.tools.report import csv_response
# from sqlalchemy import and_
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(min=3, max=10),
)
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(min=3, max=64),
)
file_1 = colander.SchemaNode(
FileData(),
widget=widget.FileUploadWidget(tmpstore=mem_tmp_store),
)
file_2 = colander.SchemaNode(
FileData(),
widget=widget.FileUploadWidget(tmpstore=mem_tmp_store),
)
file_3 = colander.SchemaNode(
FileData(),
widget=widget.FileUploadWidget(tmpstore=mem_tmp_store),
)
class EditSchema(AddSchema):
id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget()
)
class ListSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(),
title="Action"
)
kode = colander.SchemaNode(
colander.String(),
title="Kode",
)
nama = colander.SchemaNode(
colander.String(),
title="Nama",
field="nama"
)
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.list_schema = ListSchema
self.list_route = "coba"
self.table = Coba
self.list_buttons = self.list_buttons + self.list_report
# path = os.path.dirname(__file__)
# self.report_file = os.path.dirname(
# path)+"/reports/master/kelurahan.jrxml"
# def get_bindings(self, row):
# return {"kecamatan_list":Kecamatan.get_list()}
def form_validator(self, form, value):
if "file_1" in value:
upload = Upload(COBA_UPLOAD)
value["file_1"]=upload.save_fp(value["file_1"])
if "file_2" in value:
upload = Upload(COBA_UPLOAD)
value["file_2"]=upload.save_fp(value["file_2"])
if "file_3" in value:
upload = Upload(COBA_UPLOAD)
value["file_3"]=upload.save_fp(value["file_3"])
# exc = colander.Invalid(form, '')
# def err_kode():
# exc['kelurahankd'] = 'Kode %s sudah digunakan oleh %s' % (
# value['kelurahankd'], found.nama)
# raise exc
# def err_nama():
# exc['nm_kelurahan'] = 'Uraian %s sudah digunakan oleh kode %s' % (
# value['nm_kelurahan'], found.kode)
# raise exc
# if 'id' in form.request.matchdict:
# uid = form.request.matchdict['id']
# q =Kelurahan.query_id(uid)
# current = q.first()
# else:
# current = None
# found =Kelurahan.query_kode(value['kelurahankd']).first()
# if current:
# if found and found.id != current.id:
# err_kode()
# elif found:
# err_kode()
# found =Kelurahan.query_nama(value['nm_kelurahan']).first()
# if current:
# if found and found.id != current.id:
# err_nama()
# elif found:
# err_nama()
def get_values(self, row, istime=False):
d = super().get_values(row, istime=False)
folder = COBA_UPLOAD+'/'
url = get_urls(self.req.static_url(folder))
if "file_1" in d:
filename = row.file_1
preview_url = "/".join([url, filename])
d["file_1"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
if "file_2" in d:
filename = row.file_2
preview_url = "/".join([url, filename])
d["file_2"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
if "file_3" in d:
filename = row.file_1
preview_url = "/".join([url, filename])
d["file_3"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
return d
@view_config(route_name='coba', renderer='templates/list.pt',
permission='view')
def view_list(self):
return super(Views, self).view_list()
@view_config(route_name='coba-act', renderer='json',
permission='view')
def view_act(self):
return super().view_act()
@view_config(route_name='coba-add', renderer='templates/form.pt',
permission='bphtb-admin')
def view_add(self):
return super().view_add()
@view_config(route_name='coba-edit', renderer='templates/form.pt',
permission='view')
def view_edit(self):
return super().view_edit()
@view_config(route_name='coba-delete', renderer='templates/form.pt',
permission='view')
def view_delete(self):
return super().view_delete()
@view_config(route_name='coba-view', renderer='templates/form.pt',
permission='view')
def view_view(self):
return super().view_view()
# def next_act(self):
# url_dict = self.req.matchdict
# if url_dict['act'] == 'select':
# kecamatan_id = self.req.GET["kecamatan_id"]
# qry = _kelurahan_list(kecamatan_id)
# return {f"{r.id}": f"{r.kelurahankd}-{r.nm_kelurahan}" for r in qry}
# return super().next_act()
# def list_join(self, query):
# return query.join(Kecamatan,
# and_(Kecamatan.kd_propinsi==Kelurahan.kd_propinsi,
# Kecamatan.kd_dati2==Kelurahan.kd_dati2,
# Kecamatan.kd_kecamatan==Kelurahan.kd_kecamatan))
# def get_values(self, row, istime=False):
# d = row.to_dict(date_format = '%Y-%m-%d')
# for f in d:
# if type(d[f]) is str:
# d[f] = d[f].strip()
# return d
# def _kelurahan_list(kecamatan_id=None):
# qry =Kelurahan.query().order_by(Kelurahan.nm_kelurahan)
# if kecamatan_id:
# qry = qry.filter(Kelurahan.kecamatan_id == kecamatan_id)
# return qry
# def kelurahan_list(kecamatan_id=None):
# qry = _kelurahan_list(kecamatan_id)
# return [(r.id, r.nm_kelurahan) for r in qry]
# def kelurahan_select(kecamatan_id=None):
# result = kelurahan_list(kecamatan_id)
# result.insert(0, ('', 'Semua Kelurahan'))
# return result
# @colander.deferred
# def kelurahan_widget(node, kw):
# # values = kw.get('kecamatan_list', [])
# # return widget.Select2Widget(values=values)
# values = kw.get('kelurahan_list', [])
# url = node and hasattr(node, 'slave_url') and node.slave_url or ""
# slave = node and hasattr(node, 'slave') and node.slave or ""
# return widget_os.Select2MsWidget(values=values,
# url=url,
# slave=slave,
# placeholder="Pilih Kelurahan",
# style="width:200px;")
# class KelurahanFilterSchema(KecamatanFilterSchema):
# kelurahan_id = colander.SchemaNode(
# colander.Integer(),
# widget=kelurahan_widget,
# title="Kelurahan",
# oid="kelurahan_id",
# missing=colander.drop,
# )
SQLAlchemy~=1.4.19
alembic~=1.6.5
setuptools~=56.0.0
colander~=1.8.3
deform~=2.0.15
pyramid~=2.0
transaction~=3.0.1
\ No newline at end of file \ No newline at end of file
import os
from setuptools import setup, find_packages
here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.rst')) as f:
README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
CHANGES = f.read()
line = CHANGES.splitlines()[0]
version = line.split()[0]
requires = []
prod_requires = [
'sqlalchemy', 'pyramid_rpc', 'transaction', 'pyramid',
'opensipkd-base @'
'git+https://git.opensipkd.com/aa.gusti/base.git@ciamis#egg=opensipkd-base>=3.0.0',
]
dev_requires = []
setup(
name='opensipkd_coba',
version=version,
url='',
description='Test Application',
long_description=README + '\n\n' + CHANGES,
author='Agus Gustiana',
author_email='aa.gustiana@gmail.com',
classifiers=[
"Programming Language :: Python",
"Framework :: Pylons",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
],
license='Apache Software License',
keywords='web pyramid pylons base',
packages=find_packages(),
# package_dir={'': 'src'},
zip_safe=False,
install_requires=requires,
tests_require=requires,
extras_require={
'dev': dev_requires,
'prod':prod_requires,
},
include_package_data=True,
entry_points="""\
[console_scripts]
initialize_coba_db = opensipkd.coba.scripts.initializedb:main
""",
)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!