Commit b582ad40 authored by mouadh's avatar mouadh

format

parent b162e5c9
...@@ -331,8 +331,8 @@ class MdxEngine: ...@@ -331,8 +331,8 @@ class MdxEngine:
for cubes in config_file_parser.construct_cubes(): for cubes in config_file_parser.construct_cubes():
# TODO cubes.source == 'csv' # TODO cubes.source == 'csv'
if cubes.source == 'postgres': if cubes.source == 'postgres':
fusion = self._construct_star_schema_config_file(cube_name, fusion = self._construct_star_schema_config_file(
cubes) cube_name, cubes)
elif cube_name in self.csv_files_cubes: elif cube_name in self.csv_files_cubes:
fusion = self._construct_star_schema_csv_files(cube_name) fusion = self._construct_star_schema_csv_files(cube_name)
...@@ -690,8 +690,9 @@ class MdxEngine: ...@@ -690,8 +690,9 @@ class MdxEngine:
:return: updated columns_to_keep :return: updated columns_to_keep
""" """
if len(tuple_as_list) == 3 and tuple_as_list[-1] in self.tables_loaded[ if len(
tuple_as_list[0]].columns: tuple_as_list
) == 3 and tuple_as_list[-1] in self.tables_loaded[tuple_as_list[0]].columns:
# in case of [Geography].[Geography].[Country] # in case of [Geography].[Geography].[Country]
cols = [tuple_as_list[-1]] cols = [tuple_as_list[-1]]
else: else:
...@@ -774,7 +775,8 @@ class MdxEngine: ...@@ -774,7 +775,8 @@ class MdxEngine:
self.execute_one_tuple(tupl, start_df, self.execute_one_tuple(tupl, start_df,
columns_to_keep.values())) columns_to_keep.values()))
cols = list(itertools.chain.from_iterable(columns_to_keep.values())) cols = list(
itertools.chain.from_iterable(columns_to_keep.values()))
# TODO BUG !!! https://github.com/pandas-dev/pandas/issues/15525 # TODO BUG !!! https://github.com/pandas-dev/pandas/issues/15525
# solution 1 .astype(str) ( take a lot of time from execution) # solution 1 .astype(str) ( take a lot of time from execution)
......
...@@ -38,12 +38,12 @@ class XmlaProviderService(ServiceBase): ...@@ -38,12 +38,12 @@ class XmlaProviderService(ServiceBase):
discover_tools = XmlaDiscoverTools() discover_tools = XmlaDiscoverTools()
sessio_id = discover_tools.session_id sessio_id = discover_tools.session_id
@rpc(DiscoverRequest, @rpc(
_returns=AnyXml, DiscoverRequest,
_body_style="bare", _returns=AnyXml,
_out_header=Session, _body_style="bare",
_throws=InvalidCredentialsError _out_header=Session,
) _throws=InvalidCredentialsError)
def Discover(ctx, request): def Discover(ctx, request):
""" """
the first principle function of xmla protocol the first principle function of xmla protocol
...@@ -61,10 +61,12 @@ class XmlaProviderService(ServiceBase): ...@@ -61,10 +61,12 @@ class XmlaProviderService(ServiceBase):
ctx.out_header = Session(SessionId=str(XmlaProviderService.sessio_id)) ctx.out_header = Session(SessionId=str(XmlaProviderService.sessio_id))
config_parser = ConfigParser(discover_tools.executer.cube_path) config_parser = ConfigParser(discover_tools.executer.cube_path)
if config_parser.xmla_authentication() and ctx.transport.req_env['QUERY_STRING'] != 'admin': if config_parser.xmla_authentication(
) and ctx.transport.req_env['QUERY_STRING'] != 'admin':
raise InvalidCredentialsError( raise InvalidCredentialsError(
fault_string='You do not have permission to access this resource', fault_string=
'You do not have permission to access this resource',
fault_object=None) fault_object=None)
# TODO call (labster) login function or create login with token (according to labster db) # TODO call (labster) login function or create login with token (according to labster db)
...@@ -99,7 +101,8 @@ class XmlaProviderService(ServiceBase): ...@@ -99,7 +101,8 @@ class XmlaProviderService(ServiceBase):
return discover_tools.discover_mdschema_measures__response(request) return discover_tools.discover_mdschema_measures__response(request)
elif request.RequestType == "MDSCHEMA_DIMENSIONS": elif request.RequestType == "MDSCHEMA_DIMENSIONS":
return discover_tools.discover_mdschema_dimensions_response(request) return discover_tools.discover_mdschema_dimensions_response(
request)
elif request.RequestType == "MDSCHEMA_HIERARCHIES": elif request.RequestType == "MDSCHEMA_HIERARCHIES":
return discover_tools.discover_mdschema_hierarchies_response( return discover_tools.discover_mdschema_hierarchies_response(
...@@ -117,17 +120,19 @@ class XmlaProviderService(ServiceBase): ...@@ -117,17 +120,19 @@ class XmlaProviderService(ServiceBase):
request) request)
elif request.RequestType == "MDSCHEMA_PROPERTIES": elif request.RequestType == "MDSCHEMA_PROPERTIES":
return discover_tools.discover_mdschema_properties_response(request) return discover_tools.discover_mdschema_properties_response(
request)
elif request.RequestType == "MDSCHEMA_MEMBERS": elif request.RequestType == "MDSCHEMA_MEMBERS":
return discover_tools.discover_mdschema_members_response(request) return discover_tools.discover_mdschema_members_response(request)
# Execute function must take 2 argument ( JUST 2 ! ) Command and Properties # Execute function must take 2 argument ( JUST 2 ! ) Command and Properties
# we encapsulate them in ExecuteRequest object # we encapsulate them in ExecuteRequest object
@rpc(ExecuteRequest, @rpc(
_returns=AnyXml, ExecuteRequest,
_body_style="bare", _returns=AnyXml,
_out_header=Session) _body_style="bare",
_out_header=Session)
def Execute(ctx, request): def Execute(ctx, request):
""" """
the second principle function of xmla protocol the second principle function of xmla protocol
...@@ -236,11 +241,13 @@ def start_server(write_on_file=False): ...@@ -236,11 +241,13 @@ def start_server(write_on_file=False):
# TODO FIX it with os # TODO FIX it with os
if write_on_file: if write_on_file:
home_directory = expanduser("~") home_directory = expanduser("~")
if not os.path.isdir(os.path.join(home_directory,'olapy-data', 'logs')): if not os.path.isdir(
os.makedirs(os.path.join(home_directory,'olapy-data', 'logs')) os.path.join(home_directory, 'olapy-data', 'logs')):
os.makedirs(os.path.join(home_directory, 'olapy-data', 'logs'))
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=logging.DEBUG,
filename=os.path.join(home_directory,'olapy-data', 'logs', 'xmla.log')) filename=os.path.join(home_directory, 'olapy-data', 'logs',
'xmla.log'))
else: else:
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG) logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)
......
...@@ -78,7 +78,7 @@ class XmlaExecuteTools(): ...@@ -78,7 +78,7 @@ class XmlaExecuteTools():
""" """
for att in tuple[::-1]: for att in tuple[::-1]:
if att != -1: if att != -1:
return tuple[:tuple.index(att)+1] return tuple[:tuple.index(att) + 1]
return tuple return tuple
...@@ -94,8 +94,9 @@ class XmlaExecuteTools(): ...@@ -94,8 +94,9 @@ class XmlaExecuteTools():
""" """
axis0 = "" axis0 = ""
# only measure selected # only measure selected
if mdx_execution_result['columns_desc'][ if mdx_execution_result['columns_desc'][mdx_query_axis].keys() == [
mdx_query_axis].keys() == [self.executer.facts]: self.executer.facts
]:
if len(mdx_execution_result['columns_desc'][mdx_query_axis][ if len(mdx_execution_result['columns_desc'][mdx_query_axis][
self.executer.facts]) == 1: self.executer.facts]) == 1:
# to ignore for tupls in itertools.chain(*tuples) # to ignore for tupls in itertools.chain(*tuples)
...@@ -107,14 +108,14 @@ class XmlaExecuteTools(): ...@@ -107,14 +108,14 @@ class XmlaExecuteTools():
first_att = 3 first_att = 3
# query with on columns and on rows (without measure) # query with on columns and on rows (without measure)
elif mdx_execution_result['columns_desc'][ elif mdx_execution_result['columns_desc']['columns'] and mdx_execution_result['columns_desc']['rows']:
'columns'] and mdx_execution_result['columns_desc']['rows']:
# ['Geography','America'] # ['Geography','America']
tuples = [ tuples = [
zip(* [[[key] + list(row) zip(
for row in splited_df[key].itertuples(index=False)] *[[[key] + list(row)
for key in splited_df.keys() for row in splited_df[key].itertuples(index=False)]
if key is not self.executer.facts]) for key in splited_df.keys()
if key is not self.executer.facts])
] ]
first_att = 2 first_att = 2
...@@ -123,10 +124,11 @@ class XmlaExecuteTools(): ...@@ -123,10 +124,11 @@ class XmlaExecuteTools():
else: else:
# ['Geography','Amount','America'] # ['Geography','Amount','America']
tuples = [ tuples = [
zip(* [[[key] + [mes] + list(row) zip(
for row in splited_df[key].itertuples(index=False)] *[[[key] + [mes] + list(row)
for key in splited_df.keys() for row in splited_df[key].itertuples(index=False)]
if key is not self.executer.facts]) for key in splited_df.keys()
if key is not self.executer.facts])
for mes in self.executer.selected_measures for mes in self.executer.selected_measures
] ]
first_att = 3 first_att = 3
...@@ -250,8 +252,7 @@ class XmlaExecuteTools(): ...@@ -250,8 +252,7 @@ class XmlaExecuteTools():
# TODO must be OPTIMIZED every time!!!!! # TODO must be OPTIMIZED every time!!!!!
dfs = self.split_dataframe(mdx_execution_result) dfs = self.split_dataframe(mdx_execution_result)
if mdx_execution_result['columns_desc'][ if mdx_execution_result['columns_desc']['rows'] and mdx_execution_result['columns_desc']['columns']:
'rows'] and mdx_execution_result['columns_desc']['columns']:
return """ return """
{0} {0}
...@@ -304,24 +305,27 @@ class XmlaExecuteTools(): ...@@ -304,24 +305,27 @@ class XmlaExecuteTools():
columns_loop = [] columns_loop = []
if ( if (
(len(mdx_execution_result['columns_desc']['columns'].keys()) == 0 (len(mdx_execution_result['columns_desc']['columns'].keys()) == 0)
) ^ (len(mdx_execution_result['columns_desc']['rows'].keys()) == 0) ^
) and self.executer.facts in mdx_execution_result['columns_desc']['all'].keys(): (len(mdx_execution_result['columns_desc']['rows'].keys()) == 0)
) and self.executer.facts in mdx_execution_result['columns_desc']['all'].keys(
# iterate DataFrame horizontally ):
columns_loop = itertools.chain(* [
mdx_execution_result['result'][measure] # iterate DataFrame horizontally
for measure in mdx_execution_result['result'].columns columns_loop = itertools.chain(*[
]) mdx_execution_result['result'][measure]
for measure in mdx_execution_result['result'].columns
])
else: else:
# iterate DataFrame vertically # iterate DataFrame vertically
columns_loop = itertools.chain(* [ columns_loop = itertools.chain(
tuple *[
for tuple in mdx_execution_result['result'].itertuples( tuple
index=False) for tuple in mdx_execution_result['result'].itertuples(
]) index=False)
])
cell_data = "" cell_data = ""
index = 0 index = 0
...@@ -375,8 +379,7 @@ class XmlaExecuteTools(): ...@@ -375,8 +379,7 @@ class XmlaExecuteTools():
slicer_list = list( slicer_list = list(
set(all_dimensions_names) - set( set(all_dimensions_names) - set(
table_name table_name
for table_name in mdx_execution_result['columns_desc']['all'] for table_name in mdx_execution_result['columns_desc']['all']))
))
# we have to write measures after dimensions ! # we have to write measures after dimensions !
if 'Measures' in slicer_list: if 'Measures' in slicer_list:
...@@ -388,9 +391,9 @@ class XmlaExecuteTools(): ...@@ -388,9 +391,9 @@ class XmlaExecuteTools():
to_write = "[{0}].[{0}]".format(dim_diff) to_write = "[{0}].[{0}]".format(dim_diff)
if dim_diff == 'Measures': if dim_diff == 'Measures':
# if measures > 1 we don't have to write measure # if measures > 1 we don't have to write measure
if self.executer.facts in mdx_execution_result['columns_desc'][ if self.executer.facts in mdx_execution_result['columns_desc']['all'] and len(
'all'] and len(mdx_execution_result['columns_desc'][ mdx_execution_result['columns_desc']['all']
'all'][self.executer.facts]) > 1: [self.executer.facts]) > 1:
continue continue
else: else:
to_write = "[Measures]" to_write = "[Measures]"
...@@ -449,9 +452,9 @@ class XmlaExecuteTools(): ...@@ -449,9 +452,9 @@ class XmlaExecuteTools():
hierarchy_info = "" hierarchy_info = ""
# measure must be written at the top # measure must be written at the top
if self.executer.facts in mdx_execution_result['columns_desc'][ if self.executer.facts in mdx_execution_result['columns_desc'][mdx_query_axis].keys(
mdx_query_axis].keys() and len(mdx_execution_result[ ) and len(mdx_execution_result['columns_desc'][mdx_query_axis]
'columns_desc'][mdx_query_axis][self.executer.facts]) > 1: [self.executer.facts]) > 1:
hierarchy_info += """ hierarchy_info += """
<HierarchyInfo name="{0}"> <HierarchyInfo name="{0}">
<UName name="{0}.[MEMBER_UNIQUE_NAME]" type="xs:string"/> <UName name="{0}.[MEMBER_UNIQUE_NAME]" type="xs:string"/>
...@@ -551,11 +554,10 @@ class XmlaExecuteTools(): ...@@ -551,11 +554,10 @@ class XmlaExecuteTools():
tuple = "" tuple = ""
# not used dimensions # not used dimensions
for dim_diff in list( for dim_diff in list(
set(self.executer.get_all_tables_names(ignore_fact=True)) - set( set(self.executer.get_all_tables_names(ignore_fact=True)) -
table_name set(table_name
for table_name in mdx_execution_result['columns_desc'][ for table_name in mdx_execution_result['columns_desc']
'all'] ['all'])):
)):
tuple += """ tuple += """
<Member Hierarchy="[{0}].[{0}]"> <Member Hierarchy="[{0}].[{0}]">
<UName>[{0}].[{0}].[{1}].[{2}]</UName> <UName>[{0}].[{0}].[{1}].[{2}]</UName>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment