Commit cd2cc954 by aagusti

perbaikan Upload

1 parent 5833d1af
......@@ -4,16 +4,17 @@ import re
import mimetypes
import csv
import calendar
# from datetime import (date, datetime, timedelta, )
import datetime
from random import choice
from string import (ascii_uppercase, ascii_lowercase, digits, )
import locale
import colander
import pytz
import io
from pyramid.threadlocal import get_current_registry
# from calendar import monthrange
from json import JSONEncoder
import logging
......@@ -115,6 +116,7 @@ def round_up(n):
def get_settings():
return get_current_registry().settings
def get_params(params, alternate=None):
"""
Digunakan untuk mengambil nilai dari konfigurasi sesuai params yang disebut
......@@ -125,7 +127,8 @@ def get_params(params, alternate=None):
get_params('devel', False)
"""
settings = get_settings()
result = settings and params in settings and settings[params].strip() or None
result = settings and params in settings and settings[
params].strip() or None
return result and result or alternate
......@@ -411,14 +414,44 @@ class SaveFile(object):
if not os.path.exists(full_path):
return full_path
def save(self, content, filename=None):
fullpath = self.create_fullpath()
def save(self, content, ext='', filename=None):
if filename:
fullpath = os.path.join(self.dir_path, filename)
else:
fullpath = self.create_fullpath(ext=ext)
f = open(fullpath, 'wb')
f.write(content)
if type(content) == io.BytesIO:
f.write(content.getbuffer())
else:
f.write(content)
f.close()
return fullpath
class InvalidExtension(Exception):
def __init__(self, exts):
self.error = f"Supported extensions {exts}"
class MemoryTmpStore(dict):
""" Instances of this class implement the
:class:`defWorm.interfaces.FileUploadTempStore` interface"""
def preview_url(self, uid):
return None
mem_tmp_store = MemoryTmpStore()
img_exts = ['.png', '.jpg', '.pdf', '.jpeg']
def image_validator(node, value):
ext = get_ext(value["filename"])
if ext not in img_exts:
raise colander.Invalid(node,
f'Extension harus salahsatu dari {img_exts}')
class Upload(SaveFile):
def save_to_file(self, input_file, ext):
fullpath = self.create_fullpath(ext)
......@@ -432,10 +465,17 @@ class Upload(SaveFile):
output_file.close()
return fullpath
def save(self, request, name):
def save(self, request, name, exts=None):
input_file = request.POST[name].file
ext = get_ext(request.POST[name].filename)
return self.save_to_file(input_file, ext)
if exts and ext not in exts:
raise InvalidExtension(exts)
filename = self.save_to_file(input_file, ext)
print(filename)
head, filename = os.path.split(filename)
return filename
def save_fp(self, upload):
if 'fp' not in upload or upload['fp'] == b'':
......@@ -460,17 +500,6 @@ class Upload(SaveFile):
return d
class MemoryTmpStore(dict):
""" Instances of this class implement the
:class:`defWorm.interfaces.FileUploadTempStore` interface"""
def preview_url(self, uid):
return None
mem_tmp_store = MemoryTmpStore()
class UploadBin(Upload):
"""
Compatibility to previous
......@@ -497,12 +526,14 @@ class CSVRenderer(object):
# karena tak mau hapus, maka dibikin try
try:
fout = io.BytesIO() #
fcsv = csv.writer(fout, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
fcsv = csv.writer(fout, delimiter=',', quotechar='"',
quoting=csv.QUOTE_MINIMAL)
fcsv.writerow(value.get('header', []))
fcsv.writerows(value.get('rows', []))
except:
fout = io.StringIO()
fcsv = csv.writer(fout, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
fcsv = csv.writer(fout, delimiter=',', quotechar='"',
quoting=csv.QUOTE_MINIMAL)
fcsv.writerow(value.get('header', []))
fcsv.writerows(value.get('rows', []))
......@@ -916,7 +947,8 @@ satuan = ['', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh',
def terbilang_(n):
n = int(n)
if n >= 1000000000:
hasil = terbilang_(n / 1000000000) + ['milyar'] + terbilang_(n % 100000000)
hasil = terbilang_(n / 1000000000) + ['milyar'] + terbilang_(
n % 100000000)
elif n > 1000000:
hasil = terbilang_(n / 1000000) + ['juta'] + terbilang_(n % 1000000)
elif n >= 2000:
......
import base64
import hashlib
import hmac
import json
import sys
from datetime import datetime
import requests
from pyramid_rpc.jsonrpc import JsonRpcError
from opensipkd.tools import get_settings, get_random_number
LIMIT = 1000
CODE_OK = 0
MSG_OK = 'Data Submitted'
......@@ -44,7 +48,6 @@ class JsonRpcDataFoundError(JsonRpcError):
message = "Error Data Found"
# error terkait authentication dan authorization
class JsonRpcInvalidLoginError(JsonRpcError):
code = -41001
message = "Invalid RPC User/Password"
......@@ -278,6 +281,66 @@ def json_rpc_header(userid, password, key=None):
return dict(userid=userid, signature=encoded_signature, key=key)
def get_mandatory(data, values):
for value in values:
if value not in data or not data[value]:
raise JsonRpcInvalidDataError(message="{} Not Found".format(value))
def validate_time(request):
global lima_menit
env = request.environ
time_stamp = int(env['HTTP_KEY'])
now = get_seconds()
settings = get_settings()
if 'diff_server_time' in settings and settings["diff_server_time"]:
lima_menit = int(settings["diff_server_time"])
if not request.devel and abs(now - time_stamp) > lima_menit:
log.info(f"req time {time_stamp} server time {now}")
raise JsonRpcInvalidTimeError
return time_stamp
def get_jsonrpc(method, params):
return dict(jsonrpc='2.0', method=method, params=params,
id=int(get_random_number(6)))
def send_rpc(auth, message):
"""
Digunakan untuk mengirim data dengan methode JSONRPC 2.0 with os-auth
:param auth: Dict
{"user": user,
"url": url,
"key": key,
"method": method,
"timeout": optional,
}
:param message: Dict
:return: Dict
"""
userid = auth['user']
password = auth['key']
url = auth['url']
headers = json_rpc_header(userid, password)
params = dict(data=message)
data = get_jsonrpc(auth["method"], params)
timeout = 'timeout' in auth and int(auth['timeout']) or 5
log.info("URL:{} timeout:{} detik".format(url, timeout))
log.warning("REQUEST {}".format(data))
try:
results = requests.post(url, json=data, headers=headers, timeout=timeout) # data=jsondata,
except Exception as e:
log.warning(str(e))
return
if results.status_code != 200:
log.info(results)
log.info(results.text)
return
rows = results.text and json.loads(results.text) or None
log.info("RESPONSE {}".format(rows))
return rows
##############################
# Web Service Authentication #
##############################
......
......@@ -3,6 +3,8 @@
# from types import (
# StringType,
# UnicodeType)
from sqlalchemy import func
from ..tools import FixLength, get_settings
# from models import pbbDBSession
# from models.ref import TempatPembayaran
......@@ -223,7 +225,8 @@ def hitung_denda(piutang_pokok, jatuh_tempo, tanggal=None, max_denda=24):
if not tanggal:
tanggal = datetime.now().date()
if ensure_datetime(tanggal) < ensure_datetime(jatuh_tempo): # + timedelta(days=1):
if ensure_datetime(tanggal) < ensure_datetime(
jatuh_tempo): # + timedelta(days=1):
return 0
kini = datetime.now()
......@@ -243,18 +246,24 @@ def hitung_denda(piutang_pokok, jatuh_tempo, tanggal=None, max_denda=24):
def nop_formatted(row):
if type(row) == str:
row = FixNop(row)
return "%s.%s-%s.%s-%s.%s.%s" % (row.kd_propinsi, row.kd_dati2, row.kd_kecamatan,
row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op)
return "%s.%s-%s.%s-%s.%s.%s" % (
row.kd_propinsi, row.kd_dati2, row.kd_kecamatan,
row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op)
def nop_to_id(row):
if type(row) in (StringType, UnicodeType):
row = FixNop(row)
return "%s%s%s%s%s%s%s" % (row.kd_propinsi, row.kd_dati2, row.kd_kecamatan,
row.kd_kelurahan, row.kd_blok, row.no_urut, row.kd_jns_op)
row.kd_kelurahan, row.kd_blok, row.no_urut,
row.kd_jns_op)
def query_nop(table):
return func.concat(table.kd_propinsi, '.', table.kd_dati2, '-',
table.kd_kecamatan,'.',table.kd_kelurahan, '-',
table.kd_blok, '.',table.no_urut, '-',
table.kd_jns_op)
# JEnis REstitusi Kompensasi
......@@ -376,6 +385,7 @@ def filter_nop(qry, nop, tahun=None):
qry = qry.filter_by(thn_pajak_sppt=tahun)
return qry
# def filter_nop(qry, param, cls=None):
# nop = FixNop(param)
# if cls:
......@@ -406,4 +416,4 @@ def pbb_nip(user_name):
filter_by(nm_login=user_name.upper()).first()
if row:
return row.nip
return
\ No newline at end of file
return
......@@ -4,23 +4,21 @@ import ntpath
import csv
import io
from datetime import datetime
#from z3c.rml import rml2pdf
# from z3c.rml import rml2pdf
import subprocess
import logging
from ..tools import get_settings, get_params
log = logging.getLogger(__name__)
rpt_path = ""
def get_root_path():
_here = os.path.dirname(__file__)
return _here
# def get_root_path():
# _here = os.path.dirname(__file__)
# return _here
def get_logo():
path = get_params('report_img', os.path.join(os.path.dirname(get_root_path()), 'static/img'))
# FIXME opensipkd/static to be changed by active app folder
def get_logo(base_path=""):
path = get_params('report_img', os.path.join(base_path, 'static/img'))
return path + "/logo.png", path + "/line.png"
......@@ -29,7 +27,7 @@ def waktu():
def open_rml_row(row_tpl_filename):
f = open(rpt_path + row_tpl_filename)
f = open(row_tpl_filename)
row_rml = f.read()
f.close()
return row_rml
......@@ -40,11 +38,11 @@ def open_rml_pdf(tpl_filename, **kwargs):
# log.warning("Not Supported")
# return
pdf_filename = tpl_filename + '.pdf'
f = open(rpt_path + tpl_filename)
f = open(tpl_filename)
rml = f.read()
f.close()
logo, line = get_logo() # path + "/img/logo.png"
base_path = kwargs.get('base_path')
logo, line = get_logo(base_path)
params = {}
for key, value in kwargs.items():
......@@ -72,7 +70,7 @@ def openfile_response(request, filepath):
return response
def file_response(request, f, filename, filetype=None):
def file_response(request, f=None, filename=None, filetype=None):
"""
:param request:
:param f: object file
......@@ -92,7 +90,7 @@ def file_response(request, f, filename, filetype=None):
filetype = ''.join(t[-1:])
response = request.response
response.content_type = "application/" + filetype
response.content_type = f"application/{filetype}"
response.content_disposition = 'filename=' + fname
if filetype == "txt":
response.charset = "UTF-8"
......@@ -106,7 +104,6 @@ def set_response(request, filename):
ext = 'image/' + ext
elif ext in ['pdf']:
ext = 'application/' + ext
with open(filename, 'rb') as f:
return file_response(request, f, filename, ext)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!