Added SortApp project

This commit is contained in:
giancarlo 2020-09-22 11:51:39 +02:00
commit 6c5e520a94
24 changed files with 443 additions and 0 deletions

17
.project Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>sortapp</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>

10
.pydevproject Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/${PROJECT_DIR_NAME}/src</path>
</pydev_pathproperty>
</pydev_project>

View File

@ -0,0 +1,7 @@
eclipse.preferences.version=1
encoding//src/sortapp/issupport.py=utf-8
encoding//src/sortapp/sortapp.py=utf-8
encoding//src/sortapp/storagehub/storagehubcommand.py=utf-8
encoding//src/sortapp/storagehub/storagehubcommanditemdownload.py=utf-8
encoding//src/sortapp/storagehub/storagehubcommanditemupload.py=utf-8
encoding/setup.py=utf-8

30
Dockerfile Normal file
View File

@ -0,0 +1,30 @@
# Base
FROM python:3.6-alpine
RUN apk add --no-cache bash
# Istall deps
COPY ./requirements.txt /
RUN pip3 install -r requirements.txt
# Install dist package sortapp
COPY ./dist/sortapp-1.0.0.tar.gz /
RUN pip3 install sortapp-1.0.0.tar.gz
#
#RUN rm sortapp-1.0.0.tar.gz
#RUN rm requirements.txt
#RUN rm -r /root/.cache
### Alternative ###
# Create a working directory and Bundle app source
# WORKDIR /sortapp
# COPY src/sortapp /sortapp
# Copy all subfolder
#ADD . /
# Autorun
# CMD [ "python3", "./sortapp.py" ]

1
LICENSE.md Normal file
View File

@ -0,0 +1 @@
#Mit License

2
MANIFEST.in Normal file
View File

@ -0,0 +1,2 @@
include README.md
include LICENSE.md

42
README.md Normal file
View File

@ -0,0 +1,42 @@
#SortAPP
SortApp is simple example that sort a file in input.
Starting from this example, you can first create an installable package via pip3 and then a docker image in which it is installed the created package.
The package declares the sortapp command as entrypoint.
So once the package is installed you can use this command at command line to run the example:
- sortapp <token> <file-item-id> <temp-dir-item-id>
The image created in this way can be executed in a container with the following command:
- docker run -i -t --rm --name sortapp-cont sortapp sortapp <token> <file-item-id> <temp-dir-item-id>
##Useful Commands
###Create Distribution Package
python3 setup.py sdist --formats=gztar
###Create Docker Image
docker build -t sortapp .
###Save Docker Image in file
docker save sortapp | gzip > sortapp.tar.gz
###Publish Docker Image on DockerHub
Name your local images using:
By re-tagging an existing local image:
- docker tag sortapp <hub-user>/<repo-name>[:<tag>]
Login in DockerHub(use your Docker ID):
- docker login
Now you can push this repository to the registry designated by its name or tag:
- docker push <hub-user>/<repo-name>:<tag>
Then logout for security:
- docker logout

BIN
dist/sortapp-1.0.0.tar.gz vendored Normal file

Binary file not shown.

4
requirements.txt Normal file
View File

@ -0,0 +1,4 @@
###### Requirements without Version Specifiers ######
requests
###### Requirements with Version Specifiers ######

10
runexample.txt Normal file
View File

@ -0,0 +1,10 @@
python3
Token
xxxx-xxxx-xxxx-xxxx-xxxx
FileItemId
548eade8-25cf-4978-9f61-0f0c652900be
FolderItemId
32c0422f-a777-4452-adea-007347ec4484

39
setup.py Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author: Giancarlo Panichi
#
# Created on 2020/06/12
#
import setuptools
with open("README.md", "r") as freadme:
l_description = freadme.read()
with open("LICENSE.md", "r") as flicense:
license_description = flicense.read()
setuptools.setup(
name="sortapp",
version="1.0.0",
author="Giancarlo Panichi",
author_email="giancarlo.panichi@isti.cnr.it",
description="A application for sort un text file",
long_description=l_description,
long_description_content_type="text/markdown",
license=license_description,
url="https://code-repo.d4science.org/gCubeSystem/sortapp",
package_dir={"": "src"},
packages=setuptools.find_packages(where="src"),
entry_points={
'console_scripts': ['sortapp=sortapp.sortapp:main']
},
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
platforms=["Linux"],
python_requires='>=3.6',
)

View File

@ -0,0 +1,38 @@
Metadata-Version: 2.1
Name: sortapp
Version: 1.0.0
Summary: A application for sort un text file
Home-page: https://code-repo.d4science.org/gCubeSystem/sortapp
Author: Giancarlo Panichi
Author-email: giancarlo.panichi@isti.cnr.it
License: #Mit License
Description: #SortAPP
SortApp is simple example that sort a file in input.
Starting from this example, you can first create an installable package via pip3 and then a docker image in which it is installed the created package.
The package declares the sortapp command as entrypoint.
So once the package is installed you can use this command at command line to run the example:
- sortapp <token> <file-item-id> <temp-dir-item-id>
The image created in this way can be executed in a container with the following command:
- docker run -i -t --rm --name sortapp-cont sortapp-img sortapp <token> <file-item-id> <temp-dir-item-id>
##Useful Commands
###Create Distribution Package
python3 setup.py sdist --formats=gztar
###Create Docker Image
docker build -t sortapp-img .
###Save Docker Image in file
docker save sortapp-img | gzip > sortapp-img.tar.gz
Platform: Linux
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown

View File

@ -0,0 +1,17 @@
LICENSE.md
MANIFEST.in
README.md
setup.py
src/sortapp/__init__.py
src/sortapp/__main__.py
src/sortapp/issupport.py
src/sortapp/sortapp.py
src/sortapp.egg-info/PKG-INFO
src/sortapp.egg-info/SOURCES.txt
src/sortapp.egg-info/dependency_links.txt
src/sortapp.egg-info/entry_points.txt
src/sortapp.egg-info/top_level.txt
src/sortapp/storagehub/__init__.py
src/sortapp/storagehub/storagehubcommand.py
src/sortapp/storagehub/storagehubcommanditemdownload.py
src/sortapp/storagehub/storagehubcommanditemupload.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,3 @@
[console_scripts]
sortapp = sortapp.sortapp:main

View File

@ -0,0 +1 @@
sortapp

1
src/sortapp/__init__.py Normal file
View File

@ -0,0 +1 @@
print("sortapp init")

2
src/sortapp/__main__.py Normal file
View File

@ -0,0 +1,2 @@
print('__main__.py executed')

46
src/sortapp/issupport.py Normal file
View File

@ -0,0 +1,46 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author: Giancarlo Panichi
#
# Created on 2018/06/15
#
import requests
from xml.etree import ElementTree
class ISSupport:
def __init__(self):
# dev
#self.serviceUrl = "https://node10-d-d4s.d4science.org"
# prod
self.serviceUrl = "http://registry.d4science.org"
self.storageHubServiceClass = "DataAccess"
self.storageHubServiceName = "StorageHub"
def discoverStorageHub(self,gcubeToken):
print("Discover StorageHub")
urlString = self.serviceUrl + "/icproxy/gcube/service/GCoreEndpoint/" + self.storageHubServiceClass + "/" + self.storageHubServiceName + "?gcube-token=" + gcubeToken
r = requests.get(urlString)
print(r.status_code)
print(r.text)
if r.status_code!=200:
print("Error discovering StorageHub: "+r.status_code)
raise Exception("Error retrieving StorageHub url info: "+r.status_code)
else:
root = ElementTree.fromstring(r.text)
print(root)
gcoreEndpoint=root.findall("Result/Resource/Profile/AccessPoint/RunningInstanceInterfaces/Endpoint")
print(gcoreEndpoint)
for child in gcoreEndpoint:
print(child.tag, child.attrib)
if child.attrib["EntryName"]=="org.gcube.data.access.storagehub.StorageHub":
print("Endpoint Found")
print(child.text)
return child.text
print("Error discovering StorageHub url not found")
raise Exception("Error retrieving StorageHub url not found!")
def __str__(self):
return 'ISSupport[serviceUrl=' + str(self.serviceUrl) + ']'

78
src/sortapp/sortapp.py Normal file
View File

@ -0,0 +1,78 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author: Giancarlo Panichi
#
# Created on 2020/06/12
#
import sys
from .issupport import ISSupport
from .storagehub.storagehubcommanditemdownload import StorageHubCommandItemDownload
from .storagehub.storagehubcommanditemupload import StorageHubCommandItemUpload
class SortApp:
def __init__(self):
self.gcubeToken = sys.argv[1]
self.fileItemId = sys.argv[2]
self.tempFolderItemId = sys.argv[3]
self.destinationFile = "elements.txt"
self.storageHubUrl = None
def main(self):
print(self)
issup = ISSupport()
self.storageHubUrl = issup.discoverStorageHub(self.gcubeToken)
self.executeSort()
def executeSort(self):
print("Execute Sort")
print('gcubeToken: ' + self.gcubeToken)
print('fileItemId: ' + self.fileItemId)
if not self.gcubeToken:
raise Exception('Error Token is null')
if not self.fileItemId:
raise Exception('Error File Item Id is null')
cmdItemDownload = StorageHubCommandItemDownload(self.gcubeToken, self.storageHubUrl,
self.fileItemId, self.destinationFile)
cmdItemDownload.execute()
with open(self.destinationFile, 'r') as f:
elementsList = [line.strip() for line in f]
print ("Elements found: ")
print(*elementsList, sep="\n")
#if self.elementsOrder and self.elementsOrder == 'Desc':
# elementsList.sort(reverse=True)
#else:
elementsList.sort(reverse=False)
print ("Elements sorted: ")
print(*elementsList, sep="\n")
with open(self.destinationFile, 'w') as out_file:
out_file.write('\n'.join(elementsList))
print("Elements saved in file: " + self.destinationFile)
cmdItemUpload = StorageHubCommandItemUpload(self.gcubeToken, self.storageHubUrl, self.tempFolderItemId,
self.destinationFile, self.destinationFile, self.destinationFile)
cmdItemUpload.execute()
def __str__(self):
return 'Sort App'
def main():
print('SortApp main()')
sortApp = SortApp()
sortApp.main()
main()

View File

@ -0,0 +1 @@
print("sortapp/storagehub init")

View File

@ -0,0 +1,14 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author: Giancarlo Panichi
#
# Created on 2018/06/15
#
class StorageHubCommand:
def execute(self):
print("StorageHubCommand")
def __str__(self):
return 'StorageHubCommand'

View File

@ -0,0 +1,36 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author: Giancarlo Panichi
#
# Created on 2018/06/15
#
import requests
from .storagehubcommand import StorageHubCommand
class StorageHubCommandItemDownload(StorageHubCommand):
def __init__(self, gcubeToken, storageHubUrl, itemId, destinationFile):
self.gcubeToken = gcubeToken
self.storageHubUrl = storageHubUrl
self.itemId = itemId
self.destinationFile = destinationFile
def execute(self):
print("Execute StorageHubCommandItemDownload")
print(self.storageHubUrl + "/items/" + self.itemId + "/download?");
urlString = self.storageHubUrl + "/items/" + self.itemId + "/download?gcube-token=" + self.gcubeToken
r = requests.get(urlString)
print(r.status_code)
if r.status_code != 200:
print("Error in execute StorageHubCommandItemDownload: " + r.status_code)
raise Exception("Error in execute StorageHubCommandItemDownload: " + r.status_code)
with open(self.destinationFile, 'w') as file:
file.write(r.text)
def __str__(self):
return ('StorageHubCommandItemDownload[storageHubUrl=' + str(self.storageHubUrl) +
'itemId=' + self.itemId +
', destinationFile=' + self.destinationFile + ']')

View File

@ -0,0 +1,43 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author: Giancarlo Panichi
#
# Created on 2018/06/15
#
import requests
from .storagehubcommand import StorageHubCommand
class StorageHubCommandItemUpload(StorageHubCommand):
def __init__(self, gcubeToken, storageHubUrl, folderItemId, file, filename, fileDescription):
self.gcubeToken = gcubeToken
self.folderItemId = folderItemId
self.storageHubUrl = storageHubUrl
self.file = file
self.filename = filename
self.fileDescription = fileDescription
def execute(self):
print("Execute StorageHubCommandItemUpload")
print(self.storageHubUrl + "/items/" + self.folderItemId + "/create/FILE?");
filedata = {'name': self.filename, 'description': self.fileDescription, "file": ("file", open(self.file, "rb"))}
urlString = self.storageHubUrl + "/items/" + self.folderItemId + "/create/FILE?gcube-token=" + self.gcubeToken
r = requests.post(urlString, files=filedata)
print(r)
print(r.status_code)
if r.status_code != 200:
print("Error in execute StorageHubCommandItemUpload: " + r.status_code)
raise Exception("Error in execute StorageHubCommandItemUpload: " + r.status_code)
print(str(r.text))
return r.text
def __str__(self):
return ('StorageHubCommandItemUpload[itemId=' + self.folderItemId +
', storageHubUrl=' + str(self.storageHubUrl) +
', folderItemId=' + str(self.folderItemId) +
', filename=' + str(self.filename) +
', fileDescription=' + str(self.fileDescription) + ']')