Beispiel #1
0
    def __init__(self, project, service_file, token=None, session=None):
        self.service_file = service_file

        self.session = session
        self.token = token or Token(project, self.service_file,
                                    session=self.session,
                                    scopes=[READ_WRITE_SCOPE])
Beispiel #2
0
    def __init__(self,
                 project: str,
                 service_file: str,
                 token=None,
                 session=None):
        """Initialize a new Instance.

    You should interact inside a async context for interaction with their
    APIs.

    :param str project:
      google project name

    :param str service_file:
      path to service account json. you should give permissions to this service
      account for Machine Learning API (Owner)

    :param gcloud.aio.auth.Token token:
      (optional) a pre-initialized Google Cloud token

    :param aiohttp.ClientSession session:
      (optional) a pre-initialized aiohttp client session

    """
        self.project = project
        self.service_file = service_file
        self.session = session or aiohttp.ClientSession()
        self.token = token or Token(self.project,
                                    self.service_file,
                                    session=self.session,
                                    scopes=[MLENGINE_SCOPE])
Beispiel #3
0
 def __init__(self, *,
              service_file: Optional[Union[str, IO[AnyStr]]] = None,
              token: Optional[Token] = None,
              session: Optional[Session] = None) -> None:
     self.session = AioSession(session, verify_ssl=VERIFY_SSL)
     self.token = token or Token(service_file=service_file, scopes=SCOPES,
                                 session=self.session.session)
Beispiel #4
0
async def test_token_does_not_require_session(creds, project):
    scopes = ['https://www.googleapis.com/auth/taskqueue']

    token = Token(project, creds, scopes=scopes)
    result = await token.get()

    assert result is not None
Beispiel #5
0
 def __init__(self,
              *,
              service_file: Optional[str] = None,
              token: Optional[Token] = None,
              session: Optional[aiohttp.ClientSession] = None) -> None:
     self.session = session
     self.token = token or Token(
         service_file=service_file, session=self.session, scopes=SCOPES)
Beispiel #6
0
async def test_token_is_created(creds, project):
    scopes = ['https://www.googleapis.com/auth/taskqueue']

    async with aiohttp.ClientSession() as session:
        token = Token(project, creds, session=session, scopes=scopes)
        result = await token.get()

    assert result is not None
    def __init__(self, project, service_file, taskqueue, location=LOCATION,
                 session=None, token=None):
        self.api_root = (f'{API_ROOT}/projects/{project}/'
                         f'locations/{location}/queues/{taskqueue}')

        self.session = session
        self.token = token or Token(project, service_file, scopes=SCOPES,
                                    session=self.session)
Beispiel #8
0
 def __init__(self,
              project: Optional[str] = None,
              service_file: Optional[Union[str, io.IOBase]] = None,
              session: Optional[Session] = None,
              token: Optional[Token] = None) -> None:
     self._project = project
     self.session = AioSession(session)
     self.token = token or Token(service_file=service_file, scopes=SCOPES,
                                 session=self.session.session)
Beispiel #9
0
async def test_token_is_created():
    project = os.environ['GCLOUD_PROJECT']
    creds = os.environ['GOOGLE_APPLICATION_CREDENTIALS']
    scopes = ['https://www.googleapis.com/auth/taskqueue']

    async with aiohttp.ClientSession() as session:
        token = Token(project, creds, session=session, scopes=scopes)
        result = await token.get()

    assert result is not None
Beispiel #10
0
    def __init__(self, project, service_file, keyproject, keyring, keyname,
                 location=LOCATION, session=None, token=None):
        # pylint: disable=too-many-arguments
        self.api_root = (f'{API_ROOT}/projects/{keyproject}/'
                         f'locations/{location}/keyRings/{keyring}/'
                         f'cryptoKeys/{keyname}')

        self.session = session
        self.token = token or Token(project, service_file, scopes=SCOPES,
                                    session=self.session)
Beispiel #11
0
async def test_token_does_not_require_creds() -> None:
    scopes = ['https://www.googleapis.com/auth/taskqueue']

    token = Token(scopes=scopes)
    result = await token.get()

    assert result
    assert token.access_token is not None
    assert token.access_token_duration != 0
    assert token.access_token_acquired_at != datetime.datetime(1970, 1, 1)
Beispiel #12
0
    def __init__(self, keyproject: str, keyring: str, keyname: str,
                 service_file: Optional[str] = None, location: str = LOCATION,
                 session: Optional[aiohttp.ClientSession] = None,
                 token: Optional[Token] = None) -> None:
        self.api_root = (f'{API_ROOT}/projects/{keyproject}/'
                         f'locations/{location}/keyRings/{keyring}/'
                         f'cryptoKeys/{keyname}')

        self.session = session
        self.token = token or Token(service_file=service_file, scopes=SCOPES,
                                    session=self.session)
Beispiel #13
0
async def test_token_is_created(creds: str) -> None:
    scopes = ['https://www.googleapis.com/auth/taskqueue']

    async with Session() as session:
        token = Token(service_file=creds, session=session, scopes=scopes)
        result = await token.get()

    assert result
    assert token.access_token is not None
    assert token.access_token_duration != 0
    assert token.access_token_acquired_at != datetime.datetime(1970, 1, 1)
Beispiel #14
0
def make_download(project,
                  service_file,
                  bucket_name,
                  session=None,
                  token=None):
    token = token or Token(project, service_file, scopes=[READ_ONLY_SCOPE])

    storage = Storage(project, service_file, session=session, token=token)
    bucket = storage.get_bucket(bucket_name)

    return functools.partial(download, bucket)
Beispiel #15
0
 def __init__(self, project: str, taskqueue: str,
              service_file: Optional[Union[str, io.IOBase]] = None,
              location: str = LOCATION,
              session: Optional[aiohttp.ClientSession] = None,
              token: Optional[Token] = None) -> None:
     self.base_api_root = f'{API_ROOT}/v2beta3'
     self.api_root = (f'{self.base_api_root}/projects/{project}/'
                      f'locations/{location}/queues/{taskqueue}')
     self.session = session
     self.token = token or Token(service_file=service_file, scopes=SCOPES,
                                 session=self.session)
    def __init__(self,
                 project: str,
                 service_file: str,
                 namespace: str = '',
                 session: aiohttp.ClientSession = None,
                 token: Token = None) -> None:
        self.project = project
        self.namespace = namespace

        self.session = session
        self.token = token or Token(
            project, service_file, session=session, scopes=SCOPES)
Beispiel #17
0
 def __init__(self,
              project: str,
              service_file: str,
              *,
              token: Token = None,
              session: aiohttp.ClientSession = None) -> None:
     self.service_file = service_file
     self.session = session
     self.token = token or Token(project,
                                 self.service_file,
                                 session=self.session,
                                 scopes=[READ_WRITE_SCOPE])
Beispiel #18
0
    def __init__(self,
                 dataset_name: str,
                 table_name: str,
                 project: Optional[str] = None,
                 service_file: Optional[Union[str, io.IOBase]] = None,
                 session: Optional[aiohttp.ClientSession] = None,
                 token: Optional[Token] = None) -> None:
        self._project = project
        self.dataset_name = dataset_name
        self.table_name = table_name

        self.session = session
        self.token = token or Token(
            service_file=service_file, session=session, scopes=SCOPES)
    def __init__(self,
                 project,
                 service_file,
                 dataset_name,
                 table_name,
                 session=None,
                 token=None):
        self.project = project
        self.table_name = table_name
        self.dataset_name = dataset_name

        self.session = session
        self.token = token or Token(
            project, service_file, session=session, scopes=SCOPES)
Beispiel #20
0
    def __init__(self,
                 project,
                 service_file,
                 dataset_name,
                 table_name,
                 session=None,
                 token=None):
        # pylint: disable=too-many-arguments
        self.project = project
        self.table_name = table_name
        self.dataset_name = dataset_name

        self.session = session
        self.token = token or Token(
            project, service_file, session=session, scopes=SCOPES)
Beispiel #21
0
    def __init__(self, project: Optional[str] = None,
                 service_file: Optional[str] = None, namespace: str = '',
                 session: Optional[aiohttp.ClientSession] = None,
                 token: Optional[Token] = None) -> None:
        self.namespace = namespace
        self.session = session

        if IS_DEV:
            self._project = os.environ.get('DATASTORE_PROJECT_ID', 'dev')
            # Tokens are not needed when using dev emulator
            self.token = None
        else:
            self._project = project
            self.token = token or Token(service_file=service_file,
                                        session=session, scopes=SCOPES)
Beispiel #22
0
 def create_token(self, credentials: Optional[JSON]) -> Optional[Token]:
     if credentials is None:
         return None
     tmpfile = tempfile.NamedTemporaryFile(mode="w+", delete=False)
     json.dump(credentials, tmpfile)
     tmpfile.close()
     try:
         token = Token(
             service_file=tmpfile.name,
             session=self.http_client,
             scopes=["https://www.googleapis.com/auth/cloud-platform"],
         )
     finally:
         os.remove(tmpfile.name)
     return token
Beispiel #23
0
    def __init__(self,
                 project,
                 service_file,
                 taskqueue,
                 location=LOCATION,
                 session=None,
                 token=None):
        # pylint: disable=too-many-arguments
        self.session = session or aiohttp.ClientSession(conn_timeout=10,
                                                        read_timeout=10)

        self.api_root = (f'{API_ROOT}/projects/{project}/'
                         f'locations/{location}/queues/{taskqueue}')

        self.token = token or Token(
            project, service_file, scopes=SCOPES, session=self.session)
Beispiel #24
0
    async def start(self, num_retries=15):
        self.session = self.session or aiohttp.ClientSession()
        self.auth_client = Token(session=self.session)

        endpoint = ("https://container.googleapis.com/v1/"
                    f"projects/{self.project_id}/"
                    f"zones/{self.zone}/"
                    f"clusters")
        network = f"projects/{self.project_id}/global/networks/{NETWORK_NAME}"

        request = {
            "cluster": {
                "name":
                self.cluster_id,
                "masterAuth": {
                    "clientCertificateConfig": {}
                },
                "network":
                network,
                "addonsConfig": {
                    "httpLoadBalancing": {},
                    "horizontalPodAutoscaling": {},
                    "kubernetesDashboard": {
                        "disabled": True
                    },
                    "dnsCacheConfig": {},
                },
                "nodePools": [{
                    "name": NODE_POOL_NAME,
                    "config": {
                        "machineType":
                        self.machine_type,
                        "diskSizeGb":
                        DISK_SIZE_GB,
                        "oauthScopes": [
                            "https://www.googleapis.com/auth/devstorage.read_only",
                            "https://www.googleapis.com/auth/logging.write",
                            "https://www.googleapis.com/auth/monitoring",
                            "https://www.googleapis.com/auth/servicecontrol",
                            "https://www.googleapis.com/auth/service.management.readonly",  # noqa
                            "https://www.googleapis.com/auth/trace.append",
                        ],
                        "metadata": {
                            "disable-legacy-endpoints": "true"
                        },
                        "preemptible":
                        USE_PREEMPTIBLES,
                        "diskType":
                        DISK_TYPE,
                        "shieldedInstanceConfig": {
                            "enableIntegrityMonitoring": True
                        },
                    },
                    "initialNodeCount": self.num_nodes,
                    "autoscaling": {},
                    "management": {
                        "autoUpgrade": True,
                        "autoRepair": True
                    },
                    "version": GKE_VERSION,
                    "upgradeSettings": {
                        "maxSurge": 1
                    },
                }],
            }
        }

        headers = {"Authorization": f"Bearer {await self.auth_client.get()}"}
        for i in range(num_retries):
            async with self.session.post(endpoint,
                                         json=request,
                                         headers=headers) as response:
                if response.status == 400 and (i + 1) < num_retries:  # retry
                    await asyncio.sleep(POLL_INTERVAL)
                    continue

                if response.status != 200:
                    print(response)
                    print(await response.text())
                assert response.status == 200, response.status
                break

        self.started = True

        # Poll for cluster endpoint
        poll_endpoint = f"{endpoint}/{self.cluster_id}"
        while not self.cluster_endpoint:
            await asyncio.sleep(POLL_INTERVAL)
            async with self.session.get(poll_endpoint,
                                        headers=headers) as response:
                if response.status != 200:
                    print(response)
                    print(await response.text())
                assert response.status == 200, response.status
                response_json = await response.json()
                if response_json.get("status") == "RUNNING":
                    self.cluster_endpoint = response_json.get("endpoint")

        print(
            f"Started Kubernetes cluster {self.cluster_id} at {self.cluster_endpoint}"
        )
Beispiel #25
0
 def __init__(self, project, service_file, session=None, token=None):
     self.project = project
     self.session = session
     self.token = token or Token(
         project, service_file, session=session, scopes=SCOPES)