Refactor pyproject.toml for package discovery and add new dependencies

- Updated package configuration to use setuptools' find_packages with namespace support.
- Included new dependencies: lxml and pandas.
- Created __init__.py in the models module to import from base models.
1 parent b977ea79
......@@ -345,8 +345,8 @@ def main(global_config, **settings):
settings['localization'] = 'id_ID.UTF-8'
if settings.get("lib_dir"):
sqlalchemy_url = settings.get("sqlalchemy.url")
if sqlalchemy_url and sqlalchemy_url.find("oracledb") > -1:
# sqlalchemy_url = settings.get("sqlalchemy.url")
# if sqlalchemy_url and sqlalchemy_url.find("oracledb") > -1:
try:
import oracledb
oracledb.init_oracle_client(lib_dir=settings.get("lib_dir"))
......@@ -363,7 +363,7 @@ def main(global_config, **settings):
if 'timezone' not in settings:
settings['timezone'] = DefaultTimeZone
# settings["captcha_files"] = "c:\\tmp\\captcha\\"
tmp = get_params("temp_files", tempfile.gettempdir(), settings=settings)
tmp = settings.get("temp_files", tempfile.gettempdir())
settings["temp_files"] = tmp
settings['captcha_files'] = os.path.join(tmp, "captcha") + os.sep
......
......@@ -13,10 +13,10 @@ from sqlalchemy.orm import (
backref
)
from opensipkd.models import Partner
from ..models import DBSession, Base
from ..models import (DefaultModel, NamaModel, TABLE_ARGS,
Departemen)
# from opensipkd.models import
# from ..models import DBSession,
from . import (DefaultModel, NamaModel, TABLE_ARGS,
Departemen, Partner, Base)
class Eselon(Base, NamaModel):
......@@ -64,7 +64,7 @@ class PartnerDepartemen(Base, DefaultModel):
@classmethod
def query_jabatan(cls, partner_id, tanggal):
query = DBSession.query(cls). \
query = self.db_session.query(cls). \
filter(cls.partner_id == partner_id,
tanggal >= cls.mulai,
tanggal <= cls.selesai)
......
......@@ -677,10 +677,11 @@ class BaseView(object):
row_table = DataTables(self.req.GET, query, columns)
result = row_table.output_result()
data = result and result.get("data") or {}
for res in data:
if self.list_view_field:
list_url = self.req.route_url(self.list_route)
for res in data:
if self.list_view_field and kwargs.get("link") is not False:
res[self.list_view_field] = f"<a href='{list_url}/{res['id']}/view'>{res[self.list_view_field]}</a>"
for k in res:
if k in select_list.keys():
......@@ -688,10 +689,6 @@ class BaseView(object):
for r in vals:
if r and str(r) == str(res[k]):
res[k] = vals[r]
# 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 list_join(self, query, **kwargs):
......@@ -744,9 +741,12 @@ class BaseView(object):
# response.content_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
# response.content_disposition = 'filename=' + filename
# return response.write(output.read())
def is_tzaware(self, dt):
return dt.tzinfo is not None and dt.tzinfo.utcoffset(dt) is not None
def xls_data(self, **kwargs):
self.req.GET["length"] = "-1"
kwargs["link"] = False
resp = self.get_list(**kwargs)
data = resp.get("data", [])
if not data:
......@@ -770,23 +770,36 @@ class BaseView(object):
and isinstance(d.widget , (widget.SelectWidget, widget.Select2Widget)) \
and d.widget.values or None
if hasattr(d, "visible") and d.visible is False or d.name=="id":
continue
selects[d.name] = {"title": title,
"values": values,
"visible": hasattr(d, "visible") and d.visible or None}
header = list(data[0].keys())
for i, h in enumerate(header):
header[i] = selects[h]["title"]
headers = []
for h in header:
if not selects.get(h, None):
continue
headers.append(selects[h]["title"])
rows = []
row = []
for d in data:
for k, v in d.items():
if isinstance(v, datetime) and self.is_tzaware(v):
d[k] = v.replace(tzinfo=None)
if not selects.get(k, None):
continue
if selects[k]["values"]:
select = isinstance(selects[k]["values"], dict) \
and selects[k]["values"].items() or dict(selects[k]["values"])
d[k] = select.get(v,v)
row = list(d.values())
row.append(d[k])
rows.append(row)
row = []
# for i, h in enumerate(header):
......@@ -810,7 +823,7 @@ class BaseView(object):
value = {
'header': header,
'header': headers,
'rows': rows,
}
return value
......
from ..base.models import *
......@@ -2,11 +2,13 @@
requires = ['setuptools >= 64', 'wheel']
build-backend = 'setuptools.build_meta'
[tool.setuptools]
packages = ["opensipkd", "opensipkd.detable", "opensipkd.base"]
#data-file = [
#("etc/base", ["etc/ojdbc8.jar", "etc/osipkd.service"]),
#]
# [tool.setuptools]
# packages = ["opensipkd", "opensipkd.detable", "opensipkd.base"]
[tool.setuptools.packages.find]
include = ["opensipkd.*"]
namespaces = true # This is the critical line for shared prefixes!
[tool.mypy]
exclude = [
'bak',
......@@ -41,6 +43,8 @@ dependencies = [
'websockets',
"asyncio",
"pdfkit",
"lxml",
"pandas"
]
requires-python = '>= 3.8'
authors = [
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!