Zarządzanie obiektami w Gythonie

Za pomocą skrypty napisanych w języku Gython można w pełni kontrolować obiekty Metadata zawierające informacje i ustawienia dotyczące procesów ekstrakcji danych. W szczególności, można wykonywać następujące operacje:

Konstrukcja i odczyt

Każdy rodzaj obiektu ekstrakcji danych można utworzyć w następujący sposób:

obj = ClassName(constructor_args)
            

gdzie ClassName to nazwa klasy, do której ma należeć tworzony obiekt, constructor_args to oddzielone przecinkami argumenty wymagane do utworzenia obiektu. Na przykład, obiekt klasy ClassificationSettings można utworzyć w następujący sposób:

fs = ClassificationFunctionSettings()
            

Standardowy sposobem dostępu do własności obiektu jest poprzedzenie nazwy własności kropką, np.:

fs.algorithmSettings

Większość obiektów MetaModelu można utworzyć za pomocą konstruktorów z zerową liczbą parametrów, jednak pewne rodzaje obiektów mogą wymagać podania pewnej liczby argumentów. Specyfikacja pozwala także na tworzenie niektórych obiektów na kilka sposobów z różnymi zestawami argumentów. Na przykład obiekt ClassificationTestTask można utworzyć na dwa sposoby, zgodnie z dwoma wariantami składni:

create()
create(testDataName, modelName, testResultName)
            

Przykład 2.18. Praca z obiektami:

# the first method
task = ClassificationTestTask()
task.testDataName = 'test_data_pd'
task.modelName = 'my_model'
task.testResultName = 'results'

# the second method (the end result is the same):
task = ClassificationTestTask( 'test_data_pd', 'my_model', 'results' )

print "Task created"
    

Wynik:

Task created
    

Zapisywanie obiektów

Instrukcja save zapisuje lokalny obiekt do repozytorium metadanych. Zapisywany obiekt musi mieć unikalną nazwę (nadaną przez użytkownika) i identyfikator (generowany automatycznie). Jeżeli obiekt o podanej nazwie już istnieje, to może on zostać nadpisany, lub zostanie zgłoszony błąd, decyduje o tym parametr replace. Zapisywany obiekt musi być instancją klasy PersistentObject.

Składnia:

save(name, object[, replace])
  • name - nazwa obiektu lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

  • object - obiekt, który ma być zapisany

  • replace - czy nadpisać istniejący obiekt o takiej samej nazwie (True, wartość domyślna).

Przykład 2.19. Zapisywanie obiektów:

objectExists = 0
physicalData = PhysicalData('someTable')
try:
   save('physicalData', physicalData, 0)
except:
   objectExists = 1

save('physicalData', physicalData)
print 'object saved'
    

Output:

object saved
    

Wczytywanie obiektów

Instrukcja load wczytuje obiekt z repozytorium metadanych. Wszelkie zmiany dotyczące wczytanego obiektu mają charakter lokalny, dopóki obiekt nie zostanie ponownie zapisany w repozytorium za pomocą instrukcji save().

Składnia:

load(name)
  • name - nazwa obiektu lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

Przykład 2.20. Wczytywanie obiektów:

physicalData = load('physicalData')
print 'object loaded'
    

Wynik:

object loaded
    

Zmiana nazw oiektów

Instrukcja rename zmienia nazwę obiektu zapisanego w repozytorium.

Składnia:

rename(old_name, new_name)
  • old_name - aktualna nazwa obiektu lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

  • new_name - nowa nazwa obiektu lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

Jeżeli podany jest mralias, to powinien być taki sam dla obu nazw. Jeżeli obiekt o nowej nazwie już istnieje, zgłoszony zostanie błąd.

Przykład 2.21. Zmiana nazwy obiektu:

newName = 'model'

rename('modell', newName)
                

Wykonywanie zadań

Instrukcja execute wykonuje zadanie zapisane w repozytorium metadanych. Instrukcja ta może działać w trybie blokującym (dalsze instrukcje w skrypcie nie zostaną wykonane dopóki bieżące zadanie nie zakończy wykonywania) lub nieblokującym. Można podać też kilka zadań i określić, czy mają być wykonywane synchronicznie, czy asynchronicznie. Wyjątki zgłoszone w trakcie wykonywania zadania zostaną wyświetlone w oknie log. W trybie blokującym wyniki będą natychmiast widoczne w oknie output a wyjątki skutkują przerwaniem wykonywania skryptu.

Składnia:

execute(task, wait = 0 | 1)

gdzie:

task =

name | { sync | async : [ task1, task2, ... ] }

  • name - nazwa zadania w repozytorium lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

  • wait - wartość 1 (domyślna) oznacza tryb blokujący, wartość 0 oznacza, że wysłane zostanie tylko żądanie wykonanie zadania.

  • sync - zadania zostaną wykonan synchronicznie

  • async - zadania zostaną wykonane asynchronicznie

Przykład 2.22. Wykonywanie zadań:

execute('t1')
execute( { sync : ['t2', 't3', { async : [ 't4', 't5' ] } ] }, wait = 0)
                

usuwanie obiektów

Instrukcja delete usuwa obiekt z repozytorium, jednak wszelkie referencje do tego obiektu pozostają.

Składnia:

delete(name)
  • name - nazwa obiektu do usunięcia lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

Przykład 2.23. Usuwanie obiektu:

delete('model')

Checking object existence

Funkcja exists sprawdza, czy obiekt o danej nazwie instnieje w repozytorium i zwraca wartość niezerową jeśli tak i 0 jeśli nie.

Składnia:

exists(name)
  • name - nazwa obiektu lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

Przykład 2.24. Sprawdzanie, czy dany obiekt istnieje

if not exists('model'):
   execute('build_task')
                

Przerywanie zadań

Instrukcja terminate przerywa wykonywanie zadania na serwerze. Instrukcja ta nie czeka, aż zadanie zostanie faktycznie przerwane i nie gwarantuje, że tak się stanie. Jeżeli zadanie zostało przerwane wcześniej lub nie było w ogóle wykonywane, nie będzie zgłoszony wyjątek.

Składnia:

terminate(name)
  • name - nazwa zadania, które ma zostać przerwane lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

Przykład 2.25. Przerywanie zadania:

terminate('task')
                

Zapisywanie środowiska skryptowego

Instrukcja saveEnv zapisuje wszystkie lub wskazane zmienne utworzone za pomocą skryptu do repozytorium metadanych. Zapisywane mogą zostać zmienne następujących typów: float, int, complex, string, dict, list, tuple.

Składnia:

saveEnv(name[, [s1, s2, ...]], isGlobal, replace)
  • name - nazwa obiektu, w którym zostanie zapisane środowisko

  • [s1, s2, ...] - lista obiektów, które mają być zapisane. Jeżeli ten parametr zostanie pominięty zapisane zostaną wszystkie obiekty dopuszczalnych typów.

  • isGlobal - jeśli True zapisane zostaną także zmienne globalne. W przeciwnym przypadku zapisane zostaną tylko zmienne lokalne.

  • replace - jeśli True (wartość domyślna), istniejący obiekt o takiej samej nazwie zostanie nadpisany.

Przykład 2.26. Zapisywanie środowiska skryptowego:

logicalData = 'ld'
physicalData = 'pd'
saveEnv('env', ['logicalData', 'physicalData'])
                

Wczytywanie środowiska skryptowego

Instrukcja loadEnv wczytuje zmienne z obiektu w repozytorium przechowującego środowisko skryptowe do bieżącego środowiska skryptowego.

Składnia:

loadEnv(name)
  • name - nazwa obiektu lub nazwa repozytorium i nazwa obiektu oddzielone kropką (mralias.objectname).

Przykład 2.27. Wczytywanie środowiska skryptowego

loadEnv('env')
print physicalData
                

Tworzenie aliasu do repozytorium metadanych

Instrukcja mrAlias ustanawia nowy alias do repozytorium metadanych. Alias jest łączem pomiędzy symboliczną nazwą i repozytorium metadanych. Alias jest wykorzystywany przez wszystkie funkcje operujące na obiektach z repozytorium. Domyślny alias jest tworzony automatycznie przez platformę. Aby jawnie utworzyć domyślny alias należy użyć instrukcji mrRegistry.

Składnia:

mrAlias(mrAliasName, server, repository, user, password)
  • mrAliasName - symboliczna nazwa repozytorium metadanych.

  • server - adres i port głównego serwera

  • repository - adres i port repozytorium metadanych

  • user - nazwa użytkownika

  • password - hasło użytkownika

Przykład 2.28. Tworzenie aliasu do repozytorium

mrAlias('alias_name', '127.0.0.1:2531', '127.0.0.1:2531', 'user', 'password')
                

Logowanie wiadomości

Instrukcja log wysyła do okna log tekst z poziomem INFO.

Składnia:

log(text)
  • text - tekst do wyświetlenia

Przykład 2.29. Wysyłanie wiadomości do log-a:

log('Some information')
                

Registry Repository

Stworzone zostało API do zaawansowanej pracy z połączeniami z repozytorium metadanch; jest ono opisane w części RepoReg dokumentacji javadoc. Funkcja mrRegistry daję dostęp do instancji Registry.

Składnia:

mrRegistry()

Przykład 2.30. Ustanawianie domyślnego repozytorium:

mrRegistry().defaultRepository = 'repository_alias'
                

Ścieżka projektu

Funkcja projectPath zwraca absolutną ścieżkę do bieżącego projektu w repozytorium.

Składnia:

projectPath()

Przykład 2.31. Uzyskiwanie ścieżki do projektu:

print projectPath()