Skip to content
Snippets Groups Projects
Commit 89df4bc9 authored by anonymous's avatar anonymous
Browse files
parents 007e838d 9ff0190c
Branches
Tags
No related merge requests found
import socket import socket
import sys import sys
import time import time
import ConfigParser from ckan.common import config
import logging
log = logging.getLogger(__name__)
class ODSHICAPRequest(object): class ODSHICAPRequest(object):
def __init__(self, FILENAME, FILEBUFF, cfg_file='odsh_icap_client.cfg'): def __init__(self, FILENAME, FILEBUFF):
config = ConfigParser.ConfigParser() self.HOST = config.get("ckanext.odsh.icap.host", "10.61.127.77") #'10.61.127.77'
config.read(cfg_file) self.PORT = config.get("ckanext.odsh.icap.port", 1344)
self.HOST = '10.61.127.77'
self.PORT = 1344
self.CLIENTIP = '127.0.0.1' self.CLIENTIP = '127.0.0.1'
self.FILENAME = FILENAME self.FILENAME = FILENAME
self.FILEBUFF = FILEBUFF self.FILEBUFF = FILEBUFF
def send(self): def send(self):
print("----- Starting ICAP-Request via RESPMOD -----") log.info("----- Starting ICAP-Request via RESPMOD -----")
# socket connect # socket connect
try: try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as msg: except socket.error as msg:
sys.stderr.write("[ERROR] %s\n" % msg[1]) log.error(msg[1])
sys.exit(1) sys.exit(1)
try: try:
sock.connect((self.HOST, self.PORT)) sock.connect((self.HOST, self.PORT))
except socket.error as msg: except socket.error as msg:
sys.stderr.write("[ERROR] %s\n" % msg[1]) log.error(msg[1])
sys.exit(2) sys.exit(2)
# create and send header # create and send header
...@@ -43,7 +45,7 @@ class ODSHICAPRequest(object): ...@@ -43,7 +45,7 @@ class ODSHICAPRequest(object):
data_response = self._recvall(sock) data_response = self._recvall(sock)
response_object = self._parse_response(data_response) response_object = self._parse_response(data_response)
print("----- Finished ICAP-Request via RESPMOD -----") log.info("----- Finished ICAP-Request via RESPMOD -----")
return response_object return response_object
...@@ -71,12 +73,12 @@ class ODSHICAPRequest(object): ...@@ -71,12 +73,12 @@ class ODSHICAPRequest(object):
return icapRequest return icapRequest
def _sendfile(self, fileBuffer, sock): def _sendfile(self, fileBuffer, sock):
print('start sending file') log.info('Start sending file.')
PACK_SIZE = 1024 # in bytes PACK_SIZE = 1024 # in bytes
l = fileBuffer.read(PACK_SIZE) l = fileBuffer.read(PACK_SIZE)
while(l): while(l):
print('sending %d bytes of data...' % len(l)) log.info('Sending {} bytes of data...'.format(len(l)))
sock.send('{:02X}'.format(len(l)).encode()) sock.send('{:02X}'.format(len(l)).encode())
sock.send("\r\n".encode()) sock.send("\r\n".encode())
sock.send(l) sock.send(l)
...@@ -84,22 +86,22 @@ class ODSHICAPRequest(object): ...@@ -84,22 +86,22 @@ class ODSHICAPRequest(object):
l = fileBuffer.read(PACK_SIZE) l = fileBuffer.read(PACK_SIZE)
def _sendfile_old(self, fileName, sock): def _sendfile_old(self, fileName, sock):
print('start sending file') log.info('OLD: Start sending file.')
PACK_SIZE = 1024 # in bytes PACK_SIZE = 1024 # in bytes
with open(fileName) as f: with open(fileName) as f:
l = f.read(PACK_SIZE) l = f.read(PACK_SIZE)
while(l): while(l):
print('sending %d bytes of data...' % len(l)) log.info('Sending {} bytes of data...'.format(len(l)))
sock.send('{:02X}'.format(len(l)).encode()) sock.send('{:02X}'.format(len(l)).encode())
sock.send("\r\n".encode()) sock.send("\r\n".encode())
sock.send(l) sock.send(l)
sock.send("\r\n".encode()) sock.send("\r\n".encode())
l = f.read(PACK_SIZE) l = f.read(PACK_SIZE)
print('done sending') log.info('Done sending.')
def _recvall(self, sock): def _recvall(self, sock):
print('receiving response from icap server') log.info('Receiving response from icap server...')
BUFF_SIZE = 4096 # 4 KiB BUFF_SIZE = 4096 # 4 KiB
data = b'' data = b''
while True: while True:
...@@ -111,7 +113,7 @@ class ODSHICAPRequest(object): ...@@ -111,7 +113,7 @@ class ODSHICAPRequest(object):
return data return data
def _parse_response(self, data_response): def _parse_response(self, data_response):
print('parsing response') log.info('Parsing response...')
lines = data_response.split('\r\n') lines = data_response.split('\r\n')
http_status_code = self._parse_response_http_statuscode(lines) http_status_code = self._parse_response_http_statuscode(lines)
http_block = self._parse_block(lines, 'HTTP/1.1') http_block = self._parse_block(lines, 'HTTP/1.1')
...@@ -160,7 +162,9 @@ class ODSHParsedICAPResponse(object): ...@@ -160,7 +162,9 @@ class ODSHParsedICAPResponse(object):
def virus_found(self): def virus_found(self):
if (self.http_status_code != 200) and (self.http_status_code != 403): if (self.http_status_code != 200) and (self.http_status_code != 403):
raise UnknownResponseException('Received an unknown http response code: %d' % self.http_status_code) msg = 'Received an unknown http response code: {}'.format(self.http_status_code)
log.warning(msg)
raise UnknownResponseException(msg)
return self.http_status_code != 200 return self.http_status_code != 200
......
...@@ -10,8 +10,10 @@ log = logging.getLogger(__name__) ...@@ -10,8 +10,10 @@ log = logging.getLogger(__name__)
class ODSHResourceUpload(ResourceUpload): class ODSHResourceUpload(ResourceUpload):
def __init__(self, resource): def __init__(self, resource):
log.info("Resource({}) uploaded.".format(resource))
super(ODSHResourceUpload, self).__init__(resource) super(ODSHResourceUpload, self).__init__(resource)
if self._icap_virus_found(): if self._icap_virus_found():
log.info("Found Virus!")
raise logic.ValidationError({'upload': ['Virus gefunden']}) raise logic.ValidationError({'upload': ['Virus gefunden']})
def _icap_virus_found(self): def _icap_virus_found(self):
......
...@@ -564,18 +564,32 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm ...@@ -564,18 +564,32 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
return pkg_dict return pkg_dict
def _is_package_new(self, pkg_dict): def _is_package_new(self, pkg_dict):
date_package_created = self._get_date_from_string(pkg_dict['metadata_created']) date_package_created_as_str = self._get_date_of_package_creation_from_pkg_dict(pkg_dict)
if date_package_created_as_str == None:
is_new = False
else:
date_package_created = self._get_date_from_string(date_package_created_as_str)
if date_package_created == None:
is_new = False
else:
is_new = odsh_helpers.is_within_last_month(date_package_created) is_new = odsh_helpers.is_within_last_month(date_package_created)
return is_new return is_new
def _get_date_of_package_creation_from_pkg_dict(self, pkg_dict):
if 'extras' in pkg_dict:
extras = pkg_dict['extras']
issued = odsh_helpers.odsh_extract_value_from_extras(extras=extras, key='issued') # is None if issued not in extras
return issued
else:
return None
def _get_date_from_string(self, date_time_str): def _get_date_from_string(self, date_time_str):
# todo: update this function if used in different context date_time_format = '%Y-%m-%dT%H:%M:%S' #e.g. u'2019-06-12T11:56:25'
date_time_format = '%Y-%m-%dT%H:%M:%S.%f' #e.g. u'2019-06-12T11:56:25.059563'
try: try:
date_time = datetime.datetime.strptime(date_time_str, date_time_format) date_time = datetime.datetime.strptime(date_time_str, date_time_format)
except ValueError:
# if date cannot be converted from string fall back to 1.1.2000
date = datetime.date(2000, 1, 1)
date = date_time.date() date = date_time.date()
except ValueError:
# if date cannot be converted from string return None
date = None
return date return date
import socket
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import time
import requests
import pdb
import threading
import asyncore
hostName = "localhost"
hostPort = 5002
# data = "test"
# with open('catalog.rdf', 'r') as myfile:
# data=myfile.read()
# TODO: better was to set data on RequestHandler
data = ""
class RequestHandler(BaseHTTPRequestHandler):
# GET
def do_GET(self):
self.send_response(requests.codes.ok)
# self.send_header('Content-Type', 'application/json; charset=utf-8')
self.send_header(
'Content-Type', 'application/rdf+xml; charset=utf-8')
self.end_headers()
self.wfile.write(data.encode("utf-8"))
# POST
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
self.send_response(200)
print(post_data)
self.wfile.write("".encode("utf-8")) # send back to client
def do_HEAD(self):
self.send_response(requests.codes.ok)
self.send_header('Content-Type', 'application/json; charset=utf-8')
self.end_headers()
class HarvestServerMock(threading.Thread):
def __init__(self):
# init thread
self._stop_event = threading.Event()
self.thread_name = self.__class__
self.server = HTTPServer((hostName, hostPort), RequestHandler)
threading.Thread.__init__(
self, name=self.thread_name, target=self.server.serve_forever)
self.setDaemon(True)
# def run(self):
# while not self._stop_event.isSet():
# asyncore.loop(timeout=0.01, count=1)
# pdb.set_trace()
# try:
# except KeyboardInterrupt:
# pass
def close(self):
self.server.server_close()
# print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment