def download_url(self): url = self.url if self.confidentiality == 'buyerOnly': return self.url if not url or '?download=' not in url: return url doc_id = parse_qs(urlparse(url).query)['download'][-1] root = self.__parent__ parents = [] while root.__parent__ is not None: parents[0:0] = [root] root = root.__parent__ request = root.request if not request.registry.docservice_url: return url if 'status' in parents[0] and parents[0].status in type(parents[0])._options.roles: role = parents[0].status for index, obj in enumerate(parents): if obj.id != url.split('/')[(index - len(parents)) * 2 - 1]: break field = url.split('/')[(index - len(parents)) * 2] if "_" in field: field = field[0] + field.title().replace("_", "")[1:] roles = type(obj)._options.roles if roles[role if role in roles else 'default'](field, []): return url from openprocurement.api.utils import generate_docservice_url if not self.hash: path = [i for i in urlparse(url).path.split('/') if len(i) == 32 and not set(i).difference(hexdigits)] return generate_docservice_url(request, doc_id, False, '{}/{}'.format(path[0], path[-1])) return generate_docservice_url(request, doc_id, False)
def download_url(self): url = self.url if not url or '?download=' not in url: return url doc_id = parse_qs(urlparse(url).query)['download'][-1] root = self.__parent__ parents = [] while root.__parent__ is not None: parents[0:0] = [root] root = root.__parent__ request = root.request if not request.registry.docservice_url: return url if 'status' in parents[0] and parents[0].status in type(parents[0])._options.roles: role = parents[0].status for index, obj in enumerate(parents): if obj.id != url.split('/')[(index - len(parents)) * 2 - 1]: break field = url.split('/')[(index - len(parents)) * 2] if "_" in field: field = field[0] + field.title().replace("_", "")[1:] roles = type(obj)._options.roles if roles[role if role in roles else 'default'](field, []): return url from openprocurement.api.utils import generate_docservice_url if not self.hash: path = [i for i in urlparse(url).path.split('/') if len(i) == 32 and not set(i).difference(hexdigits)] return generate_docservice_url(request, doc_id, False, '{}/{}'.format(path[0], path[-1])) return generate_docservice_url(request, doc_id, False)