Esempio n. 1
0
 def get(self, tenant):
     user = self.login_required()
     if user.tenant != tenant:
         raise RuntimeError('404')
     designator = self.request.get('designator')
     if designator:
         query1 = Akte.all().filter('tenant =', tenant).filter('designator =', designator)
         query2 = Dokument.all().filter('tenant =', tenant).filter('designator =', designator)
         query3 = Dokument.all().filter('tenant =', tenant).filter('ref =', designator)
         query4 = Dokument.all().filter('tenant =', tenant).filter('ref =', designator)
         results = list(set(query1.fetch(10) + query2.fetch(10) + query3.fetch(10) + query4.fetch(10)))
         values = dict(results=[x.as_dict(self.abs_url) for x in results],
                       success=True)
     else:
         results = []
         # 'Term1 "Term2 and Term3"'.split() -> ['Term1', 'Term2 and Term3']
         for part in gaetk.tools.split(self.request.get('q')):
             # would be aswsome to run this in paralell
             for model in [Akte, Dokument]:
                 for field in ['designator', 'name1', 'plz', 'email', 'ref', 'name2', 'ort']:
                     query = model.all().filter('tenant =', tenant
                                                ).filter('%s >=' % field, part
                                                ).filter('%s <=' % field, part + u'\ufffd')
                     results.extend([x.as_dict(self.abs_url) for x in query.fetch(25)])
         # TODO: scoring and deduping
         values = dict(results=results, success=True)
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(json.dumps(values))
Esempio n. 2
0
    def get(self, message_queue_name):
        """ Liefert eine Übersicht über die Nachrichten in der Queue zurück.

        Kann in JSON, XML, oder plaintext abgefragt werden.
        Für eine Beschreibung des Formats siehe README.
        """
        self.on_access(message_queue_name)
        query = Message.query(
            Message.message_queue_name == message_queue_name, Message.deleted_at == None).order(
            Message.created_at)
        messages = query.fetch(self.max_messages)

        document = {
            'min_retry_interval': self.min_retry_interval,
            'max_retry_interval': self.max_retry_interval,
            'messages': [self._message_as_dict(msg) for msg in messages],
        }

        accept = self.request.headers.get('Accept', '')

        if accept.startswith('application/json'):
            self.response.headers["Content-Type"] = 'application/json'
            self.response.out.write(json.dumps(document))
        elif accept.startswith('application/xml'):
            self.response.headers["Content-Type"] = 'application/xml'
            self.response.out.write(dict2xml(document, listnames={'messages': 'message'}))
        else:
            self.response.headers["Content-Type"] = 'text/plain'
            self.response.out.write('\n'.join(x['url'] for x in document['messages']))
Esempio n. 3
0
 def get(self, tenant, akte_id):
     user = self.login_required()
     if (user.tenant != tenant):
         raise RuntimeError('404')
     documents = Dokument.all().filter('tenant =', tenant).filter(
                           'akte =', db.Key.from_path('Akte', "%s-%s" % (tenant, akte_id))).fetch(50)
     documents = [x.as_dict(self.abs_url) for x in documents if tenant == x.tenant]
     values = dict(documents=documents, success=True)
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(json.dumps(values))
Esempio n. 4
0
 def post(self):
     """Empfänger-Konfiguration updaten."""
     user = self.login_required()
     self.response.headers["Content-Type"] = "application/json"
     tenant = user.tenant
     # tenant = self.request.get('tenant')
     text = self.request.get('text', '')
     email = self.request.get('email')
     credential = Credential.create(tenant=tenant, text=text, email=email)
     self.response.set_status(201)
     self.response.out.write(hujson.dumps(dict(uid=credential.uid, secret=credential.secret)))
Esempio n. 5
0
 def post(self):
     """Empfänger-Konfiguration updaten."""
     user = self.login_required()
     self.response.headers["Content-Type"] = "application/json"
     tenant = user.tenant
     # tenant = self.request.get('tenant')
     text = self.request.get('text', '')
     email = self.request.get('email')
     credential = Credential.create(tenant=tenant, text=text, email=email)
     self.response.set_status(201)
     self.response.out.write(
         hujson.dumps(dict(uid=credential.uid, secret=credential.secret)))
Esempio n. 6
0
 def get(self, tenant, designator, format):
     user = self.login_required()
     if format == 'json':
         akte = Akte.get_by_key_name("%s-%s" % (tenant, designator))
         if (not akte) or (akte.tenant != tenant) or (user.tenant != tenant):
             raise RuntimeError('404')
         values = dict(data=akte.as_dict(self.abs_url), success=True)
         self.response.headers['Cache-Control'] = 'max-age=15 private'
         self.response.headers['Content-Type'] = 'application/json'
         self.response.out.write(json.dumps(values))
     else:
         self.render({'designator': designator}, 'akte.html')
Esempio n. 7
0
 def get(self, tenant, akte_id, doc_id, format):
     user = self.login_required()
     document = Dokument.get_by_key_name("%s-%s" % (tenant, doc_id))
     if (not document) or (user.tenant != tenant):
         raise RuntimeError('404')
     if document.akte.key().name() != akte_id:
         logging.info(document.akte.key().name())
         raise RuntimeError('404')
     if document.tenant != tenant:
         raise RuntimeError('404')
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(json.dumps(dict(document=document.as_dict(self.abs_url))))
Esempio n. 8
0
 def get(self, tenant, format):
     user = self.login_required()
     if user.tenant != tenant:
         raise RuntimeError('404')
     if format == 'json':
         query = Akte.all().filter('tenant =', tenant).order('-created_at')
         values = self.paginate(query, datanodename='akten')
         values['akten'] = [akte.as_dict(self.abs_url) for akte in values['akten']]
         self.response.headers['Content-Type'] = 'application/json'
         self.response.out.write(json.dumps(values))
     else:
         self.render({}, 'akten.html')
Esempio n. 9
0
 def get(self, tenant, akte_id):
     user = self.login_required()
     if (user.tenant != tenant):
         raise RuntimeError('404')
     documents = Dokument.all().filter('tenant =', tenant).filter(
         'akte =', db.Key.from_path('Akte',
                                    "%s-%s" % (tenant, akte_id))).fetch(50)
     documents = [
         x.as_dict(self.abs_url) for x in documents if tenant == x.tenant
     ]
     values = dict(documents=documents, success=True)
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(json.dumps(values))
Esempio n. 10
0
 def get(self, tenant, akte_id, doc_id, format):
     user = self.login_required()
     document = Dokument.get_by_key_name("%s-%s" % (tenant, doc_id))
     if (not document) or (user.tenant != tenant):
         raise RuntimeError('404')
     if document.akte.key().name() != akte_id:
         logging.info(document.akte.key().name())
         raise RuntimeError('404')
     if document.tenant != tenant:
         raise RuntimeError('404')
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(
         json.dumps(dict(document=document.as_dict(self.abs_url))))
Esempio n. 11
0
 def get(self, tenant, designator, format):
     user = self.login_required()
     if format == 'json':
         akte = Akte.get_by_key_name("%s-%s" % (tenant, designator))
         if (not akte) or (akte.tenant != tenant) or (user.tenant !=
                                                      tenant):
             raise RuntimeError('404')
         values = dict(data=akte.as_dict(self.abs_url), success=True)
         self.response.headers['Cache-Control'] = 'max-age=15 private'
         self.response.headers['Content-Type'] = 'application/json'
         self.response.out.write(json.dumps(values))
     else:
         self.render({'designator': designator}, 'akte.html')
Esempio n. 12
0
 def get(self, tenant, format):
     user = self.login_required()
     if user.tenant != tenant:
         raise RuntimeError('404')
     if format == 'json':
         query = Akte.all().filter('tenant =', tenant).order('-created_at')
         values = self.paginate(query, datanodename='akten')
         values['akten'] = [
             akte.as_dict(self.abs_url) for akte in values['akten']
         ]
         self.response.headers['Content-Type'] = 'application/json'
         self.response.out.write(json.dumps(values))
     else:
         self.render({}, 'akten.html')
Esempio n. 13
0
def execute_prepare_headers(url, args, bust_cache):
    args_encoded = urllib.urlencode({'q': hujson.dumps(args)})
    url = ("/%s?" % url) + args_encoded
    headers = {}
    # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4 for the reasoning here
    if bust_cache:
        logging.debug("busting cache")
        headers.update({'Cache-Control': "no-cache"})
        url += '&ts=%s' % time.time()
    # sign request
    digest = hmac.new(_find_credentials(), url, hashlib.sha1).hexdigest()
    softmexpresshost = os.environ.get('SOFTMEXPRESSHOST', SOFTMEXPRESSHOST)
    headers.update({'X-sig': digest})
    url = 'http://' + softmexpresshost + url
    return url, headers
Esempio n. 14
0
def encode(message):
    """Decode the dict-like message into a valid wire representation.

    Besides the types familar from Python's json module it can serialize Decimal() objects.

    #>>> encode({'guid': 123, 'created_by': 'test', 'num': decimal.Decimal('5.00')})
    #'{\n "created_by": "test",\n "guid": 123,\n "num": 5.00\n}'
    """

    warnings.warn("hutools.humessaging is deprecated use cs.messaging", DeprecationWarning, stacklevel=2)

    assert 'created_by' in message
    assert 'guid' in message
    ret = json.dumps(message)
    # replace "Decimal(\\"5.00\\")" with 5.00
    return re.sub(_decimal_re, r'\1.\2', ret)
Esempio n. 15
0
 def get(self, tenant):
     user = self.login_required()
     if user.tenant != tenant:
         raise RuntimeError('404')
     designator = self.request.get('designator')
     if designator:
         query1 = Akte.all().filter('tenant =',
                                    tenant).filter('designator =',
                                                   designator)
         query2 = Dokument.all().filter('tenant =', tenant).filter(
             'designator =', designator)
         query3 = Dokument.all().filter('tenant =',
                                        tenant).filter('ref =', designator)
         query4 = Dokument.all().filter('tenant =',
                                        tenant).filter('ref =', designator)
         results = list(
             set(
                 query1.fetch(10) + query2.fetch(10) + query3.fetch(10) +
                 query4.fetch(10)))
         values = dict(results=[x.as_dict(self.abs_url) for x in results],
                       success=True)
     else:
         results = []
         # 'Term1 "Term2 and Term3"'.split() -> ['Term1', 'Term2 and Term3']
         for part in gaetk.tools.split(self.request.get('q')):
             # would be aswsome to run this in paralell
             for model in [Akte, Dokument]:
                 for field in [
                         'designator', 'name1', 'plz', 'email', 'ref',
                         'name2', 'ort'
                 ]:
                     query = model.all().filter('tenant =', tenant).filter(
                         '%s >=' % field,
                         part).filter('%s <=' % field, part + u'\ufffd')
                     results.extend(
                         [x.as_dict(self.abs_url) for x in query.fetch(25)])
         # TODO: scoring and deduping
         values = dict(results=results, success=True)
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(json.dumps(values))
Esempio n. 16
0
def execute(url, args, method='GET', ua='', bust_cache=False):
    """Execute SQL statement"""

    args_encoded = urllib.urlencode({'q': hujson.dumps(args)})
    url = ("/%s?" % url) + args_encoded
    digest = hmac.new(_find_credentials(), url, hashlib.sha1).hexdigest()
    softmexpresshost = os.environ.get('SOFTMEXPRESSHOST', 'api.hudora.biz:8082')
    headers = {'X-sig': digest}
    # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4 for the reasoning here
    if bust_cache:
        headers['Cache-Control'] = "no-cache"
    status, headers, content = huTools.http.fetch('http://' + softmexpresshost + url,
                                                  method=method,
                                                  headers=headers,
                                                  ua='%s/husoftm2.backend' % ua)
    if status != 200:
        # TODO: this looks extremely fragile. Must have be drunk while coding this.
        # needs a better implementation
        if content.startswith('Internal Error: {\'EXIT\',\n                    {timeout'):
            raise TimeoutException(content)
        raise RuntimeError("Server Error: %r" % content)
    return content