Skip to content
Snippets Groups Projects
Commit e9411940 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

DOC: added example

parent 42a37417
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# ** header v3.0
# This file is a part of the CaosDB Project.
#
# Copyright (C) 2018 Research Group Biomedical Physics,
# Max-Planck-Institute for Dynamics and Self-Organization Göttingen
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# ** end header
#
"""server_side_script.py.
An example which implements a minimal server-side script.
1) This script expects to find a *.txt file in the .upload_files dir which is
printed to stdout.
2) It executes a "Count stars" query and prints the result to stdout.
3) It will return with code 0 if everything is ok, or with any code that is
specified with the commandline option --exit
"""
import sys
from os import listdir
from caosdb import configure_connection, execute_query
# parse --auth-token option and configure connection
CODE = 0
QUERY = "COUNT stars"
for arg in sys.argv:
if arg.startswith("--auth-token="):
auth_token = arg[13:]
configure_connection(auth_token=auth_token)
if arg.startswith("--exit="):
CODE = int(arg[7:])
if arg.startswith("--query="):
QUERY = arg[8:]
############################################################
# 1 # find and print *.txt file ############################
############################################################
try:
for fname in listdir(".upload_files"):
if fname.endswith(".txt"):
with open(".upload_files/{}".format(fname)) as f:
print(f.read())
except FileNotFoundError:
pass
############################################################
# 2 # query "COUNT stars" ##################################
############################################################
RESULT = execute_query(QUERY)
print(RESULT)
############################################################
# 3 ########################################################
############################################################
sys.exit(CODE)
......@@ -2129,6 +2129,8 @@ class Container(list):
corresponding entity e2 from C2 via e1._sync(c2). 2) Add any
leftover entity from C2 to C1.
"""
# TODO: This method is extremely slow. E.g. 30 seconds for 1000
# entities.
sync_dict = self._calc_sync_dict(
remote_container=container,
......
......@@ -67,6 +67,9 @@ class _WrappedHTTPResponse(CaosDBHTTPResponse):
def getheaders(self):
return self.response.getheaders()
def close(self):
self.response.close()
class _DefaultCaosDBServerConnection(CaosDBServerConnection):
def __init__(self):
......
......@@ -57,6 +57,20 @@ class CaosDBHTTPResponse(ABC):
def getheaders(self):
"""Return all headers."""
def __enter__(self):
pass
def __exit__(self, type, value, traceback):
self.close()
@abstractmethod
def close(self):
"""close.
Close this response. Depending on the implementation this might also
close underlying streams, sockets etc.
"""
class CaosDBServerConnection(ABC):
"""Abstract class which defines the interface for sending requests to the
......
......@@ -66,6 +66,9 @@ class MockUpResponse(CaosDBHTTPResponse):
def getheaders(self):
return self.headers
def close(self):
pass
class MockUpServerConnection(CaosDBServerConnection):
"""The mock-up connection which does not actually connect to anything but
......
......@@ -137,7 +137,7 @@ class StreamingHTTPSConnection(client.HTTPSConnection, object):
if self.debuglevel > 0:
print("sendIng a byte-like")
self.sock.sendall(value)
except socket.error:
if socket.error[0] == 32: # Broken pipe
except socket.error as err:
if err.args[0] == 32: # Broken pipe
self.close()
raise
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment